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 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 ngôn ngữ Move, có thể dẫn đến Nút bị sập. Lỗ hổng này tồn tại trong mô-đun xác thực an toàn tham chiếu của ngôn ngữ Move, liên quan đến phân tích khối cơ bản và quá trình hợp nhất trạng thái.
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 được phát hiện lần này xuất hiện trong giai đoạn xác minh an toàn (reference_safety). Giai đoạn này sẽ phân tích các khối cơ bản trong hàm, xác minh tính hợp pháp của các thao tác tham chiếu.
Trong quá trình xác minh, sẽ duy trì một cấu trúc AbstractState, bao gồm các biến cục bộ (locals) và đồ thị mối quan hệ vay (borrow graph). Khi phân tích khối cơ bản, sẽ thực hiện các lệnh trong khối để tạo ra trạng thái sau, sau đó kết hợp với trạng thái trước để cập nhật trạng thái.
Lỗi phát sinh trong hàm join_ ở trạng thái hợp nhất. Hàm này sẽ duyệt qua biến locals, nhưng locals bao gồm các tham số hàm và biến cục bộ. Khi tổng số lượng tham số và biến cục bộ vượt quá 256, do sử dụng kiểu u8 để lặp, sẽ xảy ra tràn số nguyên.
Kẻ tấn công có thể xây dựng các khối mã vòng lặp đặc biệt, lợi dụng sự tràn này để thay đổi trạng thái. Trong vòng phân tích tiếp theo, một số lệnh có thể truy cập chỉ số locals không tồn tại, dẫn đến panic gây ra sự cố Nút.
Các nhà nghiên cứu đã cung cấp một bằng chứng khái niệm (PoC), bằng cách thiết lập 264 biến locals, có thể kích hoạt panic trong phân tích vòng thứ hai. Điều này phơi bày sự thiếu sót trong việc kiểm tra an toàn đủ trong ngôn ngữ Move trong thời gian chạy.
Lỗ hổng này lại cho thấy, ngay cả ngôn ngữ Move nhấn mạnh đến an toàn 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 quá trình thực thi, chứ không chỉ dựa vào phân tích tĩnh trong giai đoạn xác thực. Đồng thời cũng nhắc nhở các nhà phát triển tăng cường kiểm toán mã, tránh những sơ suất tương tự.
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.
9 thích
Phần thưởng
9
5
Chia sẻ
Bình luận
0/400
SmartContractPhobia
· 08-02 02:38
move đã sụp đổ hoàn toàn, nguyên bản cũng đã sụp đổ.
Ngôn ngữ Move lộ ra lỗ hổng tràn số nguyên, rủi ro sập Nút thu hút sự theo dõi
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 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 ngôn ngữ Move, có thể dẫn đến Nút bị sập. Lỗ hổng này tồn tại trong mô-đun xác thực an toàn tham chiếu của ngôn ngữ Move, liên quan đến phân tích khối cơ bản và quá trình hợp nhất trạng thái.
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 được phát hiện lần này xuất hiện trong giai đoạn xác minh an toàn (reference_safety). Giai đoạn này sẽ phân tích các khối cơ bản trong hàm, xác minh tính hợp pháp của các thao tác tham chiếu.
Trong quá trình xác minh, sẽ duy trì một cấu trúc AbstractState, bao gồm các biến cục bộ (locals) và đồ thị mối quan hệ vay (borrow graph). Khi phân tích khối cơ bản, sẽ thực hiện các lệnh trong khối để tạo ra trạng thái sau, sau đó kết hợp với trạng thái trước để cập nhật trạng thái.
Lỗi phát sinh trong hàm join_ ở trạng thái hợp nhất. Hàm này sẽ duyệt qua biến locals, nhưng locals bao gồm các tham số hàm và biến cục bộ. Khi tổng số lượng tham số và biến cục bộ vượt quá 256, do sử dụng kiểu u8 để lặp, sẽ xảy ra tràn số nguyên.
Kẻ tấn công có thể xây dựng các khối mã vòng lặp đặc biệt, lợi dụng sự tràn này để thay đổi trạng thái. Trong vòng phân tích tiếp theo, một số lệnh có thể truy cập chỉ số locals không tồn tại, dẫn đến panic gây ra sự cố Nút.
Các nhà nghiên cứu đã cung cấp một bằng chứng khái niệm (PoC), bằng cách thiết lập 264 biến locals, có thể kích hoạt panic trong phân tích vòng thứ hai. Điều này phơi bày sự thiếu sót trong việc kiểm tra an toàn đủ trong ngôn ngữ Move trong thời gian chạy.
Lỗ hổng này lại cho thấy, ngay cả ngôn ngữ Move nhấn mạnh đến an toàn 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 quá trình thực thi, chứ không chỉ dựa vào phân tích tĩnh trong giai đoạn xác thực. Đồng thời cũng nhắc nhở các nhà phát triển tăng cường kiểm toán mã, tránh những sơ suất tương tự.