2025년 6월 26일, 이더리움 메인넷에 배포된 Resupply stablecoin protocol이 공격을 받아 약 1,000만 달러 규모의 자산 손실이 발생했습니다. 해당 컨트랙트의 가격 오라클 구현에 문제가 있어, 새로 생성된 저유동성 Market에서 공격자는 도네이션 공격(donation attack)을 통해 대출 자산(Resupply가 발행한 reUSD)의 상대 가격(즉, 대출 자산과 담보 자산 간의 교환 비율)을 조작하여 0으로 만들 수 있었습니다. 이를 통해 공격자는 자산 건전성 검사를 우회하고 대량의 reUSD를 대출받아 이익을 취할 수 있었습니다.
BlockSec가 네트워크상에서 최초로 조기 경보를 공개적으로 발표하고 초기 분석(Tweet1, Tweet2)을 제공한 이후, Resupply도 공식 발표를 게재했지만, 많은 기술적 세부사항에 대해서는 구체적으로 설명하지 않았습니다. 이 글에서는 더 상세한 분석을 제공하고자 합니다. 한편, 공격 이후 프로젝트 측과 이해관계자들 사이에서 격렬한 커뮤니티 논란도 있었습니다. 이 글에서는 프로토콜 뒤에 숨겨진 복잡한 생태계 관계에 대해서도 심도 있게 다루고 논의하여 독자들에게 참고가 되도록 하겠습니다.
1. 배경
1.1 Resupply 프로토콜 소개
Resupply는 Curve 생태계에 속하는 탈중앙화 스테이블코인 프로토콜입니다. Resupply가 발행하는 스테이블코인은 reUSD라고 불립니다. 이는 담보부 채무 포지션(CDP)에 의해 뒷받침되는 탈중앙화 스테이블코인으로, crvUSD와 frxUSD를 포함한 다른 스테이블코인의 지원을 받으며, 외부 플랫폼의 대출 시장에서 이자를 얻습니다. 사용자는 crvUSD와 frxUSD를 제공하여 reUSD를 대출받을 수 있으며, 이를 통해 스테이블코인 자산의 재융자(refinancing)를 실현할 수 있습니다.

구체적으로, 사용자는 온체인에 배포된 Resupply Market에서 대출 관련 작업을 수행할 수 있습니다. Market의 생성과 동작은 DAO를 통해 관리됩니다. 각 Market은 담보 자산(collateral)으로 ERC-4626 Vault를 지정하며, 해당 Vault에 대응하는 자산을 underlying으로 사용합니다. 사용자는 Market에 담보(Vault 또는 Vault의 자산)를 예치하여 reUSD를 대출받습니다.
이번 공격에 관련된 Market 0x6e90과 Vault 0x0114를 예로 들면, 관련 자산(토큰)은 다음과 같습니다:
-
Market
0x6e90- underlying: crvUSD
- collateral: cvcrvUSD (즉, Vault
0x0114) - borrowed: reUSD
-
Vault
0x0114- asset: crvUSD (실제로는 Curve LlamaLend Controller에 저장되며, 이 역시 하나의 Market임)
- collateral: wstUSR
- borrowed: crvUSD
- share: cvcrvUSD (Vault가 발행한 ERC-4626 토큰)
즉, 사용자는 이 Market에서 일정량의 cvcrvUSD(또는 crvUSD, 이는 실제로는 Vault를 통해 cvcrvUSD로 전환됨)를 담보로 제공하여 reUSD를 대출받을 수 있습니다.

1.2 시스템은 사용자가 자산을 대출받을 자격이 있는지 어떻게 판단하는가?
일반적인 대출 프로토콜과 유사하게, Resupply Market도 사용자의 포지션에 대해 자산 건전성 검사를 수행합니다(modifier isSolvent를 통해).

isSolvent는 최종적으로 _isSolvent 함수를 호출하며, 이 함수는 LTV(Loan-to-Value ratio, 대출 대비 담보 비율)를 검사하여, 대출 자산과 담보 자산 간의 비율이 시스템에서 설정한 최대값을 초과하지 않아야 함을 요구합니다(_ltv <= maxLTV).
LTV의 계산은 교환율(_exchangeRate), 즉 담보 자산에 대한 대출 자산의 가격(교환 비율)에 의존한다는 것을 알 수 있습니다.
2. 공격 분석
2.1 근본 원인 분석
컨트랙트 코드 관점에서, 이번 공격의 핵심 원인은 Resupply Market의 가격 오라클 구현에 문제가 있었다는 것입니다. 새로 생성된 저유동성 Market에서, 공격자는 도네이션 공격을 통해 교환율을 조작할 수 있었고, 이를 통해 건전성 검사를 우회하고 대량의 reUSD를 대출받아 이익을 취할 수 있었습니다.
교환율은 어떻게 계산되는가?

