
출시 직후 해킹당한 Radiant Protocol, 450만 달러 피해
글: Daniel Tan
2024년 1월 3일, Arbitrum 상의 Radiant 프로토콜이 플래시론 공격을 당했다. 해커는 #Radiant 프로토콜에 대해 총 3차례 공격을 수행했으며, 이로 인해 1902 ETH(약 450만 달러)가 유출되었다. 근본 원인은 새로운 $USDC 마켓에서 'burn' 함수 내 수학적 반올림 오류를 악용한 것으로, 이를 통해 해커는 추가적인 $USDC를 인출할 수 있었다.
MetaTrust Labs는 이번 공격에 대해 심층적인 조사와 분석을 진행하여, 해커가 취약점을 어떻게 이용해 공격을 실행했는지를 밝혀냈다.
대출 프로토콜 Radiant Protocol
Radiant는 여러 블록체인(Arbitrum, BNB 체인, 이더리움 등)에서 운영되는 탈중앙화 비관리형 대출 프로토콜이다.

공격 발생 후에도 Radiant 프로토콜의 잠긴 총 자산 가치(TVL)는 여전히 3.13억 달러에 달했는데, 이는 프로젝트 팀이 공격 직후 곧바로 프로토콜을 일시 정지시켜 추가 피해를 막았기 때문이다.

타임라인

거래 정보
0xc5c4bbddec70edb58efba60c1f27bce6515a45ffcab4236026a5eeb3e877fc6d
0x2af556386c023f7ebe7c662fd5d1c6cc5ed7fba4723cbd75e00faaa98cd14243
0x1ce7e9a9e3b6dd3293c9067221ac3260858ce119ecb7ca860eac28b2474c7c9b
자산 손실
총 3건의 공격 거래로 인해 1902 ETH 이상(450만 달러 이상)이 유출되었다. 기고 시점 기준으로, 1902 $ETH는 여전히 해커의 지갑(0x826d5f4d8084980366f975e10db6c4cf1f9dde6d)에 보관되어 있다.
공격자 주소
0x826d5f4d8084980366f975e10db6c4cf1f9dde6d
공격 스마트 계약
0x39519c027b503f40867548fb0c890b11728faa8f
피해를 입은 스마트 계약
Radiant: Lending Pool:
0xf4b1486dd74d07706052a33d31d7c0aafd0659e1
rUSDCn:
0x3a2d44e354f2d88ef6da7a5a4646fd70182a7f55
공격 이전 상황
공격 발생 15초 전, 프로젝트팀이 Arbitrum에 새롭게 USDC 마켓을 생성하였으며, 해커는 그 새 마켓과 상호작용한 최초의 사용자였다.

공격 절차
첫 번째 공격 트랜잭션 0x1ce7e9a9e3b6dd3293c9067221ac3260858ce119ecb7ca860eac28b2474c7c9b를 예로 들어 설명한다.
1. AAVE에서 플래시론 기능을 이용해 300만 달러 상당의 USDC를 차입함;
2. 200만 $USDC를 Radiant 풀에 예치함. 이때 liquidityIndex는 1e27임.

3. Radiant Lending Pool에서 200만 달러 규모의 플래시론을 실행해 liquidityIndex를 1.8e36까지 증폭시킴.
4. 위 단계 3을 151회 반복하여 liquidityIndex를 2.7e38까지 증폭함. 이는 초기 값의 2700억 배에 해당함.

5. Radiant Pool에서 90.6 $ETH(약 21.5만 달러)를 차입함. 이것이 이번 공격의 수익임;
6. 새 계약(0xd8b591) 생성;
7. 새 계약에 무제한 USDC 승인을 부여하고, 543K $USDC를 새 계약으로 이체한 후 아래 단계들을 새 계약을 통해 실행함;
8. 543K $USDC를 Radiant 풀에 입금하여 2 wei의 토큰을 발행함. amountScaled가 2이기 때문인데, 543600000002*1e27 / 271800000000999999999999998631966035920 = 2이기 때문임.


9. Radiant 풀에서 407K $USDC를 인출하되, 단 1 wei의 토큰만 소각함. amountScaled가 1이기 때문인데, 407700000000*1e27 / 271800000000999999999999998631966035920 = 1.5이며, 여기서 수학적 반올림 오류가 발생함. amountScaled는 uint256 형식 변수이므로 1.5를 1로 변환함에 유의할 것.


10. 271K $USDC를 Radiant 풀에 예치하여 amountScaled가 1인 토큰을 발행함. 왜냐하면 271800000001*1e27 / 271800000000999999999999998631966035920 = 1이기 때문임.
11. Radiant 풀에서 407K $USDC를 인출하되, amountScaled가 1인 토큰만 소각함.
12. 단계 10과 11을 최대 18회 반복하여, 해커가 이전에 새 마켓에 예치했던 $USDC를 모두 소진함.
13. 2 $WETH를 4.73K $USDC로 교환하고, 3.23K $USDC를 1.36 $WETH로 교환함.
14. 300만 달러의 USDC를 원금으로, 1.5만 달러의 USDC를 수수료로 하여 AAVE의 플래시론을 상환함.
15. 90 ETH 상당의 이익을 확보함.
근본 원인
근본적인 원인은 해커가 새로 생성된 네이티브 USDC 마켓과 상호작용한 첫 번째 사용자였다는 점이며, Radiant 프로토콜의 플래시론 기능을 이용해 liquidityIndex를 극도로 증폭시키고, 수학적 반올림 오류를 악용하여 대출 풀의 자산을 탈취한 것이다.
핵심 코드


TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News










