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

bZx

Kyber/Uniswap 스팟 오라클을 조작하여 sUSD 가격을 ~2.4배 펌핑, 과대평가된 담보로 bZx에서 6,796 ETH 차입 후 2,378 ETH 순이익
Oracle Manipulation Flash Loan Single Tx Undercollateralized Borrow

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

All
Step 1: Flash Loan
Step 2: Pump
Step 3: Hoard
Step 4: Borrow
Step 5: Repay
bZx 플래시론으로 7,500 ETH를 차입한 뒤, Kyber→Uniswap/Kyber-sUSD Reserve에서 900 ETH로 sUSD 가격을 펌핑하고, Synthetix Depot에서 정상가로 943,837.59 sUSD를 매집한 다음, 조작된 오라클 가격으로 bZx에 1,099,841 sUSD 담보를 예치하여 6,796 ETH를 차입. 플래시론 상환 후 2,378.15 ETH 순이익 실현.
Single atomic transaction — Block #9504627 Attacker 0x360f...747b bZx iETH Pool Flash Loan Source bZx Lending Kyber Oracle → sUSD 담보 Kyber Network DEX Aggregator Uniswap V1 ETH/sUSD Pool Kyber sUSD Rsv 0x4cb0...2c99 Synthetix Depot Chainlink Oracle 7,500 ETH 1 900 ETH ⚠ sUSD ×2.5 2 6,000 ETH 944K sUSD + 2,482 ETH 3 1.1M sUSD 담보 6,796 ETH 4 7,500 ETH ↩ 5 ⚠ Price Feed (Oracle)

2. 종합 대시보드

2-1. Transaction Info

Date / Time2020-02-18 03:13:58 UTC
Attack TypeOracle Manipulation + Flash Loan
Attacker Profit+2,378.15 ETH (~$634,101)
bZx Loss−6,796.01 ETH (미담보 대출)

2-2. Attack Execution Flow

Step 1 — Flash Loan Borrow
bZx iETH Pool에서 7,500 ETH 플래시론
bZx의 iETH 토큰 컨트랙트에서 7,500 ETH를 단일 트랜잭션 내 차입. bZx Hack I과 달리 dYdX 대신 bZx 자체 플래시론 기능을 사용.
7,500 ETH → Attacker
Step 2 — Pump (sUSD 가격 조작)
Kyber를 통해 900 ETH → 156,004 sUSD 스왑 (2배치)
Batch 1: 540 ETH → Kyber→Uniswap Reserve → 92,419.70 sUSD (실효 $171.15/ETH)
Batch 2: 20 ETH × 18회 → Kyber→sUSD Reserve → 63,584.10 sUSD (환율 $262→$111/ETH로 급락)
연속 매수로 sUSD/ETH 스팟 가격을 정상가 대비 ~2.4배로 펌핑
−900 ETH, +156,003.80 sUSD
Step 3 — Hoard (sUSD 대량 매집)
Synthetix Depot에서 6,000 ETH → 943,838 sUSD 정상가 매입
Synthetix Depot는 Chainlink 오라클을 사용하여 Kyber 조작과 무관한 정상 시세로 교환. 3,517.86 ETH 소비 → 943,837.59 sUSD 수령, 잔여 2,482.14 ETH 환불. Depot 교환비 268.30 sUSD/ETH (정상가 +0.49%).
−6,000 ETH, +943,837.59 sUSD, +2,482.14 ETH 환불
Step 4 — Collateralized Borrow
1,099,841.39 sUSD 담보 → bZx에서 6,796.01 ETH 차입
bZx가 Kyber의 조작된 sUSD/ETH 가격을 오라클로 참조. 정상가 기준 $1.1M 가치의 sUSD가 조작 가격으로 ~$2.64M로 평가되어 6,796 ETH($1.81M) 차입 허용. 실효 담보 환율 161.84 sUSD/ETH (정상 267 대비 −39.4%). 결과적으로 담보 비율 60.6%의 심각한 미담보 대출 생성.
−1,099,841.39 sUSD (담보), +6,796.01 ETH
Step 5 — Flash Loan Repay + Profit
7,500 ETH 상환 → 2,378 ETH 순이익 확보
잔여 ETH (3,082.14 + 6,796.01 = 9,878.15)에서 7,500 ETH를 bZx iETH Pool에 상환. 미담보 포지션(+1,099,841 sUSD / −6,796 ETH)은 포기하고 2,378.15 ETH 순이익으로 탈출.
NET PROFIT: +2,378.15 ETH (~$634,101)

2-3. Involved Entities & PnL

Attacker (EOA) ATTACKER
+2,378.15 ETH (~$634,101)
Attacker Contract ATTACKER CA
공격 실행 컨트랙트
bZx (iETH Pool) VICTIM
−6,796.01 ETH (미담보 대출 손실)
Kyber Network INTERMEDIARY
DEX 라우터 + 오라클 소스
Synthetix Depot INTERMEDIARY
정상가 sUSD 매집 경로 (Chainlink 오라클)

2-4. Oracle Manipulation Detail

