Module an toàn của ngôn ngữ Move phát hiện lỗ hổng tràn số nguyên có thể dẫn đến tấn công từ chối dịch vụ

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 mô-đun bảo mật tham chiếu của ngôn ngữ Move

Gần đây, các nhà nghiên cứu trong quá trình phân tích sâu về ngôn ngữ Move đã phát hiện ra một lỗ hổng tràn số nguyên mới. Lỗ hổng này tồn tại trong mô-đun an toàn tham chiếu, có thể dẫn đến các cuộc tấn công từ chối dịch vụ nghiêm trọng. Bài viết này sẽ giới thiệu chi tiết về quá trình phát hiện và các thông tin kỹ thuật liên quan đến lỗ hổng này.

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

Cơ chế an toàn tham chiếu của ngôn ngữ Move

Ngôn ngữ Move đã tham khảo tư tưởng của Rust, hỗ trợ hai loại tham chiếu: tham chiếu không thay đổi (&) và tham chiếu có thể thay đổi (&mut). Mô-đun an toàn tham chiếu xác minh tính hợp pháp của tất cả các thao tác tham chiếu bằng cách quét các khối cơ bản và các lệnh bytecode trong hàm.

Quá trình xác minh chủ yếu bao gồm các bước sau:

  1. Phân tích từng khối cơ bản
  2. Thực thi mã khối cơ bản tạo ra trạng thái sau
  3. Kết hợp trạng thái trước và trạng thái sau
  4. Cập nhật trạng thái khối và lan truyền đến các khối tiếp theo

Trong đó, state bao gồm hai thành phần chính là locals và borrow graph, được sử dụng để đảm bảo tính an toàn của các tham chiếu trong hàm.

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

Chi tiết lỗ hổng

Lỗ hổng này xuất hiện trong hàm join_ của mô-đun bảo mật tham chiếu. Khi tổng chiều dài của tham số hàm và chiều 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ố nguyên.

Cụ thể là:

  • iter_locals() trả về một iterator kiểu u8
  • Khi độ dài tham số + độ dài biến cục bộ > 256 sẽ bị tràn
  • Các nhà phát triển dường như nhận ra cần kiểm tra điều này, nhưng mã thực tế chỉ kiểm tra số lượng biến cục bộ.

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

Khai thác lỗ hổng

Sử dụng lỗ hổng này có thể tạo ra một khối mã vòng lặp:

  1. Khi thực hiện lần đầu tiên sẽ kích hoạt tràn, thay đổi bản đồ locals
  2. Truy cập chỉ mục locals không tồn tại khi thực hiện lần thứ hai, dẫn đến panic

Điều này sẽ gây ra sự cố nút, hình thành cuộc tấn công từ chối dịch vụ.

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

Tái hiện lỗ hổng

Các nhà nghiên cứu đã cung cấp một PoC để tái tạo lỗ hổng này:

  1. Đặt parameters và locals đều là SignatureIndex(0), làm cho num_locals là 264
  2. Độ dài của bản đồ locals mới trở thành 8 sau lần thực thi đầu tiên
  3. Khi thực hiện lần thứ hai, copyloc(57) truy cập vào offset không tồn tại dẫn đến panic.

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

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

Tóm tắt và đề xuất

Lỗ hổng này cho thấy:

  1. Không có mã code an toàn tuyệt đối, kiểm tra tĩnh có thể bị bỏ qua.
  2. Kiểm toán mã rất quan trọng, có thể phát hiện sự bất cẩn của nhà phát triển
  3. Ngôn ngữ Move nên tăng cường kiểm tra thời gian chạy, chứ không chỉ dựa vào kiểm tra an ninh trong giai đoạn xác minh.

Các nhà nghiên cứu kêu gọi các nhà thiết kế ngôn ngữ Move củng cố cơ chế an toàn thời gian chạy để ngăn chặn việc khai thác các lỗ hổng tương tự gây ra các vấn đề nghiêm trọng hơn.

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

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
  • 7
  • Chia sẻ
Bình luận
0/400
SmartContractWorkervip
· 07-07 12:14
Lại ra khỏi nồi rồi, sửa chữa phải tốn công sức.
Xem bản gốcTrả lời0
staking_grampsvip
· 07-06 05:24
Lỗi này thật nghiệp dư quá.
Xem bản gốcTrả lời0
ChainMaskedRidervip
· 07-06 05:22
Kỹ năng viết mã thật sự không tinh tế lắm.
Xem bản gốcTrả lời0
MissedTheBoatvip
· 07-06 05:20
Lại có lỗ hổng, Move cũng không có gì đặc biệt.
Xem bản gốcTrả lời0
GateUser-c799715cvip
· 07-06 05:19
Mã ai viết mà sao tệ vậy
Xem bản gốcTrả lời0
YieldChaservip
· 07-06 05:17
u8 lại gặp vấn đề rồi
Xem bản gốcTrả lời0
BridgeJumpervip
· 07-06 05:09
Phát triển không quy chuẩn, sửa lỗi hai hàng nước mắt
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)