X100 거버넌스 허점 노린 해킹, 600만 달러 피해 발생

암호화폐 프로젝트 X100의 거버넌스 시스템 허점이 약 600만 달러(약 83억원)의 손실을 초래했다. 공격자는 플래시 론을 이용해 단 한 번의 거래로 두 개의 상원 의석을 확보하고, 이를 통해 재무부 거래를 승인했으며 플래시 론을 상환하는 데 성공했다. 해당 거래에서 구매한 X100 토큰은 1년 동안 동결되는 조건이었으나, 이미 공격자는 막대한 피해를 입힌 후였다.
이번 사건은 Arkadiko와 같은 다른 탈중앙화 금융(DeFi) 프로토콜에서 발생하는 유사한 보안 취약점을 다시 한번 부각시켰다. Arkadiko에서는 약 5일간 진행된 투표가 예정보다 이틀 일찍 종료되면서 악의적인 계약이 금고 자산에 대한 통제권을 획득하는 일이 발생했다. 투표가 마감되기 직전에 토큰을 구매한 참여자들이 있었고, 이들의 투표 결과가 반영된 제안이 실행된 것이다.
X100과 Arkadiko 사례는 암호화폐 프로젝트의 거버넌스 모델이 직면한 복잡성과 위험성을 드러낸다. 자본 투입, 투표 자격 획득, 그리고 승인된 행동의 실행 사이에 존재하는 간극은 이러한 공격이 가능한 배경이 된다. X100의 경우, X100 토큰은 1년간 동결되는 조건이 있지만, 이러한 장기적인 토큰 동결조차도 즉각적인 권한 행사를 막지 못했다는 점에서 심각성이 더한다.
X100의 공격 메커니즘은 다음과 같다. X100의 'Freezer' 계약은 동결된 X 토큰을 보유하고 있으며, 이는 프로젝트의 상원 의원(Senate) 후보 랭킹에 사용되는 지분(stake)을 공급한다. 이 지분의 동결 기간은 1년, 3년, 5년으로 나뉘지만, 상원 의원 자격은 최소한의 지분 보유 기간 없이 현재 동결된 양에 따라 결정된다. 공격자는 10월 24일에 발생한 첫 번째 공격에서 두 개의 헬퍼 계약을 이용해 각각 1년 만기 조건으로 19,000.000001 X를 동결시켰다. 이들은 단 한 번의 블록체인 거래로 등록, 랭킹 진입, 그리고 제안 7번을 실행하는 데 필요한 두 개의 지지 투표를 완료했다. 공격자는 이처럼 짧은 시간 안에 지분 확보, 투표, 그리고 제안 실행까지 마쳤다.
이러한 거버넌스 마감 시한에는 의무적인 대기 기간이 없었다. 제안이 열려 있는 동안, 현재 랭킹된 상원 의석의 과반수만으로도 실행을 승인할 수 있었기 때문이다. 세 석 중 두 석을 확보한 공격자는 즉시 행동할 수 있는 충분한 권한을 얻었다.
승인된 거래는 재무부의 X 토큰 400,000개를 공격자가 생성한 풀로 전송했다. 공격자는 이 풀에서 토큰을 추출하고 X를 판매하여 상환에 필요한 현금을 확보했다. 공격 과정에서 구매한 지분은 계속 동결된 상태였으나, 재무부에서 추출한 현금과 토큰 판매 대금으로 플래시 론을 상환했기 때문에 공격자는 구매한 지분을 먼저 회수할 필요가 없었다.
이번 공격으로 빌린 플래시 론 규모는 약 194만 USDT였으며, 원금과 이자를 포함한 금액이 상환되었다. 상환 후 약 475만 USDT가 첫 번째 최종 수령인에게 전달된 것으로 파악된다. ChainBounty의 기여자 Philippark는 세 명의 수령인에게 지급된 총 484만 8천 USDT를 추적했다. 이 금액은 판매되지 않은 X 토큰과 그 가치 변동을 제외한 수치다.
Freezer 계약은 공격 이후에도 중요한 제약 사항을 유지했다. 즉, 실행 후 Freezer의 X 잔고는 사용자들이 동결한 총액을 충당해야만 했다. 이는 공격자가 재무부에서 X 토큰을 대량으로 인출하더라도, 해당 토큰이 Freezer 계약의 의무를 충족시키기 위해 동결된 상태로 유지되어야 함을 의미한다. 그러나 공격자는 이 동결된 X 토큰을 이용하여 즉시 수익을 실현할 수 있었던 것으로 보인다.
X100의 상원 거버넌스 시스템은 의사 결정 과정에서 투명성과 보안을 강화하기 위해 설계되었으나, 이번 사건으로 인해 그 허점이 명백히 드러났다. 공격자가 합법적인 거버넌스 절차를 악용하여 막대한 이익을 얻은 사례로, 향후 다른 암호화폐 프로젝트들이 거버넌스 설계 및 보안 강화에 대한 재검토를 해야 할 필요성을 시사한다.