
TonBit thuộc BitsLab một lần nữa phát hiện lỗ hổng trong máy ảo TON: Lệnh RUNVM có thể gây ô nhiễm môi trường thực thi hợp đồng thông minh
Tuyển chọn TechFlowTuyển chọn TechFlow

TonBit thuộc BitsLab một lần nữa phát hiện lỗ hổng trong máy ảo TON: Lệnh RUNVM có thể gây ô nhiễm môi trường thực thi hợp đồng thông minh
Kẻ tấn công có thể lợi dụng khoảnh khắc máy ảo con làm cạn kiệt gas để làm ô nhiễm các thư viện (libraries) của máy ảo cha và gây ra lỗi trong các lời gọi tiếp theo, cuối cùng dẫn đến hành vi bất thường ở các hợp đồng phụ thuộc vào tính toàn vẹn của thư viện.
Tác giả: BitsLab
TonBit thuộc BitsLab một lần nữa phát hiện ra một "quả bom ẩn" trong mã sâu của Máy ảo TON (TVM) —— lỗ hổng chuyển trạng thái không nguyên tử ở lệnh RUNVM. Kẻ tấn công có thể lợi dụng khoảnh khắc máy ảo con cạn gas để làm nhiễm thư viện (libraries) của máy ảo cha, gây thất bại cho các lời gọi sau đó, dẫn đến hành vi bất thường ở các hợp đồng phụ thuộc vào tính toàn vẹn của thư viện.
Dưới đây chúng tôi giữ nguyên nội dung kỹ thuật gốc, trình bày toàn bộ quá trình phát hiện và xác minh lỗ hổng dành cho các nhà phát triển, nhằm giúp cộng đồng hiểu sâu vấn đề này và nâng cao nhận thức phòng ngừa rủi ro tương tự.

Dưới đây là mô tả chi tiết về lỗ hổng:
Lệnh RUNVM trong TVM có thể làm nhiễm trạng thái người gọi và khiến thư viện không khả dụng. Một lỗ hổng mới được tìm thấy trong đoạn mã lệnh 'RUNVM'. Lỗ hổng này cho phép làm nhiễm trạng thái người gọi. Đoạn mã liên quan như sau:

Đoạn mã trên chịu trách nhiệm khởi động máy ảo con. Chức năng của nó là di chuyển 'log' và 'libraries' từ VmState hiện tại sang đố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à thao tác nguyên tử thực sự. Trước khi thực hiện câu lệnh '*this = std::move(new_state);', máy ảo có thể bị dừng do cạn gas, dẫn đến 'new_state' không thể thay thế thành công trạng thái hiện tại. Lúc này 'libraries' có thể đã bị di chuyển đi, khiến thư viện của máy ảo con ở trạng thái đã bị xóa (di chuyển).
Bởi vì lệnh RUNVM sử dụng tham số isolate_gas để tách biệt việc tiêu thụ gas giữa máy ảo con và máy ảo cha, điều này dẫn đến tình huống sau:
Mặc dù máy ảo con kích hoạt ngoại lệ cạn gas, máy ảo cha vẫn còn đủ gas để tiếp tục thực thi. Tuy nhiên, do quá trình chuyển trạng thái thất bại, máy ảo con đã di chuyển/xóa 'libraries', khiến các thao tác sau đó phụ thuộc vào 'libraries' đều thất bại. Tình huống này khiến một số hợp đồng giả định tính toàn vẹn của thư viện xảy ra hành vi ngoài dự kiến.
Xác minh lỗ hổng (PoC)
Chúng tôi đã tái tạo thành công lỗ hổng này thông qua trường hợp kiểm thử dưới đây:



Giải thích chỉnh sửa kiểm thử chính:
Để thuận tiện quan sát trạng thái thư viện tại chỗ, chúng tôi đã sửa đổi lệnh NOP nhằm buộc đăng ký một mục thư viện:

