Ngôn ngữ Move lại xuất hiện lỗ hổng nghiêm trọng: Tràn số nguyên có thể dẫn đến Nút bị sập
Gần đây, các nhà nghiên cứu an ninh đã phát hiện một lỗ hổng tràn số nguyên mới khi phân tích sâu về Aptos Moveevm. Lỗ hổng này tồn tại trong quá trình xác minh an toàn tham chiếu của ngôn ngữ Move, có thể dẫn đến việc Nút bị sập.
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi bytecode, chia thành 4 bước. Lỗ hổng này xuất hiện trong bước reference_safety. Bước này chủ yếu được sử dụng để xác minh tính an toàn của tham chiếu, bao gồm việc kiểm tra xem có tồn tại tham chiếu lơ lửng hay không, việc truy cập tham chiếu có thể thay đổi có an toàn hay không, v.v.
Quá trình xác thực sẽ duyệt qua từng khối cơ bản và thực hiện phân tích. Khối cơ bản là chuỗi mã không có lệnh phân nhánh ngoại trừ lệnh vào và ra. Ngôn ngữ Move xác định khối cơ bản bằng cách tìm kiếm các lệnh phân nhánh và vòng lặp.
Khi xác minh tính an toàn của tham chiếu, sẽ duy trì một cấu trúc AbstractState, bao gồm thông tin về đồ thị mượn và các biến cục bộ. Quá trình xác minh sẽ thực hiện mã khối cơ bản, tạo ra trạng thái sau khi thực thi, sau đó kết hợp với trạng thái trước khi thực thi, cập nhật trạng thái khối và truyền bá đến các khối tiếp theo.
Lỗi xuất hiện trong hàm join_. Hàm này được sử dụng để kết hợp state trước và sau khi thực hiện, cập nhật locals và đồ thị mượn. Khi tổng độ dài tham số và độ dài biến cục bộ lớn hơn 256, việc sử dụng loại u8 để lặp qua locals sẽ dẫn đến tràn số.
Sử dụng sự tràn này có thể thay đổi trạng thái của khối cơ bản. Trong mã có vòng lặp, khi thực thi nhiều lần cùng một khối cơ bản, có thể truy cập vào chỉ số locals không tồn tại, từ đó gây ra panic dẫn đến Nút bị sập.
Các nhà nghiên cứu đã cung cấp một mã PoC, thông qua việc thiết lập các tham số cụ thể và số lượng biến cục bộ, kích hoạt tràn số nguyên, cuối cùng dẫn đến panic.
Lỗ hổng này cho thấy ngay cả một ngôn ngữ chú trọng đến an toàn như Move cũng có thể tồn tại lỗ hổng. Đề nghị các nhà thiết kế ngôn ngữ Move tăng cường kiểm tra an toàn trong thời gian chạy, chứ không chỉ dựa vào các kiểm tra ở giai đoạn xác thực. Đồng thời cũng chỉ ra tầm quan trọng của việc kiểm tra mã.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
Lỗi tràn số nguyên trong ngôn ngữ Move: rủi ro trong xác minh an toàn tham chiếu
Ngôn ngữ Move lại xuất hiện lỗ hổng nghiêm trọng: Tràn số nguyên có thể dẫn đến Nút bị sập
Gần đây, các nhà nghiên cứu an ninh đã phát hiện một lỗ hổng tràn số nguyên mới khi phân tích sâu về Aptos Moveevm. Lỗ hổng này tồn tại trong quá trình xác minh an toàn tham chiếu của ngôn ngữ Move, có thể dẫn đến việc Nút bị sập.
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi bytecode, chia thành 4 bước. Lỗ hổng này xuất hiện trong bước reference_safety. Bước này chủ yếu được sử dụng để xác minh tính an toàn của tham chiếu, bao gồm việc kiểm tra xem có tồn tại tham chiếu lơ lửng hay không, việc truy cập tham chiếu có thể thay đổi có an toàn hay không, v.v.
Quá trình xác thực sẽ duyệt qua từng khối cơ bản và thực hiện phân tích. Khối cơ bản là chuỗi mã không có lệnh phân nhánh ngoại trừ lệnh vào và ra. Ngôn ngữ Move xác định khối cơ bản bằng cách tìm kiếm các lệnh phân nhánh và vòng lặp.
Khi xác minh tính an toàn của tham chiếu, sẽ duy trì một cấu trúc AbstractState, bao gồm thông tin về đồ thị mượn và các biến cục bộ. Quá trình xác minh sẽ thực hiện mã khối cơ bản, tạo ra trạng thái sau khi thực thi, sau đó kết hợp với trạng thái trước khi thực thi, cập nhật trạng thái khối và truyền bá đến các khối tiếp theo.
Lỗi xuất hiện trong hàm join_. Hàm này được sử dụng để kết hợp state trước và sau khi thực hiện, cập nhật locals và đồ thị mượn. Khi tổng độ dài tham số và độ dài biến cục bộ lớn hơn 256, việc sử dụng loại u8 để lặp qua locals sẽ dẫn đến tràn số.
Sử dụng sự tràn này có thể thay đổi trạng thái của khối cơ bản. Trong mã có vòng lặp, khi thực thi nhiều lần cùng một khối cơ bản, có thể truy cập vào chỉ số locals không tồn tại, từ đó gây ra panic dẫn đến Nút bị sập.
Các nhà nghiên cứu đã cung cấp một mã PoC, thông qua việc thiết lập các tham số cụ thể và số lượng biến cục bộ, kích hoạt tràn số nguyên, cuối cùng dẫn đến panic.
Lỗ hổng này cho thấy ngay cả một ngôn ngữ chú trọng đến an toàn như Move cũng có thể tồn tại lỗ hổng. Đề nghị các nhà thiết kế ngôn ngữ Move tăng cường kiểm tra an toàn trong thời gian chạy, chứ không chỉ dựa vào các kiểm tra ở giai đoạn xác thực. Đồng thời cũng chỉ ra tầm quan trọng của việc kiểm tra mã.