Cơ chế an toàn trích dẫn của ngôn ngữ Move tồn tại lỗ hổng tràn số nguyên
Gần đây, các nhà nghiên cứu an ninh đã phát hiện ra một lỗ hổng tràn số nguyên mới khi phân tích sâu ngôn ngữ Move. Lỗ hổng này xuất hiện trong quá trình xác minh an toàn tham chiếu của ngôn ngữ Move, có thể dẫn đến tấn công từ chối dịch vụ.
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 tồn tại trong giai đoạn xác minh an toàn tham chiếu (reference_safety). Mục đích chính của xác minh an toàn tham chiếu là đảm bảo không có tham chiếu lơ lửng, truy cập an toàn cho tham chiếu biến, truy cập an toàn cho tham chiếu lưu trữ toàn cầu, v.v.
Quá trình xác thực sẽ duyệt qua từng chỉ thị bytecode của khối cơ bản. Khối cơ bản là đoạn mã không có chỉ thị phân nhánh ngoài điểm vào và điểm ra. Ngôn ngữ Move xác định khối cơ bản bằng cách phân tích chỉ thị phân nhánh và chỉ thị vòng lặp.
Trích dẫn xác thực an toàn sử dụng cấu trúc AbstractState để theo dõi các biến cục bộ và mối quan hệ tham chiếu. Nó bao gồm hai phần locals và đồ thị mượn. Trong quá trình xác thực, trạng thái trước và sau khi thực hiện sẽ được so sánh và cập nhật hợp nhất.
Lỗ hổng xuất hiện trong hàm join_ ở trạng thái hợp nhất. Hàm này sử dụng kiểu u8 để lặp qua locals, nhưng nếu số lượng tham số và biến cục bộ vượt quá 256 sẽ dẫn đến tràn số nguyên. Mặc dù có logic kiểm tra số lượng locals, nhưng không xem xét chiều dài tham số.
Kẻ tấn công có thể tạo ra một khối cơ bản lặp lại, tận dụng sự tràn này để thay đổi trạng thái. Khi thực hiện lại, việc truy cập vào chỉ số locals không tồn tại sẽ dẫn đến panic, gây ra từ chối dịch vụ.
Lỗ hổng này phản ánh rằng ngay cả những ngôn ngữ an toàn kiểu tĩnh cũng có thể tồn tại rủi ro an ninh. Đề xuất ngôn ngữ Move nên tăng cường thêm các kiểm tra an toàn trong thời gian chạy, không chỉ dựa vào giai đoạn xác minh. Đồ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.
Cơ chế bảo mật tham chiếu ngôn ngữ Move lộ ra lỗ hổng tràn số nguyên, có thể dẫn đến tấn công từ chối dịch vụ
Cơ chế an toàn trích dẫn của ngôn ngữ Move tồn tại lỗ hổng tràn số nguyên
Gần đây, các nhà nghiên cứu an ninh đã phát hiện ra một lỗ hổng tràn số nguyên mới khi phân tích sâu ngôn ngữ Move. Lỗ hổng này xuất hiện trong quá trình xác minh an toàn tham chiếu của ngôn ngữ Move, có thể dẫn đến tấn công từ chối dịch vụ.
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 tồn tại trong giai đoạn xác minh an toàn tham chiếu (reference_safety). Mục đích chính của xác minh an toàn tham chiếu là đảm bảo không có tham chiếu lơ lửng, truy cập an toàn cho tham chiếu biến, truy cập an toàn cho tham chiếu lưu trữ toàn cầu, v.v.
Quá trình xác thực sẽ duyệt qua từng chỉ thị bytecode của khối cơ bản. Khối cơ bản là đoạn mã không có chỉ thị phân nhánh ngoài điểm vào và điểm ra. Ngôn ngữ Move xác định khối cơ bản bằng cách phân tích chỉ thị phân nhánh và chỉ thị vòng lặp.
Trích dẫn xác thực an toàn sử dụng cấu trúc AbstractState để theo dõi các biến cục bộ và mối quan hệ tham chiếu. Nó bao gồm hai phần locals và đồ thị mượn. Trong quá trình xác thực, trạng thái trước và sau khi thực hiện sẽ được so sánh và cập nhật hợp nhất.
Lỗ hổng xuất hiện trong hàm join_ ở trạng thái hợp nhất. Hàm này sử dụng kiểu u8 để lặp qua locals, nhưng nếu số lượng tham số và biến cục bộ vượt quá 256 sẽ dẫn đến tràn số nguyên. Mặc dù có logic kiểm tra số lượng locals, nhưng không xem xét chiều dài tham số.
Kẻ tấn công có thể tạo ra một khối cơ bản lặp lại, tận dụng sự tràn này để thay đổi trạng thái. Khi thực hiện lại, việc truy cập vào chỉ số locals không tồn tại sẽ dẫn đến panic, gây ra từ chối dịch vụ.
Lỗ hổng này phản ánh rằng ngay cả những ngôn ngữ an toàn kiểu tĩnh cũng có thể tồn tại rủi ro an ninh. Đề xuất ngôn ngữ Move nên tăng cường thêm các kiểm tra an toàn trong thời gian chạy, không chỉ dựa vào giai đoạn xác minh. Đồng thời cũng chỉ ra tầm quan trọng của việc kiểm tra mã.