← Dashboard
Ethereum Mainnet Chain ID: 1
PMA Case #—

Yearn v1 yDAI Vault

Curve 3pool 유동성 조작을 통한 yDAI 볼트 예금 탈취 — 볼트 손실 $11.1M, 공격자 수익 ~$2.8M (11건 트랜잭션 중 1건)
Pool Balance Manipulation Flash Loan ×2 Multi-Tx (11건) Slippage Exploitation

1. 프로토콜 의존성 구조도

Single atomic transaction — Block #11,792,351 Attacker CA0x6249...87C5 dYdXFlash Loan AaveFlash Loan Compound담보/차입 Curve 3poolDAI/USDC/USDT Yearn yDAIv1 Vault (Victim) Uniswap V2USDT→WETH 116,920 ETH 97,926 ETH 1 214,847 ETH ↓ / DAI+USDC ↑ 2 DAI+USDC / USDT 3 DAI ↔ yDAI (×5 cycles) ⚠ 슬리피지 악용 4 USDT→WETH 5

2. 종합 대시보드

2-1. 트랜잭션 정보

Date / Time2021-02-04 21:52:15 UTC
Attack TypePool Balance Manipulation + Slippage Exploit
총 공격 (11 Txs)~$2,800,000 (513K DAI + 1.7M USDT + 506K 3CRV)
이 Tx 수익~$140,544 (127,856 3CRV + 11,017 USDT)
Vault 총 손실~$11,100,000 (11.1M DAI)
Gas 비용3,371,177 Gwei (~$8,300)

2-2. 공격 실행 흐름

Step 1 — Flash Loan 확보
dYdX + Aave 이중 플래시론
dYdX SoloMargin에서 116,920 WETH, Aave에서 97,926 WETH를 플래시론으로 차입. 총 214,847 ETH 확보.
+214,847 ETH ($357.4M)
Step 2 — Compound 레버리지
ETH 담보 예치 → 스테이블코인 차입
214,847 ETH를 Compound에 담보로 예치하고, 126,717,145 DAI + 134,000,000 USDC를 차입.
+$260.7M (DAI + USDC)
Step 3 — Curve 3pool 조작 준비
3pool 유동성 불균형 생성
33.7M DAI + 134M USDC를 Curve 3pool에 예치하여 165.4M 3CRV 취득. 이후 163.5M USDT를 인출하여 풀을 DAI/USDC 과잉 상태로 만듦.
3CRV LP 포지션 확보 + 163.5M USDT
Step 4 — yDAI 볼트 착취 (×5 사이클)
반복적 예금/인출로 볼트 가치 탈취
① 93M DAI를 yDAI 볼트에 예치 (볼트가 불균형 3pool에 불리한 환율로 예금) → ② 163.5M USDT를 3pool에 재투입 (부분 균형 회복) → ③ yDAI 인출 (볼트가 손실 상태에서 DAI 반환) → ④ USDT 재인출. 각 사이클마다 ~$700K씩 볼트 가치 감소.
5 사이클 × ~$700K = ~$3.5M 볼트 손실 (이 Tx)
Step 5 — 정리 및 상환
3CRV 환매 → Compound 상환 → 플래시론 반환
잔여 3CRV를 37.2M DAI + 134M USDC로 환매. Compound 차입금(DAI+USDC) 전액 상환 후 214,847 ETH 회수. 잔여 USDT 153K를 Uniswap V2에서 93 WETH로 스왑하여 Aave 프리미엄(88 ETH) 충당.
Aave premium: 88 ETH ($146K)
Step 6 — 이익 실현
127,856 3CRV + 11,017 USDT → 공격자 EOA 전송
잔여 3CRV 및 USDT를 공격자 EOA(0x14EC...)로 전송. 플래시론 정확히 상환 완료.
+$140,544 순이익 (이 Tx)

2-3. 관련 엔티티 & PnL

ATTACKER (EOA)
Attacker EOA
+~$2.8M (총 11건)
ATTACKER (CA)
Attack Contract
공격 실행 컨트랙트
VICTIM
Yearn v1 yDAI Vault
−$11.1M DAI (35M → 24M AUM)
FLASH LOAN
dYdX SoloMargin
116,920 WETH (수수료 ~2 wei)
FLASH LOAN
Aave V2
97,926 WETH (premium: 88 ETH)
INTERMEDIARY
Compound (cETH / cDAI / cUSDC)
담보 214,847 ETH → 126.7M DAI + 134M USDC