📊 정상가 (Before Pump)
sUSD/ETH~267 sUSD/ETH
sUSD 가격~$1.00
ETH 가격~$267
⚠ 조작가 (After Pump)
sUSD/ETH111.23 sUSD/ETH
sUSD 가격 (Kyber)~$2.40
펌프 배율×2.40
💰 Pump Cost
총 ETH 사용900 ETH
USD 환산~$240,000
sUSD 획득156,003.80 sUSD
📦 Hoard Cost
ETH 투입6,000 ETH
ETH 소비 (순)3,517.86 ETH
sUSD 획득943,837.59 sUSD

2-5. Key Events

#EventFromToAmountDeviation
1flashBorrowToken (Flashloan borrow)bZx iETH PoolAttacker CA7,500 ETH
2 KyberTrade
via Uniswap Reserve
Attacker CA Kyber → Uniswap V1 540 ETH → 92,419.70 sUSD $171.15/ETH
−35.9% from $267
3 KyberTrade ×18
via KyberReserve (sUSD)
Attacker CA Kyber → sUSD Rsv 360 ETH → 63,584.10 sUSD
각 20 ETH × 18회
$176.62 avg/ETH
($262→$111) −33.8%
4 Exchange
Synthetix Depot
Attacker CA Depot → sDAO 6,000 ETH 전송
실소비 3,517.86 ETH
5 ClearedDeposit
depositIndex #1526
Synthetix Depot Attacker CA 943,837.59 sUSD $268.30/ETH
+0.49% from $267
6 Refund
잔여 ETH 반환
Synthetix Depot Attacker CA 2,482.14 ETH
(6,000 − 3,517.86)
7 Borrow
withdrawOnOpen=true
bZx iETH Attacker CA 6,796.01 ETH
담보: 1,099,841.39 sUSD
$161.84/ETH
담보율 60.6% (−39.4%)
8flashBorrowTokenRepay (Flashloan repayment)Attacker CAbZx iETH Pool7,500 ETH

2-6. 유사 공격 비교

DateAttackTypeProfitFlash Loan
2020-02-15bZx Hack IMargin Trade + Oracle~1,271 ETH ($350K)dYdX 10,000 ETH
2020-02-18★ bZx Hack IIOracle Manipulation~2,378 ETH ($634K)bZx 7,500 ETH
2020-10-26Harvest FinanceOracle Manipulation~$24MFlash Loan
2020-11-15Value DeFiOracle Manipulation~$7.4MFlash Loan

2-7. Root Causes & Lessons

🔴 Root Causes

단일 소스 스팟 오라클: bZx가 담보 가치 평가에 Kyber DEX의 실시간 스팟 가격만 사용. TWAP이나 다중 오라클 교차 검증 없음
저유동성 풀 의존: sUSD/ETH 풀의 유동성이 낮아 900 ETH($240K)만으로 가격 2.5배 조작 가능
담보 가치 검증 부재: 급격한 가격 변동 시 대출 한도를 제한하는 서킷브레이커 미구현
플래시론 내부 차입: 같은 프로토콜에서 플래시론 차입과 담보 대출을 동시에 허용

🟢 Lessons Learned

Chainlink 등 분산 오라클 통합: 사건 직후 bZx가 Chainlink 통합을 발표. DEX 스팟 가격 단독 사용 금지
TWAP (시간가중평균가격) 적용: 단일 블록 가격 조작을 무력화하는 시계열 기반 가격 참조
유동성 기반 가격 신뢰도: 풀 유동성이 일정 임계값 미만이면 해당 가격 피드를 비활성화
이상 거래 감지: 담보 가치가 급등하거나 단일 트랜잭션 내 대규모 차입 시 자동 일시정지

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

ETH (WETH)
$266.65
tokenPriceCache 기준
sUSD (정상)
$1.00
Synthetix 합성 스테이블코인
sUSD (조작 후, Kyber 스팟)
~$2.40
마지막 배치: 1 ETH = 111.23 sUSD
iETH
$167.54
tokenPriceCache 기준
💡 가격 조작 핵심: Kyber sUSD Reserve의 낮은 유동성을 이용하여 18회 연속 20 ETH 매수로 sUSD/ETH 환율을 262.05→111.23으로 하락시킴 (각 트레이드마다 ~5% 슬리피지 누적). 이로 인해 sUSD의 Kyber 스팟 가격이 $1→$2.40으로 상승하여, bZx 오라클이 1,099,841 sUSD 담보를 ~$2.64M로 과대평가 (정상가 $1.1M). 결과적으로 정상 대비 65% 초과 차입 허용.

3. 인터랙티브 Fund Flow

Step 1: Flash Loan
Step 2: Pump
Step 3: Hoard
Step 4: Borrow
Step 5: Repay
bZx iETH Pool에서 7,500 ETH를 플래시론으로 차입. 같은 트랜잭션 내에서 상환 필수.
bZx iETH Flash Loan + Lending Attacker CA 0x360f...747b Kyber DEX Uniswap + sUSD Rsv Synthetix Depot Chainlink Oracle bZx Lending Collateralized Borrow 7,500 ETH 900 ETH 156K sUSD 6,000 ETH 944K sUSD + 2,482 ETH 1.1M sUSD 6,796 ETH 7,500 ETH ↩ ETH flow Token flow Repay / Refund
ETH Balance
7,500
sUSD Balance
0
Status
Flash loan 차입 완료

4. ETH Balance Waterfall

Flash loan 유입 유출 (스왑/전송/상환) Exploit 유입 (환불/차입) Net profit