계산 공식은 다음과 같습니다:

명백히, getPrices가 1e36보다 큰 가격을 반환하면, 정수 나눗셈의 내림 처리로 인해 _exchangeRate = 0이 됩니다.
가격은 어떻게 조작할 수 있는가?

코드에 따르면, 가격은 다음과 같이 계산될 수 있습니다:


코드에서 precision = 1, DEAD_SHARES = 1000, shares = 1e18로 설정되어 있으므로,

최종적으로 변수를 대입하면, 가격 계산 공식은 다음과 같습니다:

price 값을 증폭시키기 위해서는, total_assets와 totalSupply 간의 격차를 벌리는 것이 핵심임을 알 수 있습니다. 즉, total_assets를 매우 크게 만들고 totalSupply는 매우 작게 유지하는 것입니다. Resupply 프로토콜의 실제 구현에서, 공식의 total_assets는 underlying(crvUSD)에 의존하며, totalSupply는 Market 내 전체 유동성에 대응하는 shares(cvcrvUSD)에 의존합니다. 이는 바로 전형적인 도네이션 공격 시나리오입니다.
2.2 공격 트랜잭션 분석
공격 트랜잭션[4]에 따르면, 공격자는 다음과 같은 핵심 단계를 수행한 것으로 분석됩니다:
-
플래시론을 통해 4,000 USDC를 대출받아 3,999 crvUSD로 교환했습니다.
-
Controller
0x8970에 2,000 crvUSD를 도네이션(기부)했습니다. 도네이션 전, Controller0x8970은 0 crvUSD를 보유하고 있었습니다. 도네이션 후, 기록된 crvUSD 양은2000000000000000000000(소수점 18자리)이 되었습니다. -
Vault
0x0114에 약 2 crvUSD를 예치하고 1 share(cvcrvUSD)를 받았습니다. 이때 기록된 crvUSD 양은2002000000000000000001(소수점 18자리)였습니다. -
Market
0x6e90에 1단위(즉, Vault0x0114의 1 share)의 담보를 추가했습니다. -
Market
0x6e90에서 10,000,000 reUSD를 대출받았습니다. 이때_exchangeRate = 0이 되어_ltv = 0이 되었고, 이에 따라_isSolvent검사가 통과되었습니다.

_exchangeRate가 왜 0이 되었을까요? 앞의 단계들을 통해 공격자가 컨트랙트를 조작하여 다음과 같은 상태에 도달했기 때문입니다:

교환율 계산 방법을 다시 떠올려보면:

price > 1e36이므로, _exchangeRate = 0이 됩니다.
- 대출받은 reUSD를 교환하여 이익을 취했습니다.
3. 교훈
이번 공격을 받은 Resupply의 Market은 Curve의 템플릿 컨트랙트와 유사한 가격 오라클 구현을 사용하고 있었습니다.

그러나 Curve의 공식 문서에는 이미 해당 구현의 적용 범위가 명시되어 있었습니다 — 안타깝게도 Resupply는 배포 시 이 적용 범위 경고를 충분히 고려하지 않은 것으로 보입니다.
4. 관계 및 커뮤니티 논란
4.1 Curve 생태계 내 5대 주요 프로젝트의 복잡한 관계망
Resupply 사건의 더 깊은 영향을 이해하기 위해서는, 먼저 Curve 생태계 내 5개 핵심 프로토콜 간의 복잡한 관계를 살펴봐야 합니다.