2-4. 풀 조작 상세

정상 상태 (조작 전)
3pool 구성DAI:USDC:USDT ≈ 1:1:1
DAI → 3CRV 교환비~1:1 (정상)
yDAI 슬리피지 허용치1% (설정값)
⚠ 조작 후 상태
3pool 구성DAI/USDC 과잉, USDT 부족
DAI → 3CRV 교환비~1% 불리 (슬리피지)
yDAI 사이클당 손실~700K DAI
풀 조작 비용
초기 3pool 예치33.7M DAI + 134M USDC
USDT 순환 자금163.5M USDT
Aave 프리미엄88 ETH ($146K)
가치 이전 구조
yDAI 볼트 손실 (이 Tx)~3.5M DAI
공격자 수익~$140K
Curve LP 수수료~$3.4M

2-5. 주요 이벤트

Idx = 추출 이벤트 인덱스 (event_index 기준)
IdxEventFromToAmountDeviation
▸ Phase 1 — 자금 확보
0LogWithdraw (Flashloan borrow)dYdX SoloMarginAttacker CA116,920.396 WETH
FlashLoan (Flashloan borrow)Aave V2Attacker CA97,926.912 WETH
1MintAttacker CACompound cETH214,847.309 WETH
2BorrowCompound cDAIAttacker CA126,717,145 DAI
3BorrowCompound cUSDCAttacker CA134,000,000 USDC
▸ Phase 2 — 3pool 불균형 생성
4–5AddLiquidityAttacker CACurve 3pool33,702,311 DAI + 134,000,000 USDC
→ 165,439,038 3CRV 수령
6RemoveLiquidityImbalanceCurve 3poolAttacker CA163,505,563 USDT
→ 풀: DAI/USDC 과잉, USDT 부족
▸ Cycle 1 — 볼트 손실 −709,228 DAI
7AddLiquidity (yDAI→전략)Yearn StrategyCurve 3pool92,096,074 DAI
8AddLiquidity (USDT 재투입)Attacker CACurve 3pool163,505,563 USDT
9Withdraw (Gauge)Curve GaugeYearn Strategy175,629 3CRV
10–11RemoveLiquidityOneCurve 3poolYearn Strategy90,223,780 3CRV → 91,386,846 DAI
12RemoveLiquidityImbalanceCurve 3poolAttacker CA163,505,563 USDT
▸ Cycle 2 — 볼트 손실 −703,138 DAI
13AddLiquidity (yDAI→전략)Yearn StrategyCurve 3pool91,393,938 DAI
14AddLiquidity (USDT 재투입)Attacker CACurve 3pool163,505,563 USDT
15Withdraw (Gauge)Curve GaugeYearn Strategy176,629 3CRV
16–17RemoveLiquidityOneCurve 3poolYearn Strategy89,528,850 3CRV → 90,690,800 DAI
18RemoveLiquidityImbalanceCurve 3poolAttacker CA163,505,563 USDT
▸ Cycle 3 — 볼트 손실 −699,384 DAI
19AddLiquidity (yDAI→전략)Yearn StrategyCurve 3pool90,697,831 DAI
20AddLiquidity (USDT 재투입)Attacker CACurve 3pool163,505,563 USDT
21Withdraw (Gauge)Curve GaugeYearn Strategy175,338 3CRV
22–23RemoveLiquidityOneCurve 3poolYearn Strategy88,837,708 3CRV → 89,998,447 DAI
24RemoveLiquidityImbalanceCurve 3poolAttacker CA163,505,563 USDT
▸ Cycle 4 — 볼트 손실 −695,637 DAI
25AddLiquidity (yDAI→전략)Yearn StrategyCurve 3pool90,005,441 DAI
26AddLiquidity (USDT 재투입)Attacker CACurve 3pool163,505,563 USDT
27Withdraw (Gauge)Curve GaugeYearn Strategy174,046 3CRV
28–29RemoveLiquidityOneCurve 3poolYearn Strategy88,150,366 3CRV → 89,309,804 DAI
30RemoveLiquidityImbalanceCurve 3poolAttacker CA163,505,563 USDT
▸ Cycle 5 — 볼트 손실 −691,744 DAI
31AddLiquidity (yDAI→전략)Yearn StrategyCurve 3pool89,316,760 DAI
32AddLiquidity (USDT 재투입)Attacker CACurve 3pool163,341,032 USDT
33Withdraw (Gauge)Curve GaugeYearn Strategy172,766 3CRV
34–35RemoveLiquidityOneCurve 3poolYearn Strategy87,466,827 3CRV → 88,625,016 DAI
▸ Phase 3 — 정리 및 상환
36–37RemoveLiquidityImbalance (3CRV 환매)Curve 3poolAttacker CA37,201,153 DAI + 134,000,000 USDC
초기 대비 +3,498,842 DAI
38RepayBorrowAttacker CACompound cDAI126,717,145 DAI
39RepayBorrowAttacker CACompound cUSDC134,000,000 USDC
40RedeemCompound cETHAttacker CA214,847.309 WETH
41–42SwapAttacker CAUniswap V2153,512 USDT → 93.134 WETH$1,648/ETH
−0.9% from $1,664
43–44FlashLoan (Flashloan repayment) (상환)Attacker CAAave V297,926.912 WETH + 88.134 premium
45LogDeposit (Flashloan repayment) (상환)Attacker CAdYdX SoloMargin116,920.396 WETH
▸ 이익 실현
Transfer (잔여 자산 → EOA)Attacker CAAttacker EOA127,856 3CRV ($129,527)
+ 11,017 USDT ($11,017)
$140,544
사이클 요약 (5회)
C1: 92,096,074 → 91,386,846 = −709,228 DAI
C2: 91,393,938 → 90,690,800 = −703,138 DAI
C3: 90,697,831 → 89,998,447 = −699,384 DAI
C4: 90,005,441 → 89,309,804 = −695,637 DAI
C5: 89,316,760 → 88,625,016 = −691,744 DAI
총 볼트 손실: −3,499,131 DAI (이 Tx)