Các bước tái tạo:
1) Thêm trường hợp kiểm thử này vào tệp crypto/test/vm.cpp
2) Chạy chương trình thực thi test-vm
3) Quan sát ngoại lệ ném ra do thư viện trống khi thực thi lệnh XLOAD
Hành vi mong đợi:
Sau khi thực thi lệnh NOP: thư viện chứa 1 mục
Sau khi thực thi lệnh RUNVMX: mặc dù máy ảo cha tiếp tục chạy, nhưng thư viện trở thành trạng thái trống
Lệnh XLOAD thực thi thất bại và ném ngoại lệ
Điều này chứng minh đầy đủ rằng khi cơ chế chuyển trạng thái không nguyên tử và cơ chế cách ly gas cùng tác động, sẽ tạo ra trạng thái không nhất quán vi phạm tính toàn vẹn ngữ cảnh thực thi.
Phát hiện lần này một lần nữa thể hiện năng lực chuyên sâu của TonBit thuộc BitsLab trong nghiên cứu an ninh hệ sinh thái TON. Chúng tôi đã gửi ngay lập tức các chi tiết kỹ thuật và giải pháp giảm thiểu cho Quỹ TON, đồng thời hỗ trợ họ hoàn tất việc sửa lỗi. Khuyên nghị tất cả các nhà phát triển cập nhật kịp thời thư viện phụ thuộc sau khi bản vá chính thức được phát hành; đồng thời thêm logic xác minh tính toàn vẹn thư viện và quản lý gas nghiêm ngặt hơn trong các hợp đồng tự phát triển, để ngăn chặn việc khai thác ác ý các vấn đề tương tự. TechFlow sẽ tiếp tục kiên trì nguyên tắc "tiết lộ có trách nhiệm", cùng cộng đồng chung tay xây dựng hàng rào an ninh Web3 vững chắc.
Về BitsLab
BitsLab là một tổ chức an ninh cam kết bảo vệ và xây dựng hệ sinh thái Web3 mới nổi, với tầm nhìn trở thành tổ chức an ninh Web3 được ngành công nghiệp và người dùng kính trọng. Tổ chức sở hữu ba thương hiệu con: MoveBit, ScaleBit và TonBit.
BitsLab tập trung vào phát triển hạ tầng và kiểm toán an ninh cho các hệ sinh thái mới nổi, bao gồm nhưng không giới hạn ở Sui, Aptos, TON, Linea, BNB Chain, Soneium, Starknet, Movement, Internet Computer và Solana. Đồng thời, BitsLab thể hiện năng lực chuyên môn sâu rộng trong việc kiểm toán nhiều ngôn ngữ lập trình khác nhau, bao gồm Circom, Halo2, Move, Cairo, Tact, FunC, Vyper và Solidity.
Đội ngũ BitsLab quy tụ nhiều chuyên gia hàng đầu trong lĩnh vực nghiên cứu lỗ hổng, từng nhiều lần giành giải thưởng CTF quốc tế và phát hiện các lỗ hổng then chốt trong các dự án nổi tiếng như TON, Aptos, Sui, Nervos, OKX và Cosmos.
Về TonBit
TonBit, với tư cách là thương hiệu con cốt lõi của BitsLab, là chuyên gia an ninh và nhà xây dựng tiên phong trong hệ sinh thái TON. Là nhà cung cấp dịch vụ đảm bảo an ninh chính cho blockchain TON, TonBit chuyên về kiểm toán an ninh toàn diện, bao gồm kiểm toán ngôn ngữ Tact và FunC, nhằm đảm bảo các dự án dựa trên TON có tính toàn vẹn và độ bền vững. Cho đến nay, TonBit đã kiểm toán thành công nhiều dự án nổi bật như Catizen, Algebra, UTonic và phát hiện nhiều lỗ hổng quan trọng, thể hiện năng lực xuất sắc trong lĩnh vực an ninh blockchain. Ngoài ra, TonBit cũng tổ chức thành công cuộc thi TON CTF, thu hút đông đảo người tham gia và nhận được sự quan tâm rộng rãi, củng cố thêm vị thế chuyên gia an ninh trong hệ sinh thái TON. Trong tương lai, TonBit sẽ tiếp tục bảo vệ an ninh blockchain, thúc đẩy sự phát triển bền vững của công nghệ và hệ sinh thái.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














