Phát hiện lỗ hổng tràn số nguyên mới trong xác thực an toàn của ngôn ngữ Move

robot
Đang tạo bản tóm tắt

Phát hiện lỗ hổng tràn số nguyên mới trong cơ chế bảo mật tham chiếu của ngôn ngữ Move

Gần đây, trong quá trình nghiên cứu sâu về ngôn ngữ Move, chúng tôi đã phát hiện ra một lỗ hổng tràn số nguyên mới. Lỗ hổng này xuất hiện trong quá trình xác thực an toàn tham chiếu, liên quan đến một số cơ chế cốt lõi của ngôn ngữ Move. Thông qua việc phân tích lỗ hổng này, chúng tôi có thể hiểu sâu hơn về thiết kế và triển khai của ngôn ngữ Move.

Quy trình xác minh ngôn ngữ Move

Ngôn ngữ Move sẽ xác thực các đơn vị mã trước khi thực thi bytecode, quá trình này được chia thành 4 bước. Lỗ hổng được phát hiện lần này xảy ra trong bước reference_safety.

Mô-đun reference_safety định nghĩa các hàm cốt lõi để xác minh tính an toàn của tham chiếu. Nó chủ yếu 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 biến có an toàn hay không, và việc truy cập tham chiếu lưu trữ toàn cục có an toàn hay không.

Hàm nhập của quá trình xác thực sẽ gọi analyze_function để phân tích từng hàm. analyze_function sẽ xác thực từng khối cơ bản trong hàm. Khối cơ bản là một chuỗi mã không có lệnh nhánh ngoại trừ đầu vào và đầu ra.

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

An toàn tham chiếu trong ngôn ngữ Move

Ngôn ngữ Move hỗ trợ hai loại tham chiếu: tham chiếu không thay đổi (&) và tham chiếu thay đổi (&mut). Tham chiếu không thay đổi được sử dụng để đọc dữ liệu, tham chiếu thay đổi được sử dụng để sửa đổi dữ liệu. Thiết kế này giúp cải thiện tính an toàn và khả năng đọc của mã.

Mô-đun xác minh an toàn sẽ quét mã byte của từng khối cơ bản trong hàm, xác định xem tất cả các thao tác tham chiếu có hợp pháp hay không. Quá trình xác minh chủ yếu bao gồm:

  1. Thực hiện mã khối cơ bản
  2. Trạng thái trước và sau khi thực hiện hợp nhất
  3. Cập nhật trạng thái khối
  4. Truyền điều kiện hậu kiểm đến các khối tiếp theo

Quá trình này tương tự như ý tưởng Sea of Nodes trong V8 turbofan.

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

Phân tích lỗ hổng

Lỗi xảy ra trong quá trình trạng thái trước và sau khi thực hiện hợp nhất. Khi độ dài tham số hàm cộng với độ dài biến cục bộ lớn hơn 256, việc sử dụng loại u8 để biểu thị chỉ số biến cục bộ sẽ dẫn đến tràn số nguyên.

Mặc dù ngôn ngữ Move có quy trình kiểm tra số lượng biến cục bộ, nhưng quy trình này không bao gồm độ dài tham số. Các nhà phát triển dường như nhận ra cần kiểm tra tổng số tham số và biến cục bộ, nhưng mã thực tế chỉ kiểm tra số lượng biến cục bộ.

Sự tràn số nguyên này có thể dẫn đến tấn công từ chối dịch vụ (DoS). Kẻ tấn công có thể xây dựng một khối mã vòng lặp, lợi dụng sự tràn để thay đổi trạng thái của khối. Khi khối cơ bản được thực thi lại, nếu chỉ thị cần truy cập chỉ mục không tồn tại trong trạng thái mới, chương trình sẽ bị sập.

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

Numen Cyber phát hiện độc quyền lỗ hổng cao nguy hiểm 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 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 nghiêm trọng khác trong ngôn ngữ move

Khai thác lỗ hổng

Chúng tôi đã xây dựng một bằng chứng khái niệm (PoC) để trình bày lỗ hổng này:

  1. Tạo một khối cơ bản chứa lệnh nhánh vô điều kiện để thực hiện nhiều lần.
  2. Đặt tổng số tham số và biến cục bộ là 264, dẫn đến độ dài ánh xạ biến cục bộ mới bị tràn là 8.
  3. Khi thực hiện lại khối cơ bản, cố gắng truy cập chỉ mục biến cục bộ không tồn tại, gây ra 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

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 một lỗ hổng nghiêm trọng khác trong ngôn ngữ move

Kết luận

Lỗ hổng này một lần nữa chứng minh rằng không có mã nào hoàn toàn an toàn. Mặc dù ngôn ngữ Move đã thực hiện kiểm tra tĩnh trước khi thực thi, nhưng vẫn có thể bị vượt qua bởi lỗ hổng tràn số nguyên.

Đối với sự phát triển tương lai của ngôn ngữ Move, chúng tôi đề xuất:

  1. Tăng cường mã kiểm tra trong quá trình thực thi để ngăn chặn các tình huống bất ngờ.
  2. Không chỉ dựa vào kiểm tra an ninh ở giai đoạn xác thực, mà còn cần tăng cường an ninh trong giai đoạn vận hành.

Là người tiên phong trong nghiên cứu an toàn ngôn ngữ Move, chúng tôi sẽ tiếp tục nghiên cứu sâu về các vấn đề an toàn của Move, đóng góp vào sự phát triển của nó.

Xem bản gốc
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.
  • Phần thưởng
  • 3
  • Chia sẻ
Bình luận
0/400
SnapshotLaborervip
· 23giờ trước
Học năm phút rồi đi báo lỗi phải không?
Xem bản gốcTrả lời0
RadioShackKnightvip
· 23giờ trước
di chuyển bùn lầy không thể tựa vào tường
Xem bản gốcTrả lời0
LayerZeroHerovip
· 23giờ trước
Có thể nói, move cũng chỉ vậy thôi.
Xem bản gốcTrả lời0
  • Ghim
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)