Phát hiện lỗ hổng tràn số nguyên mới trong ngôn ngữ Move
Gần đây, một lỗ hổng tràn số nguyên mới trong ngôn ngữ Move đã được phát hiện. Lỗ hổng này tồn tại trong quá trình kiểm tra an toàn tham chiếu trong giai đoạn xác thực mã, 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 thực mã trước khi thực thi bytecode, chia thành bốn bước. Lỗ hổng lần này xảy ra trong bước kiểm tra an toàn tham chiếu (reference_safety). Kiểm tra an toàn tham chiếu chủ yếu xác thực xem trong mã có tồn tại tham chiếu trống, việc truy cập tham chiếu có thể thay đổi có an toàn hay không, việc truy cập tham chiếu lưu trữ toàn cầu có an toàn hay không, v.v.
Trong quá trình xác thực, mỗi khối cơ bản sẽ được phân tích. Khối cơ bản là một chuỗi mã không có chỉ thị nhánh ngoại trừ điểm vào và điểm ra. Move nhận diện khối cơ bản bằng cách duyệt qua mã byte, tìm kiếm các chỉ thị nhánh và vòng lặp.
Mô-đun kiểm tra an toàn tham chiếu sẽ quét các lệnh bytecode trong các khối cơ bản của hàm, xác định xem các thao tác tham chiếu có hợp pháp hay không. Quy trình chính bao gồm: thực thi mã khối cơ bản, tạo trạng thái sau khi thực thi, hợp nhất và cập nhật trạng thái khối trước và sau khi thực thi, và truyền bá đến các khối tiếp theo.
Lỗi xảy ra trong quá trình trạng thái hợp nhất. Khi tổng số lượng tham số hàm và số lượng biến cục bộ vượt quá 256, do sử dụng kiểu u8 để lưu trữ, sẽ xảy ra tràn số nguyên. Điều này dẫn đến việc truy cập các biến cục bộ không tồn tại trong các thực thi tiếp theo, từ đó gây ra panic.
Kẻ tấn công có thể xây dựng một khối cơ bản vòng lặp, lợi dụng sự tràn này để thay đổi trạng thái của khối. Khi thực thi lại, việc truy cập chỉ mục biến cục bộ không tồn tại sẽ dẫn đến từ chối dịch vụ.
Lỗ hổng này phản ánh rằng ngay cả ngôn ngữ Move được thiết kế chặt chẽ cũng có thể tồn tại lỗ hổng an ninh có thể bị vượt qua. Đề nghị các nhà thiết kế ngôn ngữ Move tăng cường thêm nhiều kiểm tra trong thời gian chạy để ngăn chặn các tình huống bất ngờ tương tự xảy ra. Trong tương lai, cần tiếp tục tăng cường nghiên cứu về an ninh của ngôn ngữ Move.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Kiểm tra an toàn tham chiếu ngôn ngữ Move có lỗ hổng tràn số nguyên có thể dẫn đến tấn công từ chối dịch vụ
Phát hiện lỗ hổng tràn số nguyên mới trong ngôn ngữ Move
Gần đây, một lỗ hổng tràn số nguyên mới trong ngôn ngữ Move đã được phát hiện. Lỗ hổng này tồn tại trong quá trình kiểm tra an toàn tham chiếu trong giai đoạn xác thực mã, 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 thực mã trước khi thực thi bytecode, chia thành bốn bước. Lỗ hổng lần này xảy ra trong bước kiểm tra an toàn tham chiếu (reference_safety). Kiểm tra an toàn tham chiếu chủ yếu xác thực xem trong mã có tồn tại tham chiếu trống, việc truy cập tham chiếu có thể thay đổi có an toàn hay không, việc truy cập tham chiếu lưu trữ toàn cầu có an toàn hay không, v.v.
Trong quá trình xác thực, mỗi khối cơ bản sẽ được phân tích. Khối cơ bản là một chuỗi mã không có chỉ thị nhánh ngoại trừ điểm vào và điểm ra. Move nhận diện khối cơ bản bằng cách duyệt qua mã byte, tìm kiếm các chỉ thị nhánh và vòng lặp.
Mô-đun kiểm tra an toàn tham chiếu sẽ quét các lệnh bytecode trong các khối cơ bản của hàm, xác định xem các thao tác tham chiếu có hợp pháp hay không. Quy trình chính bao gồm: thực thi mã khối cơ bản, tạo trạng thái sau khi thực thi, hợp nhất và cập nhật trạng thái khối trước và sau khi thực thi, và truyền bá đến các khối tiếp theo.
Lỗi xảy ra trong quá trình trạng thái hợp nhất. Khi tổng số lượng tham số hàm và số lượng biến cục bộ vượt quá 256, do sử dụng kiểu u8 để lưu trữ, sẽ xảy ra tràn số nguyên. Điều này dẫn đến việc truy cập các biến cục bộ không tồn tại trong các thực thi tiếp theo, từ đó gây ra panic.
Kẻ tấn công có thể xây dựng một khối cơ bản vòng lặp, lợi dụng sự tràn này để thay đổi trạng thái của khối. Khi thực thi lại, việc truy cập chỉ mục biến cục bộ không tồn tại sẽ dẫn đến từ chối dịch vụ.
Lỗ hổng này phản ánh rằng ngay cả ngôn ngữ Move được thiết kế chặt chẽ cũng có thể tồn tại lỗ hổng an ninh có thể bị vượt qua. Đề nghị các nhà thiết kế ngôn ngữ Move tăng cường thêm nhiều kiểm tra trong thời gian chạy để ngăn chặn các tình huống bất ngờ tương tự xảy ra. Trong tương lai, cần tiếp tục tăng cường nghiên cứu về an ninh của ngôn ngữ Move.