← 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 / Time 2020-02-18 03:13:58 UTC
Attack Type Oracle 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/ETH 111.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
# Event From To Amount Deviation
1 flashBorrowToken (Flashloan borrow) bZx iETH Pool Attacker CA 7,500 ETH
—
2
KyberTradevia Uniswap Reserve
Attacker CA
Kyber → Uniswap V1
540 ETH → 92,419.70 sUSD
$171.15/ETH −35.9% from $267
3
KyberTrade ×18via 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
ExchangeSynthetix Depot
Attacker CA
Depot → sDAO
6,000 ETH 전송실소비 3,517.86 ETH
—
5
ClearedDepositdepositIndex #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
BorrowwithdrawOnOpen=true
bZx iETH
Attacker CA
6,796.01 ETH담보: 1,099,841.39 sUSD
$161.84/ETH 담보율 60.6% (−39.4%)
8 flashBorrowTokenRepay (Flashloan repayment) Attacker CA bZx iETH Pool 7,500 ETH
—
2-6. 유사 공격 비교
Date Attack Type Profit Flash Loan
2020-02-15 bZx Hack I Margin Trade + Oracle ~1,271 ETH ($350K) dYdX 10,000 ETH
2020-02-18 ★ bZx Hack II Oracle Manipulation ~2,378 ETH ($634K) bZx 7,500 ETH
2020-10-26 Harvest Finance Oracle Manipulation ~$24M Flash Loan
2020-11-15 Value DeFi Oracle Manipulation ~$7.4M Flash 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
4. ETH Balance Waterfall
Flash loan 유입
유출 (스왑/전송/상환)
Exploit 유입 (환불/차입)
Net profit