2-6. 유사 공격 비교

사건날짜기법피해 규모공격자 수익
Yearn v1 yDAI Vault2021-02-04Curve 3pool 조작 + 슬리피지$11.1M~$2.8M
Harvest Finance2020-10-26Curve Y pool 조작$33.8M~$33.8M
Pickle Finance2020-11-22pDAI Jar (Curve 기반)$19.7M~$19.7M
bZx Hack II2020-02-18Kyber/Synthetix 오라클 조작~$600K~$600K
Eminence Finance2020-09-29본딩 커브 플래시론$15M~$15M

2-7. 근본 원인 및 교훈

근본 원인
슬리피지 보호가 1%로 너무 느슨하게 설정됨 — 대규모 조작에 대한 방어 불충분
v2 마이그레이션 장려를 위해 0.5% 출금 수수료를 0%로 설정 — 반복 출금 비용 제거
v1 볼트의 earn() 함수를 누구나 호출 가능 — 공격자가 예금 타이밍을 제어
볼트 전략이 Curve 스팟 환율에 직접 의존 — 플래시론 조작에 취약
교훈 및 대응
11분 만에 setMin(0) 적용으로 추가 공격 차단 — 24M DAI 보호
Yearn Treasury에서 YFI 담보로 9.7M DAI를 Maker Vault에서 발행하여 피해 보상
Tether가 1.7M USDT 동결 조치
v2 볼트에서 슬리피지 체크 강화, 출금 수수료 유지, earn() 접근 제어 적용

2-8. 공격 당시 토큰 가격

ETH (WETH)
$1,663.84
공격 시점 시가
DAI
$1.00
Stablecoin (정상)
USDC / USDT
$1.00
Stablecoin (정상)
3CRV (Curve LP)
$1.013
LP 토큰 가격
💡 공격 핵심: 공격자가 Curve 3pool에 대규모 단일 자산(USDT) 인출/예치를 반복하여 풀 균형을 의도적으로 왜곡. yDAI 볼트의 StrategyDAI3pool이 이 불균형 상태에서 DAI를 예치/인출하면서 매번 ~1% 슬리피지 손실이 발생. 공격자는 3CRV LP 보유자로서 이 손실분을 흡수.

3. 인터랙티브 Fund Flow

ETH Balance
0
Stablecoin (USD)
$0
Status
대기
Attacker CA dYdX Aave Compound Curve 3pool Yearn yDAI Uniswap V2 116,920 ETH 97,926 ETH 214,847 ETH → DAI + USDC DAI+USDC / USDT DAI ↔ yDAI ×5 USDT→WETH repay 116,920 repay 98,015 ETH flow Stablecoin Repay Exploit cycle

4. yDAI 볼트 가치 영향 (이 Tx)

볼트 손실 (사이클당) 공격자 순이익 Curve LP 수수료 흡수