Victim Loss (Rari ETH Pool)~2,600 ETH — 60% of pool
Attack Transactions~91 pairs (Work + Donate)
Flash Loan per Tx58,903.48 WETH
2-2. Attack Execution Flow
Step 1 — Flash Loan
dYdX에서 ~59,000 WETH 플래시 론
dYdX Solo Margin에서 58,903.48 WETH를 무담보 차입. Evil fToken 컨트랙트(0x2f75...5D46)가 실행 주체.
58,903.48 WETH → Evil fToken CA
Step 2 — Rari Pool에 ETH 예치 (정상 환율)
Rari Fund Manager deposit() 호출
Flash loan으로 받은 ETH를 Rari Capital ETH Pool에 예치. 이 시점에서 ibETH/ETH 환율은 정상 → 57,849.51 REPT 수령.
58,903.48 ETH → 57,849.51 REPT 민팅
Step 3 — ibETH.work() 호출 (가격 조작)
Alpha ibETH의 work() 함수로 totalETH 인위적 팽창
ibETH.work()에 1,063.32 ETH를 전송하여 ibETH 컨트랙트의 ETH 잔고를 일시적으로 팽창. ibETH.totalETH() 반환값이 증가하면서 Rari Controller가 계산하는 ibETH/ETH 환율이 왜곡.
1,063.32 ETH → ibETH (totalETH 팽창)
Step 4 — Rari Pool에서 ETH 인출 (조작된 환율)
Rari Fund Manager withdraw() — 팽창된 ibETH 가격으로 더 많은 ETH 인출
ibETH.totalETH()가 팽창된 상태에서 withdraw() 호출. Rari Controller가 ibETH 잔고를 과대평가 → 동일 REPT 소각 시 더 많은 ETH 반환. 57,820.89 REPT 소각 → 58,907.67 ETH 수령 (예치 대비 4.19 ETH 초과).
57,820.89 REPT 소각 → 58,907.67 ETH (차액: +4.19 ETH)
Step 5 — dYdX Flash Loan 상환
Flash loan 원금 상환
58,903.48 WETH를 dYdX Solo Margin에 상환. ibETH.work() 종료 시 1,063.32 ETH도 자동 반환.
58,903.48 WETH → dYdX
Step 6 — 순이익 확보 (단일 Tx)
Work 트랜잭션 이익: ~28.62 REPT (+ 잔여 ETH)
Work Tx에서 ~28.62 REPT(≈약 30 ETH 상당)의 순이익 확보. 이후 별도 Donate Tx에서 REPT를 ETH로 교환하여 실현. 이 사이클을 ~91회 반복 → 총 ~2,600 ETH 탈취.
ibETH.totalETH() 조작 가능 — work() 함수 실행 중 ibETH 컨트랙트에 전송된 ETH가 totalETH()에 반영되어 일시적 가격 팽창 유발
work() 내 임의 컨트랙트 호출 — ibETH.work()의 goblin 콜백이 외부 컨트랙트를 자유롭게 호출할 수 있어, Rari의 deposit/withdraw를 조작된 상태에서 실행 가능
외부 의존 오라클 미검증 — Rari Controller가 ibETH.totalETH()/totalSupply() 비율을 무비판적으로 사용. 조작 가능성 미고려
동일 블록 내 Deposit+Withdraw 허용 — 같은 트랜잭션에서 deposit과 withdraw를 연속 호출할 수 있어 flash loan 기반 공격에 무방비
교훈
통합 프로토콜 공동 보안 리뷰 — 외부 프로토콜 통합 시 해당 프로토콜 팀과 함께 통합 코드를 리뷰. 내부 불변량(invariant) 위반 가능성 검토
불변량 체크 / Failsafe — 지분 가치(value-per-share)가 이전 기록보다 떨어지면 자동 일시정지하는 안전장치 구현
시간 잠금(Timelock) — deposit 후 같은 블록/시간 내 withdraw 방지. Flash loan 기반 공격 속도 제한
다중 감사 — Quantstamp 단독 감사 후 취약점 미발견. OpenZeppelin 등 복수 감사사 활용 권장
2-8. 공격 당시 토큰 가격
ETH (WETH)
~$3,916
공격 시점 시가
REPT (Rari ETH Pool Token)
~$3,989
1 REPT ≈ 1.018 ETH (정상)
ibETH/ETH (조작 후)
팽창됨
totalETH +1,063 ETH 일시 증가
RGT (Rari Governance)
~$18→$10
공격 후 -44% 폭락
💡 가격 조작 핵심: ibETH.work() 콜백에서 ETH를 ibETH 컨트랙트에 전송 → ibETH.totalETH() 일시 팽창 → Rari Controller의 ibETH 가치 계산(totalETH/totalSupply)이 과대 평가 → 동일 REPT 소각 시 더 많은 ETH 반환. work() 종료 시 ETH 자동 반환되어 공격 비용은 가스비뿐.
Block 3 — 인터랙티브 자금 흐름
단일 Work 트랜잭션 내 자금 흐름입니다. 각 단계를 클릭하면 해당 흐름이 하이라이트됩니다.