Curve Finance는 전체 생태계의 핵심으로, 유동성 풀, crvUSD, LlamaLend 프로토콜을 제공하며, 이는 Resupply, Prisma, Convex, Yearn의 운영을 뒷받침합니다. Convex는 스테이킹과 거버넌스를 통해 Curve의 수익을 최적화하며, Prisma와 Resupply에 추가적인 보상 메커니즘을 제공합니다. Prisma는 Curve의 LP 토큰과 Convex의 수익 증대 기능에 의존하며, Resupply는 Curve의 LlamaLend를 직접 기반으로 reUSD를 발행하며 Convex와 Yearn이 공동으로 개발했습니다. Yearn은 Curve 풀의 수익을 최적화할 뿐만 아니라, Convex와의 협업을 통해 Resupply의 개발을 촉진하기도 했습니다.
Curve Finance: 핵심 플랫폼으로서, Curve의 유동성 풀(예: crvUSD 풀)과 LlamaLend 프로토콜은 Resupply가 reUSD를 발행하는 데, Prisma가 LP 토큰을 스테이킹하는 데, Yearn이 수익을 최적화하는 데, Convex가 거버넌스 투표를 하는 데 직접적으로 사용됩니다.
Convex: Convex는 Curve의 수익 증대 프로토콜입니다. 사용자는 Curve LP 토큰을 스테이킹하여 더 높은 CRV 보상과 Convex의 CVX 토큰을 받을 수 있습니다. Convex는 Curve 거버넌스 투표 권한의 거의 50%를 통제하며, Prisma와 Resupply에 수익 증대 메커니즘을 제공합니다.
Prisma : Prisma는 Curve의 LP 토큰을 스테이킹하며, 사용자는 Convex를 통해 증대된 보상(cvxPRISMA)을 얻습니다. Prisma는 Curve의 유동성과 Convex의 수익 메커니즘에 의존합니다.
Yearn: Yearn은 수익 애그리게이터로, Curve의 LP 토큰 수익(Convex를 통해 증대됨)을 최적화하여 사용자에게 높은 수익을 제공합니다. Yearn은 Convex와 협업하여 Resupply를 개발했으며, 수익 전략에서 Curve 풀을 광범위하게 사용합니다.
Resupply: Convex와 Yearn이 공동으로 개발했으며, 사용자가 crvUSD 등의 스테이블코인을 담보로 제공하여 reUSD를 대출받을 수 있게 하고, 토큰을 Convex에 자동으로 스테이킹하여 CRV와 CVX 보상을 얻음으로써 수익 최적화 루프를 형성합니다.
4.2 논란과 영향
그러나 Resupply가 공격을 받자, 이 복잡한 관계망은 즉시 논란의 초점이 되었습니다. Curve 창립자 Michael Egorov는 신속하게 Resupply와 거리를 두며 다음과 같이 강조했습니다:
“There is no single person from Curve working on that project… don’t generalize to Curve please.”

이러한 관계 부인 발언은 DeFi 생태계 내의 복잡한 협력 관계가 위기 상황에서 얼마나 취약할 수 있는지를 보여줍니다.
이러한 상호 연관된 프로젝트들은 함께 고도로 결합된 생태계를 형성하고 있습니다 — 이러한 시스템에서는 한 부분의 문제가 연쇄 반응을 촉발할 수 있습니다. 따라서 Resupply 공격 사건이 프로토콜 간 상호의존성과 보안에 관한 광범위한 커뮤니티 논의를 촉발한 것은 놀랄 일이 아닙니다.
5. 추가적인 고찰
5.1 타임라인
-
2025년 5월 17일: Resupply 공식 주소
0x1f84가 Curve의 OneWay Lending Factory를 통해 새로운 LlamaLend Market을 배포했습니다.- 이 Market은 crvUSD를 대출 자산으로, wstUSR을 담보 토큰으로 사용했습니다.
- ERC-4626 Vault 컨트랙트는
0x0114였으며, 이에 대응하는 Controller는0x8970이었습니다.
-
2025년 5월 31일: Resupply의 거버넌스 페이지에 새로운 제안 wstUSR-long LlamaLend Market이 게시되었습니다. 이 제안은 사용자가 LlamaLend Market을 통해 reUSD를 발행할 수 있도록 하는 것을 목표로 했습니다.
-
2025년 6월 11일: 제안이 온체인에 게시되었습니다.
-
2025년 6월 26일 00:18:47 (UTC): 제안이 통과되었고, Resupply의 공식 주소
0x0417이 새로운 ResupplyPair를 배포했습니다(즉, Resupply crvUSD/wstUSR Market)0x6e90, Vault0x0114와 Controller0x8970을 바인딩했습니다.- Vault 0x0114와 Controller 0x8970을 바인딩했습니다.
- Vault의 담보부 채무 포지션(즉, crvUSD를 underlying으로 하는 cvcrvUSD)을 담보로 사용했습니다.
-
2025년 6월 26일 01:53:59 (UTC): Market
0x6e90배포 후 약 1.5시간 만에, 공격자가 익스플로잇을 성공적으로 실행했습니다. 동시에 BlockSec은 공격을 탐지하고 프로젝트 팀과 접촉을 시도했습니다. -
2025년 6월 26일 02:26 (UTC): 팀과의 연락에 실패하고 추가 손실이 없음을 확인한 후, BlockSec은 공개 경보를 발표했습니다.
-
2025년 6월 26일 02:53:23 (UTC): 프로젝트 팀이 프로토콜을 일시 중단했습니다.
5.2 Phalcon Security가 있었다면, 이 비극을 막을 수 있었을 것입니다

