
BitsLab 산하 TonBit, TON 가상 머신의 또 다른 취약점 발견: RUNVM 명령어가 스마트 계약 실행 환경 오염 초래할 수 있음
TechFlow 선정TechFlow 추천

BitsLab 산하 TonBit, TON 가상 머신의 또 다른 취약점 발견: RUNVM 명령어가 스마트 계약 실행 환경 오염 초래할 수 있음
공격자는 서브 가상 머신이 가스를 소모하는 순간을 이용해 부모 가상 머신의 라이브러리를 오염시켜 후속 호출에 실패하게 만들고, 결국 라이브러리 무결성에 의존하는 계약이 비정상적인 동작을 하게 만들 수 있다.
저자: BitsLab
BitsLab 산하 TonBit가 이번에도 TON 가상 머신(TVM)의 저수준 코드에서 또 한 개의 '보이지 않는 폭탄'을 발견했다. 바로 RUNVM 명령어의 비원자적 상태 전이 취약점이다. 공격자는 서브 가상 머신이 gas를 소진하는 순간을 이용해 부모 가상 머신의 라이브러리(library)를 오염시킬 수 있으며, 이로 인해 후속 호출이 실패하고 라이브러리 무결성에 의존하는 스마트 계약이 비정상 동작을 일으킬 수 있다.
아래에서는 기술적 세부 사항을 원문 그대로 유지하며 개발자들에게 취약점 발견 및 검증 과정 전체를 소개한다. 이를 통해 커뮤니티가 해당 문제를 깊이 이해하고 유사한 위험에 대한 경각심을 높이는 데 도움을 주고자 한다.

다음은 취약점에 대한 상세 설명:
TVM의 RUNVM 명령어는 호출자의 상태를 오염시켜 라이브러리를 사용 불가능하게 만들 수 있다. 'RUNVM' 명령어 코드에서 새로운 취약점이 발견되었으며, 이 취약점을 통해 호출자의 상태가 오염될 수 있다. 관련 코드 조각은 다음과 같다:

위 코드는 서브 가상 머신을 시작하는 역할을 한다. 현재 VmState의 'log'와 'libraries'를 새로운 VmState 객체인 'new_state'로 이동시키고, 이후 'new_state'로 현재 VmState를 대체한다.
문제는 이 작업이 진정한 의미의 원자적(atom) 작업이 아니라는 점이다. '*this = std::move(new_state);' 문장 실행 이전에 가상 머신이 gas 고갈로 인해 프로세스를 중단할 경우, 'new_state'가 성공적으로 현재 상태를 대체하지 못하게 된다. 이때 'libraries'는 이미 이동되었기 때문에 서브 가상 머신의 라이브러리는 제거된(이동된) 상태가 된다.
RUNVM 명령어는 isolate_gas 매개변수를 통해 서브 가상 머신과 부모 가상 머신 간의 gas 소비를 격리하기 때문에 다음 시나리오가 발생할 수 있다:
서브 가상 머신이 gas 고갈 예외를 발생시켰더라도 부모 가상 머신은 여전히 충분한 gas를 보유하여 계속 실행될 수 있다. 그러나 실패한 상태 전이 과정에서 서브 가상 머신이 이미 'libraries'를 이동/삭제했기 때문에, 이후 'libraries'에 의존하는 모든 작업이 실패하게 된다. 이러한 상황은 라이브러리 무결성을 전제로 하는 일부 계약이 예상치 못한 동작을 하게 만든다.
취약점 검증(PoC 검증)
우리는 아래 테스트 케이스를 통해 해당 취약점을 성공적으로 재현하였다:



핵심 테스트 수정 사항 설명:
로컬 환경에서 라이브러리 상태를 쉽게 관찰하기 위해 NOP 명령어를 수정하여 강제로 라이브러리 항목을 등록하도록 하였다:

재현 단계:
1) 이 테스트 케이스를 crypto/test/vm.cpp 파일에 추가
2) test-vm 실행 파일을 실행
3) XLOAD 명령어 실행 시 빈 라이브러리로 인해 예외가 발생하는지 확인
기대되는 동작:
NOP 명령어 실행 후: 라이브러리에 1개 항목 존재
RUNVMX 명령어 실행 후: 부모 가상 머신은 계속 실행되지만 라이브러리가 빈 상태로 변함
XLOAD 명령어 실행 실패 및 예외 발생
이로써 비원자적 상태 전이와 gas 격리 메커니즘이 함께 작용할 때 실행 컨텍스트 무결성을 위반하는 일관되지 않은 상태가 발생함이 충분히 입증되었다.
이번 발견은 BitsLab 산하 TonBit가 TON 생태계 보안 연구에서 갖춘 깊은 전문성을 다시 한번 입증한다. 우리는 즉시 기술 세부 정보와 완화 방안을 TON 재단에 제출하였으며, 수정 작업을 지원하였다. 개발자들은 공식 패치 출시 후 즉시 종속 라이브러리를 업데이트할 것을 권장하며, 자체 개발 계약에는 더욱 엄격한 라이브러리 무결성 검증 및 gas 관리 로직을 포함시켜야 하여 유사한 문제가 악용되는 것을 방지해야 한다. BitsLab는 앞으로도 '책임 있는 공개(responsible disclosure)' 원칙을 지키며 커뮤니티와 함께 Web3 보안 방어 체계를 강화해 나갈 것이다.
BitsLab 소개
BitsLab은 신생 Web3 생태계의 보호와 구축에 헌신하는 보안 조직으로, 업계와 사용자로부터 존경받는 Web3 보안 기관이 되는 것을 비전으로 삼고 있다. MoveBit, ScaleBit, TonBit 등 세 개의 자회사 브랜드를 보유하고 있다.
BitsLab은 Sui, Aptos, TON, Linea, BNB Chain, Soneium, Starknet, Movement, Monad, Internet Computer, Solana 등의 생태계를 포함한 신생 생태계의 인프라 개발 및 보안 감사를 중심으로 활동한다. 또한 Circom, Halo2, Move, Cairo, Tact, FunC, Vyper, Solidity 등 다양한 프로그래밍 언어의 감사에서도 탁월한 전문성을 보여주고 있다.
BitsLab 팀은 다수의 최고 수준 취약점 연구 전문가들로 구성되어 있으며, 국제 CTF 대회에서 여러 차례 수상한 경력이 있으며, TON, Aptos, Sui, Nervos, OKX, Cosmos 등 유명 프로젝트에서 핵심 취약점을 다수 발견한 바 있다.
TonBit 소개
TonBit는 BitsLab의 핵심 자회사 브랜드로서, TON 생태계 내 보안 전문가이자 초기 건설자이다. TON 블록체인의 주요 보안 솔루션 제공자로서, TonBit는 Tact 및 FunC 언어 감사를 포함한 포괄적인 보안 감사에 집중하여 TON 기반 프로젝트의 무결성과 탄력성을 보장한다. 지금까지 Catizen, Algebra, UTonic 등 다수의 유명 프로젝트를 성공적으로 감사하며 여러 핵심 취약점을 발견함으로써 블록체인 보안 분야에서의 뛰어난 능력을 입증하였다. 또한 TonBit는 TON CTF 대회를 성공적으로 개최하여 많은 참가자를 유치하고 광범위한 관심을 받았으며, TON 생태계 내 보안 전문가로서의 입지를 더욱 공고히 하였다. 앞으로도 TonBit는 블록체인 보안을 지속해서 수호하며 기술과 생태계의 발전을 추진할 것이다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














