Mô-đun an toàn trong 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 DoS

Phát hiện lỗ hổng tràn số nguyên mới trong mô-đun an toàn 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 tồn tại trong quá trình xác thực an toàn tham chiếu, và quá trình kích hoạt nó khá thú vị. Bài viết này sẽ phân tích sâu về lỗ hổng này và khám phá một số kiến thức nền tảng về ngôn ngữ Move.

Ngôn ngữ Move sẽ thực hiện xác minh đơn vị mã trước khi thực thi bytecode, chia thành bốn bước. Lỗ hổng này xuất hiện trong bước reference_safety. Bước này chịu trách nhiệm xác minh an toàn của các tham chiếu, bao gồm kiểm tra xem có tham chiếu lơ lửng không, việc truy cập tham chiếu biến có an toàn không, việc truy cập tham chiếu lưu trữ toàn cục có an toàn không, v.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

Hàm nhập vào xác thực an toàn sẽ gọi analyze_function để xác thực từng khối cơ bản. Khối cơ bản là một chuỗi mã không có lệnh nhánh ngoại trừ lệnh vào và lệnh ra. Ngôn ngữ Move xác định khối cơ bản bằng cách duyệt bytecode, tìm tất cả các lệnh nhánh và chuỗi lệnh 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

Ngôn ngữ Move 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 bảo mật 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 hướng dẫn bytecode trong các khối cơ bản của hàm. Quá trình xác minh sử dụng cấu trúc AbstractState, bao gồm đồ thị mượn và các biến cục bộ, để đả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

Lỗi xảy ra trong hàm join_. Khi độ dài của tham số cộng với độ dài của biến cục bộ vượt quá 256, do hàm iter_locals() trả về một bộ lặp kiểu u8, điều này sẽ dẫn đến tràn số nguyên. Mặc dù Move có quá trình kiểm tra số lượng locals, nhưng trong mô-đun kiểm tra giới hạn chỉ kiểm tra locals mà không bao gồm độ dài tham 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

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

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

Chúng tôi đã cung cấp một PoC có thể tái hiện trong git. Khối mã trong PoC này chứa một lệnh nhánh vô điều kiện, mỗi khi thực hiện lệnh cuối cùng sẽ nhảy về lệnh đầu tiên, do đó nhiều lần gọi hàm execute_block và hàm join.

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

Lỗ hổng này cho thấy ngay cả những ngôn ngữ chú trọng đến bảo mật như Move cũng có thể có những rủi ro về bảo mật. Tầm quan trọng của việc kiểm tra mã nguồn là điều không cần bàn cãi, lập trình viên khó tránh khỏi những thiếu sót. Là người dẫn đầu 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.

Chúng tôi đề nghị các nhà thiết kế ngôn ngữ Move tăng cường mã kiểm tra trong thời gian chạy để ngăn ngừa các tình huống bất ngờ xảy ra. Hiện tại, Move chủ yếu thực hiện kiểm tra an toàn trong giai đoạn xác minh, nhưng điều này có thể vẫn chưa đủ. Khi việc xác minh bị bỏ qua, việc thiếu các biện pháp an toàn đủ trong giai đoạn chạy có thể dẫn đến 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 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 của 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 cao trong ngôn ngữ move

Numen Cyber phát hiện độc quyền lỗ hổng 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 của ngôn ngữ move

MOVE1.38%
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
  • 5
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
GasFeeWhisperervip
· 08-16 04:23
move lại sập rồi
Xem bản gốcTrả lời0
StopLossMastervip
· 08-16 03:33
Lại là cái hố tự mình đào ra phải không?
Xem bản gốcTrả lời0
LiquidationWatchervip
· 08-16 03:31
Lại một lần nữa có lỗ hổng.
Xem bản gốcTrả lời0
ZKProofEnthusiastvip
· 08-16 03:28
Con bug này chơi lớn rồi
Xem bản gốcTrả lời0
ZenMinervip
· 08-16 03:08
Có độc rồi, move lại phải sửa chữa 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)