BlockSec Phalcon Security는 DeFi 보안 보호의 최신 돌파구를 대표합니다. 멤풀(mempool) 단계에서 트랜잭션을 모니터링함으로써, Phalcon Security는 공격 트랜잭션이 멤풀에 진입하는 즉시 비정상적인 패턴을 식별할 수 있습니다.
이 시스템은 지능형 분석 엔진을 기반으로, 200개 이상의 전형적인 공격 시그니처를 통합하고 있습니다. 지난 6개월 동안 0.0001% 미만의 초저 오탐률을 유지하며, 진정으로 정밀한 위협 탐지를 실현했습니다.
이 시스템은 독자적인 가스 비딩(gas bidding) 전략을 활용하여 방어 트랜잭션이 공격 트랜잭션보다 앞서도록 보장하는 동시에, 프로토콜의 긴급 일시중단 기능을 자동으로 트리거합니다.
전체 대응 프로세스는 EOA와 다중서명(multisig) 지갑을 포함한 다양한 권한 제어 모드를 지원하여, 서로 다른 유형의 프로토콜에 유연한 보안 솔루션을 제공합니다.
Resupply가 Market을 배포할 때 Phalcon Security 시스템을 통합했다면, 이번 공격은 완전히 피할 수 있었을 것입니다
Market 0x6e90이 배포된 후 1.5시간 이내에, Phalcon Security 시스템은 새로운 Market 배포를 자동으로 감지하고, 그 구성 파라미터를 지능적으로 분석하여 도네이션 공격의 잠재적 위험을 식별했을 것입니다.
시스템은 즉시 프로젝트 팀에 위험 경보를 발송하여, 초기 유동성 보호를 추가하거나 관련 파라미터를 조정할 것을 제안했을 것입니다.
공격이 이미 발생한 이후에도, Phalcon Security를 배포하는 것은 여전히 Resupply와 전체 Curve 생태계에 막대한 가치를 가져다줄 것입니다
투명하고 실시간으로 이루어지는 모니터링 시스템은 사용자와 커뮤니티에게 프로젝트 팀의 보안에 대한 확고한 의지를 보여주며, 24시간 지속적인 보호 메커니즘은 유사한 사건이 다시는 발생하지 않도록 보장합니다. 공개된 보안 모니터링 데이터는 프로젝트의 투명성을 높이며, 커뮤니티 신뢰를 재건하는 중요한 수단이 됩니다. 피해를 입은 프로젝트에게는, 최고 수준의 보안 솔루션을 선제적으로 도입하는 것이 사용자 자금 안전에 대한 책임감을 증명하며, BlockSec과 같은 업계 리더와의 협력은 보안 분야에서 프로젝트의 명성에 강력한 보증을 제공하기도 합니다.
현재 500억 달러 이상의 자산이 Phalcon Security의 보호를 신뢰하기로 선택했습니다. 저희는 20건 이상의 실제 해킹 공격을 성공적으로 막아냈으며, 2,000만 달러 이상의 자산 손실을 절감했습니다. 지난 6개월 동안 이 시스템은 완벽한 탐지 정확도 기록을 유지하며 밀리초 단위의 응답 속도를 달성하여, 항상 공격자보다 한 발 앞서 있었습니다. Phalcon Security는 현재 이더리움, BSC, Arbitrum을 포함한 20개 이상의 주요 블록체인 네트워크를 지원하여, DeFi 생태계에 포괄적이고 크로스체인 보안 보호를 제공합니다.
Resupply의 1,000만 달러 손실과 그 외 수많은 공격 사건들은, DeFi 세계에서 보안이 선택이 아니라 생존을 위한 필수 요소임을 우리에게 알려줍니다.
다음 공격이 일어나서 후회하기 전에, 지금 당신의 프로토콜에 최강의 보안 보호를 배포하세요.
BlockSec의 전문가 팀이 당신의 프로젝트를 위한 종합적인 보안 평가를 진행할 준비가 되어 있습니다.
🔗 Phalcon Security:
https://blocksec.com/phalcon/security
🔗 데모 예약하기:



