Gần đây, một lỗ hổng tràn số nguyên nghiêm trọng đã được phát hiện tồn tại trong ngôn ngữ Move. Lỗ hổng này xuất hiện trong bước xác minh an toàn tham chiếu, có thể dẫn đến tấn công từ chối dịch vụ. Bằng cách phân tích sâu lỗ hổng này, chúng ta có thể hiểu rõ hơn về ngôn ngữ Move.
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi mã byte, chia thành bốn bước. Lỗ hổng này xuất hiện trong bước reference_safety. Mô-đun reference_safety chịu trách nhiệm xác minh tính hợp pháp của các thao tác tham chiếu, bao gồm kiểm tra xem có tham chiếu lơ lửng hay không, việc truy cập tham chiếu biến có an toàn hay không, v.v.
Quá trình xác thực được thực hiện theo từng hàm. Đối với mỗi hàm, sẽ xác định các khối cơ bản bên trong. Khối cơ bản là một chuỗi mã liên tục, chỉ có thể có nhánh tại điểm vào và điểm ra. Sau đó, phân tích từng khối cơ bản, tạo ra trạng thái trước và sau khi thực hiện, và truyền trạng thái đến các khối tiếp theo.
Trạng thái bao gồm hai phần thông tin là locals và đồ thị mượn. Locals ghi lại thông tin về các biến cục bộ, đồ thị mượn biểu thị mối quan hệ tham chiếu giữa các biến. Quá trình phân tích sẽ liên tục cập nhật những thông tin trạng thái này.
Lỗi xuất hiện trong quá trình hợp nhất trạng thái. Khi tổng số tham số hàm và biến cục bộ vượt quá 256, do sử dụng kiểu u8 để biểu thị chỉ số, sẽ xảy ra tràn số nguyên. Điều này dẫn đến thông tin trạng thái sau khi hợp nhất bị sai, từ đó có thể gây ra tấn công từ chối dịch vụ.
Mặc dù ngôn ngữ Move có cơ chế kiểm tra số lượng biến cục bộ, nhưng không xem xét số lượng tham số. Sự sơ suất này đã dẫn đến việc xảy ra lỗ hổng.
Để kích hoạt lỗ hổng này, kẻ tấn công có thể xây dựng một khối mã lặp, lợi dụng sự tràn để thay đổi trạng thái của khối. Khi thực hiện lại, do thông tin trạng thái sai, việc truy cập vào biến không tồn tại sẽ dẫn đến sự cố chương trình.
Lỗ hổng này lại khẳng định rằng ngay cả những ngôn ngữ được thiết kế tinh xảo cũng có thể tồn tại những rủi ro về an ninh. Nó nhắc nhở chúng ta về tầm quan trọng của việc kiểm tra mã, cũng như cần có những xem xét an ninh toàn diện hơn trong thiết kế ngôn ngữ. Đối với ngôn ngữ Move, việc tăng cường thêm nhiều kiểm tra trong thời gian chạy có thể là một hướng cải tiến.
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ỗ hổng tràn số nguyên trong ngôn ngữ Move bị lộ, trích dẫn xác minh an toàn có rủi ro
Ngôn ngữ Move tái hiện lỗ hổng tràn số nguyên
Gần đây, một lỗ hổng tràn số nguyên nghiêm trọng đã được phát hiện tồn tại trong ngôn ngữ Move. Lỗ hổng này xuất hiện trong bước xác minh an toàn tham chiếu, có thể dẫn đến tấn công từ chối dịch vụ. Bằng cách phân tích sâu lỗ hổng này, chúng ta có thể hiểu rõ hơn về ngôn ngữ Move.
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi mã byte, chia thành bốn bước. Lỗ hổng này xuất hiện trong bước reference_safety. Mô-đun reference_safety chịu trách nhiệm xác minh tính hợp pháp của các thao tác tham chiếu, bao gồm kiểm tra xem có tham chiếu lơ lửng hay không, việc truy cập tham chiếu biến có an toàn hay không, v.v.
Quá trình xác thực được thực hiện theo từng hàm. Đối với mỗi hàm, sẽ xác định các khối cơ bản bên trong. Khối cơ bản là một chuỗi mã liên tục, chỉ có thể có nhánh tại điểm vào và điểm ra. Sau đó, phân tích từng khối cơ bản, tạo ra trạng thái trước và sau khi thực hiện, và truyền trạng thái đến các khối tiếp theo.
Trạng thái bao gồm hai phần thông tin là locals và đồ thị mượn. Locals ghi lại thông tin về các biến cục bộ, đồ thị mượn biểu thị mối quan hệ tham chiếu giữa các biến. Quá trình phân tích sẽ liên tục cập nhật những thông tin trạng thái này.
Lỗi xuất hiện trong quá trình hợp nhất trạng thái. Khi tổng số tham số hàm và biến cục bộ vượt quá 256, do sử dụng kiểu u8 để biểu thị chỉ số, sẽ xảy ra tràn số nguyên. Điều này dẫn đến thông tin trạng thái sau khi hợp nhất bị sai, từ đó có thể gây ra tấn công từ chối dịch vụ.
Mặc dù ngôn ngữ Move có cơ chế kiểm tra số lượng biến cục bộ, nhưng không xem xét số lượng tham số. Sự sơ suất này đã dẫn đến việc xảy ra lỗ hổng.
Để kích hoạt lỗ hổng này, kẻ tấn công có thể xây dựng một khối mã lặp, lợi dụng sự tràn để thay đổi trạng thái của khối. Khi thực hiện lại, do thông tin trạng thái sai, việc truy cập vào biến không tồn tại sẽ dẫn đến sự cố chương trình.
Lỗ hổng này lại khẳng định rằng ngay cả những ngôn ngữ được thiết kế tinh xảo cũng có thể tồn tại những rủi ro về an ninh. Nó nhắc nhở chúng ta về tầm quan trọng của việc kiểm tra mã, cũng như cần có những xem xét an ninh toàn diện hơn trong thiết kế ngôn ngữ. Đối với ngôn ngữ Move, việc tăng cường thêm nhiều kiểm tra trong thời gian chạy có thể là một hướng cải tiến.