Mô-đun an toàn tham chiếu ngôn ngữ Move tồn tại lỗ hổng tràn số nguyên
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 nghiêm trọng khi phân tích sâu về ngôn ngữ Move. Lỗ hổng này nằm trong mô-đun xác thực bảo mật tham chiếu, có thể dẫn đến các cuộc tấn công từ chối dịch vụ. Bài viết này sẽ giới thiệu chi tiết nguyên lý và ảnh hưởng của lỗ hổng này.
Bối cảnh lỗ hổng
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi bytecode, bao gồm kiểm tra an toàn tham chiếu. Quá trình này được chia thành nhiều bước, và lỗ hổng được phát hiện lần này xuất hiện trong giai đoạn xác minh reference_safety.
Quy trình chính của xác thực an toàn là:
Chia mã thành các khối cơ bản
Phân tích từng khối cơ bản
Phân tích trạng thái trước và sau khi hợp nhất
Truyền kết quả đến các khối tiếp theo
Trong đó sử dụng cấu trúc AbstractState để biểu thị trạng thái phân tích, bao gồm thông tin locals và đồ thị borrow.
Chi tiết lỗ hổng
Lỗi xuất hiện trong hàm join_ của trạng thái phân tích hợp nhất. Hàm này sử dụng kiểu u8 để lặp qua locals, nhưng nếu tổng chiều dài của tham số và chiều dài của biến cục bộ vượt quá 256, sẽ xảy ra tràn số nguyên.
Cụ thể là:
sử dụng self.iter_locals() để lặp qua locals trong hàm join_
iter_locals() trả về bộ lặp loại u8
Nếu chiều dài tham số + chiều dài biến cục bộ > 256, bộ lặp sẽ tràn.
Mặc dù Move có quy trình kiểm tra số lượng locals, nhưng chỉ kiểm tra số lượng biến cục bộ mà không bao gồm độ dài tham số.
Khai thác lỗ hổng
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:
Số lượng tham số và biến cục bộ được thiết lập lớn hơn 256
Sau lần thực hiện đầu tiên, độ dài của bản đồ locals mới sẽ tràn và trở nên nhỏ hơn.
Khi thực thi lại, việc truy cập chỉ mục locals không tồn tại sẽ gây ra panic
Điều này có thể gây ra từ chối dịch vụ của nút.
Ảnh hưởng của lỗ hổng
Lỗ hổng này có thể dẫn đến:
Trình xác thực bytecode Move bị sập
Các nút blockchain phụ thuộc vào Move từ chối dịch vụ
Vượt qua một số kiểm tra an toàn
Đề xuất sửa chữa
Thêm kiểm tra độ dài tham số trong kiểm tra biên locals.
Sử dụng kiểu số nguyên lớn hơn như u16 để lặp qua locals
Thêm kiểm tra an ninh bổ sung trong quá trình thực thi
Tóm tắt
Lỗ hổng này một lần nữa cho thấy ngay cả những ngôn ngữ được thiết kế chặt chẽ cũng có thể tồn tại rủi ro an ninh. Đối với ngôn ngữ Move, nên bổ sung các kiểm tra an ninh cần thiết không chỉ trong giai đoạn xác minh mà còn trong thời gian chạy. Các nhà nghiên cứu an ninh sẽ tiếp tục phân tích sâu ngôn ngữ Move để phát hiện thêm nhiều vấn đề tiềm ẩn.
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.
22 thích
Phần thưởng
22
6
Đăng lại
Chia sẻ
Bình luận
0/400
BackrowObserver
· 08-11 11:51
move lại một lần nữa thất bại
Xem bản gốcTrả lời0
MidnightTrader
· 08-10 07:32
Đây lại là mã của ai mà tân binh viết vậy, quỳ quá.
Xem bản gốcTrả lời0
MevShadowranger
· 08-10 07:30
Lại đang chơi tràn số nguyên
Xem bản gốcTrả lời0
WagmiOrRekt
· 08-10 07:29
Cũng may tôi đã đóng tất cả các vị thế Move trước đó.
Xem bản gốcTrả lời0
CommunityWorker
· 08-10 07:27
move lại sắp bùng nổ rồi? Hoảng gì vậy
Xem bản gốcTrả lời0
CryingOldWallet
· 08-10 07:26
Lại có lỗ hổng? move cũng không còn hấp dẫn nữa nhỉ.
Lỗi tràn số nguyên trong mô-đun bảo mật tham chiếu Move có thể dẫn đến Nút từ chối dịch vụ
Mô-đun an toàn tham chiếu ngôn ngữ Move tồn tại lỗ hổng tràn số nguyên
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 nghiêm trọng khi phân tích sâu về ngôn ngữ Move. Lỗ hổng này nằm trong mô-đun xác thực bảo mật tham chiếu, có thể dẫn đến các cuộc tấn công từ chối dịch vụ. Bài viết này sẽ giới thiệu chi tiết nguyên lý và ảnh hưởng của lỗ hổng này.
Bối cảnh lỗ hổng
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi bytecode, bao gồm kiểm tra an toàn tham chiếu. Quá trình này được chia thành nhiều bước, và lỗ hổng được phát hiện lần này xuất hiện trong giai đoạn xác minh reference_safety.
Quy trình chính của xác thực an toàn là:
Trong đó sử dụng cấu trúc AbstractState để biểu thị trạng thái phân tích, bao gồm thông tin locals và đồ thị borrow.
Chi tiết lỗ hổng
Lỗi xuất hiện trong hàm join_ của trạng thái phân tích hợp nhất. Hàm này sử dụng kiểu u8 để lặp qua locals, nhưng nếu tổng chiều dài của tham số và chiều dài của biến cục bộ vượt quá 256, sẽ xảy ra tràn số nguyên.
Cụ thể là:
Mặc dù Move có quy trình kiểm tra số lượng locals, nhưng chỉ kiểm tra số lượng biến cục bộ mà không bao gồm độ dài tham số.
Khai thác lỗ hổng
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:
Điều này có thể gây ra từ chối dịch vụ của nút.
Ảnh hưởng của lỗ hổng
Lỗ hổng này có thể dẫn đến:
Đề xuất sửa chữa
Tóm tắt
Lỗ hổng này một lần nữa cho thấy ngay cả những ngôn ngữ được thiết kế chặt chẽ cũng có thể tồn tại rủi ro an ninh. Đối với ngôn ngữ Move, nên bổ sung các kiểm tra an ninh cần thiết không chỉ trong giai đoạn xác minh mà còn trong thời gian chạy. Các nhà nghiên cứu an ninh sẽ tiếp tục phân tích sâu ngôn ngữ Move để phát hiện thêm nhiều vấn đề tiềm ẩn.