- Lỗ hổng lệnh RUNVM gây ra lỗi thư viện khi một VM con hết gas, khiến các thư viện của VM mẹ ở trạng thái đã xóa mặc dù vẫn tiếp tục thực thi.
- TonBit đã chứng minh lỗ hổng thông qua một bài kiểm tra bằng chứng khái niệm cho thấy các hoạt động XLOAD không thành công sau khi thực thi RUNVM do thư viện bị xóa.
- Với tư cách là Nhà cung cấp dịch vụ đảm bảo an ninh chính của TON, TonBit tuân thủ các biện pháp tiết lộ có trách nhiệm và đã gửi các kế hoạch giảm thiểu tới TON Foundation để vá lỗi.
Các nhà nghiên cứu bảo mật của TonBit phát hiện ra lỗ hổng chuyển đổi trạng thái phi nguyên tử quan trọng trong lệnh RUNVM của TON Virtual Machine, làm hỏng tính toàn vẹn của thư viện khi các VM phụ thải gas, có khả năng gây ra lỗi hợp đồng trong các hệ thống phụ thuộc.
**Nội dung biên tập hợp tác với TonBit . Quan điểm thể hiện không phản ánh quan điểm của CoinRank. Không phải là lời khuyên tài chính.
TonBit, thuộc BitsLab, đã một lần nữa phát hiện ra một "quả bom hẹn giờ" sâu bên trong mã TON Virtual Machine (TVM)—lỗ hổng chuyển đổi trạng thái phi nguyên tử trong lệnh RUNVM. Kẻ tấn công có thể khai thác thời điểm một máy ảo phụ cạn gas để làm hỏng các thư viện của máy ảo mẹ và gây ra các lỗi gọi tiếp theo, cuối cùng khiến các hợp đồng phụ thuộc vào tính toàn vẹn của thư viện hoạt động bất thường. Dưới đây, chúng tôi giữ lại các chi tiết kỹ thuật ban đầu để trình bày toàn bộ quy trình khám phá và xác minh cho các nhà phát triển, giúp cộng đồng hiểu sâu hơn về vấn đề này và nâng cao nhận thức về các rủi ro tương tự.
Dưới đây là mô tả chi tiết về lỗ hổng bảo mật:
Lệnh RUNVM trong TVM có thể làm ô nhiễm trạng thái của trình gọi và khiến các thư viện không sử dụng được.
Lỗ hổng mới trong mã của lệnh 'RUNVM'. Nó cho phép trạng thái của người gọi bị ô nhiễm. Đoạn mã liên quan như sau:
Mã ở trên chịu trách nhiệm khởi chạy một VM con. Nó di chuyển 'log' và 'libraries' từ VmState hiện tại vào một đối tượng VmState mới 'new_state', sau đó thay thế VmState hiện tại bằng 'new_state'.
Vấn đề nằm ở chỗ thao tác này không phải là nguyên tử thực sự. Trước khi câu lệnh '*this = std::move(new_state);' được thực thi, VM có thể hết gas và dừng quá trình trước khi 'new_state' thay thế trạng thái hiện tại. Do đó, 'libraries' có thể đã được di chuyển ra ngoài, để lại các thư viện của VM con ở trạng thái đã xóa (di chuyển).
Vì lệnh RUNVM cung cấp tham số isolate_gas để cô lập mức tiêu thụ gas giữa VM con và VM cha, điều này tạo ra một kịch bản trong đó:
Ngay cả khi VM con kích hoạt ngoại lệ hết gas , VM cha vẫn giữ đủ gas để tiếp tục thực thi. Tuy nhiên, các hoạt động tiếp theo dựa vào 'thư viện' sẽ không thành công vì VM con đã di chuyển/xóa chúng trong quá trình chuyển đổi trạng thái không thành công. Điều này dẫn đến hành vi không mong muốn trong một số hợp đồng giả định tính toàn vẹn của các thư viện.
Xác minh PoC:
Chúng tôi đã triển khai trường hợp thử nghiệm sau để chứng minh lỗ hổng này:
Những thay đổi chính để thử nghiệm:
Để tạo điều kiện thuận lợi cho việc quan sát trạng thái của thư viện tại địa phương, chúng tôi đã sửa đổi lệnh NOP để đăng ký bắt buộc một mục nhập thư viện:
Các bước sinh sản:
Thêm trường hợp thử nghiệm này vào crypto/test/vm.cpp
Chạy tệp thực thi test-vm
Quan sát ngoại lệ trong quá trình thực thi XLOAD do thư viện trống.
Hành vi mong đợi:
Sau khi thực thi NOP: thư viện chứa 1 mục
Sau khi thực thi RUNVMX, các thư viện trở nên trống rỗng mặc dù VM cha vẫn tiếp tục
XLOAD không thành công với một ngoại lệ
Điều này chứng minh cách chuyển đổi trạng thái phi nguyên tử kết hợp với cô lập gas tạo ra trạng thái không nhất quán, vi phạm tính toàn vẹn của bối cảnh thực thi.
Phát hiện này một lần nữa làm nổi bật chuyên môn sâu rộng của TonBit, một công ty con của BitsLab, trong nghiên cứu bảo mật trong hệ sinh thái TON. Chúng tôi đã ngay lập tức gửi các chi tiết kỹ thuật và kế hoạch giảm thiểu cho TON Foundation và hỗ trợ hoàn thành việc khắc phục. Chúng tôi khuyến nghị tất cả các nhà phát triển nhanh chóng cập nhật thư viện phụ thuộc của họ sau khi bản vá chính thức được phát hành; đồng thời, kết hợp các kiểm tra toàn vẹn thư viện nghiêm ngặt hơn và logic quản lý gas vào các hợp đồng tùy chỉnh để ngăn chặn các vấn đề tương tự bị khai thác một cách ác ý. BitsLab sẽ tiếp tục duy trì nguyên tắc "tiết lộ có trách nhiệm" và cùng với cộng đồng, củng cố ranh giới bảo mật Web3.
GIỚI THIỆU VỀ TONBIT
TonBit , một thương hiệu con cốt lõi của BitsLab, là một chuyên gia bảo mật đáng tin cậy và là đơn vị xây dựng ban đầu trong hệ sinh thái TON. Là Nhà cung cấp bảo đảm bảo mật chính (SAP) cho chuỗi khối TON, TonBit chuyên về các cuộc kiểm toán bảo mật toàn diện, bao gồm các cuộc kiểm toán ngôn ngữ Tact và FunC, đảm bảo tính toàn vẹn và khả năng phục hồi của các dự án được xây dựng trên TON. Được TON chính thức xác nhận, TonBit đã kiểm toán thành công nhiều dự án nổi tiếng như Catizen, Algebra, UTonic, Ton Batch Sender, TonUp, PixelSwap, Tradoor, Miniton, Thunder Finance và gần 20 dự án khác trên TON, chứng minh được chuyên môn của mình trong việc bảo mật các giải pháp dựa trên TON.
〈 TonBit của BitsLab, một lần nữa phát hiện ra lỗ hổng trong máy ảo TON: Hướng dẫn RUNVM có thể làm ô nhiễm môi trường thực thi hợp đồng thông minh 〉這篇文章最早發佈於《 CoinRank 》。











