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, các nhà nghiên cứu an ninh đã phát hiện ra 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ể là ở bước reference_safety.
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 4 bước. Xác minh an toàn tham chiếu là một phần quan trọng trong đó, chủ yếu nhằm đảm bảo không có tham chiếu lơ lửng, việc truy cập tham chiếu biến là an toàn, việc truy cập tham chiếu lưu trữ toàn cầu là an toàn, v.v.
Trích dẫn xác thực an ninh cốt lõi là phân tích các khối cơ bản trong mỗi hàm. Khối cơ bản là một chuỗi mã không có lệnh nhánh ngoại trừ điểm vào và điểm ra. Move xác định các khối cơ bản bằng cách duyệt qua mã byte, tìm tất cả các lệnh nhánh và lệnh vòng.
Quá trình xác minh sử dụng cấu trúc AbstractState để biểu diễn trạng thái, bao gồm hai phần là borrow graph và locals. Trong quá trình xác minh, mã khối cơ bản sẽ được thực thi để tạo ra post state, sau đó sẽ kết hợp với pre state để cập nhật trạng thái khối và truyền đế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.
Lỗi xảy ra trong hàm join_. Khi tổng chiều dài tham số của hàm và chiều dài biến cục bộ lớn hơn 256, việc sử dụng kiểu u8 để lặp qua locals sẽ dẫn đến tràn số nguyên. Mặc dù Move có quy trình kiểm tra số lượng locals, nhưng chỉ kiểm tra locals mà không bao gồm chiều dài tham số.
Bằng cách khai thác lỗ hổng này, kẻ tấn công có thể xây dựng một khối mã lặp, sử dụng tràn để thay đổi trạng thái của khối. Khi thực thi lại, nếu chỉ thị cần truy cập chỉ số không tồn tại trong bản đồ locals mới, điều này sẽ dẫn đến DoS.
Lỗ hổng này một lần nữa cho thấy ngay cả ngôn ngữ như Move, vốn rất coi trọng an ninh, cũng có thể gặp vấn đề. Khuyến nghị các nhà thiết kế ngôn ngữ Move nên tăng cường thêm nhiều kiểm tra tại thời điểm thực thi, không chỉ dựa vào các kiểm tra an ninh trong giai đoạn xác thực. Đồng thời cũng nhắc nhở các nhà phát triển về tầm quan trọng của việc kiểm tra mã.
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.
13 thích
Phần thưởng
13
5
Chia sẻ
Bình luận
0/400
BoredWatcher
· 07-20 18:00
Lỗi này thật là không thể tin được, sao lại đơn giản như vậy.
Xem bản gốcTrả lời0
WalletInspector
· 07-20 17:59
Hề, dùng move không bằng dùng rust
Xem bản gốcTrả lời0
MemecoinTrader
· 07-20 17:58
lmao một l1 khác bị rekt... rò rỉ alpha tràn số nguyên cổ điển
Xem bản gốcTrả lời0
LidoStakeAddict
· 07-20 17:56
Move lại gặp vấn đề rồi, tsk tsk
Xem bản gốcTrả lời0
BuyHighSellLow
· 07-20 17:53
Lại thả lỏng rồi, hãy hủy diệt đi, tất cả bắt đầu lại.
Cơ chế bảo mật trích dẫn ngôn ngữ Move phát hiện lỗ hổng tràn số nguyên ảnh hưởng đến AptosMoveEVM
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, các nhà nghiên cứu an ninh đã phát hiện ra 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ể là ở bước reference_safety.
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 4 bước. Xác minh an toàn tham chiếu là một phần quan trọng trong đó, chủ yếu nhằm đảm bảo không có tham chiếu lơ lửng, việc truy cập tham chiếu biến là an toàn, việc truy cập tham chiếu lưu trữ toàn cầu là an toàn, v.v.
Trích dẫn xác thực an ninh cốt lõi là phân tích các khối cơ bản trong mỗi hàm. Khối cơ bản là một chuỗi mã không có lệnh nhánh ngoại trừ điểm vào và điểm ra. Move xác định các khối cơ bản bằng cách duyệt qua mã byte, tìm tất cả các lệnh nhánh và lệnh vòng.
Quá trình xác minh sử dụng cấu trúc AbstractState để biểu diễn trạng thái, bao gồm hai phần là borrow graph và locals. Trong quá trình xác minh, mã khối cơ bản sẽ được thực thi để tạo ra post state, sau đó sẽ kết hợp với pre state để cập nhật trạng thái khối và truyền đế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.
Lỗi xảy ra trong hàm join_. Khi tổng chiều dài tham số của hàm và chiều dài biến cục bộ lớn hơn 256, việc sử dụng kiểu u8 để lặp qua locals sẽ dẫn đến tràn số nguyên. Mặc dù Move có quy trình kiểm tra số lượng locals, nhưng chỉ kiểm tra locals mà không bao gồm chiều dài tham số.
Bằng cách khai thác lỗ hổng này, kẻ tấn công có thể xây dựng một khối mã lặp, sử dụng tràn để thay đổi trạng thái của khối. Khi thực thi lại, nếu chỉ thị cần truy cập chỉ số không tồn tại trong bản đồ locals mới, điều này sẽ dẫn đến DoS.
Lỗ hổng này một lần nữa cho thấy ngay cả ngôn ngữ như Move, vốn rất coi trọng an ninh, cũng có thể gặp vấn đề. Khuyến nghị các nhà thiết kế ngôn ngữ Move nên tăng cường thêm nhiều kiểm tra tại thời điểm thực thi, không chỉ dựa vào các kiểm tra an ninh trong giai đoạn xác thực. Đồng thời cũng nhắc nhở các nhà phát triển về tầm quan trọng của việc kiểm tra mã.