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.

Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác của ngôn ngữ move

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.

Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move

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.

Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move

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.

Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move

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ố.

Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác của ngôn ngữ move

Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác của ngôn ngữ move

Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move

Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move

Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move

Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move

Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move

Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move

Numen Cyber phát hiện độc quyền lỗ hổng nguy hiểm khác của ngôn ngữ move

Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng trong ngôn ngữ move

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.

Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move

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ã.

MOVE1.9%
Xem bản gốc
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.
  • Phần thưởng
  • 2
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
BlockchainDecodervip
· 08-08 08:49
Kiểm tra trích dẫn quá yếu
Xem bản gốcTrả lời0
Hash_Banditvip
· 08-06 01:22
Vấn đề an toàn phải được coi trọng
Xem bản gốcTrả lời0
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)