← Dashboard
BNB Smart Chain Chain ID: 56
PMA Case #—
PancakeHunny
HunnyMinter 성과 수수료 계산 조작을 통한 HUNNY 토큰 과다 발행 — PancakeBunny 포크 취약점 재현 (×91 반복)
Performance Fee Manipulation Minting Exploit Multi-Tx (×91)
Block 1 — 프로토콜 의존성 구조도
All
Step 1: WBNB→CAKE
Step 2: CAKE→Minter
Step 3: 민팅
Step 4: 회수+덤핑
공격자 Main CA(0x3863)가 6 WBNB를 PCS에서 125.17 CAKE로 스왑, 절반(62.585 CAKE)을 HunnyMinter에 성과 수수료로 주입한다. Minter는 이 CAKE를 WBNB→HUNNY→LP 경로로 처리하며 19,518 HUNNY를 무에서 발행(mint). Child CA를 경유해 Main CA로 회수 후 HUNNY/BNB 풀에서 ~11.15 WBNB로 덤핑, 원금 6 WBNB를 복구하여 순이익 ~5.17 WBNB를 추출한다. 이 사이클이 91회 반복되었다.
단일 사이클 — Block #7,961,802 (×91 반복)
Attacker (0x3863) Main CA + EOA
PCS CAKE/BNB PancakeSwap
HunnyMinter ⚠ 0x109e
HUNNY/BNB PancakeSwap Pool
Child CAs 0xed50 / 0x78e0
HUNNY Token mint() 발행
1 6 BNB→125 CAKE
2 62.5 CAKE
3 mint 19,518
4 HUNNY 덤핑 6.018→6 BNB 원금 복구
Block 2 — 종합 대시보드
2-1. Transaction Info (대표 Tx)
Date / Time 2021-06-03 01:57:58 UTC
총 실행 횟수 91회 (Multi-Tx)
이 Tx 순이익 ~5.17 WBNB (~$2,084)
추정 총 피해 ~$1,100,000 (HUNNY −52%)
WBNB 시세 $403.21
2-2. Attack Execution Flow (이벤트 검증 기반)
Step 1 — Swap (Event #19)
6 WBNB → 125.17 CAKE (PCS CAKE/BNB)
Main CA(0x3863)가 PancakeRouter를 통해 원금 6 WBNB를 125.17 CAKE로 스왑.
6.000000 WBNB → 125.170666 CAKE
Step 2 — Fee Injection (Event #20)
62.585 CAKE → HunnyMinter (성과 수수료 위장)
Main CA가 CAKE의 절반(62.585)을 HunnyMinter(0x109e)에 직접 전송. CakeFlipVault의 getReward() → mintFor() 체인을 트리거한다.
62.585333 CAKE → HunnyMinter
Step 3 — Minter Internal (Events #40,43 / #97,100)
HunnyMinter 내부: CAKE → WBNB → HUNNY → LP
Minter가 수신한 CAKE를 두 사이클로 처리: 31.29 CAKE → 1.4925 WBNB → 2,588 HUNNY (×2). 이 HUNNY+WBNB로 HUNNY/BNB LP를 민팅하고 HunnyPool에 전달.
2×31.29 CAKE → 2×1.49 WBNB → 2×~2,590 HUNNY → LP Mint (Events #61,#118)
Step 4 — EXPLOIT MINT ⚠ (Events #66,#123)
HUNNY 신규 발행: 9,868 + 9,650 = 19,518 HUNNY
핵심 취약점. HunnyMinter가 LP 생성 과정에서 산출한 hunnyBnbAmount를 기반으로 과도한 HUNNY를 mint()한다. 두 사이클에서 총 19,518 HUNNY가 무에서 신규 발행 되어 각각 Child CA(0xed50, 0x78e0)에 전달된다.
mint(9,868.04 HUNNY) + mint(9,650.85 HUNNY) = 19,518.89 HUNNY
Step 5 — Recovery (Events #74,#131)
Child CAs → Main CA로 HUNNY 전량 회수
Child CA들이 RewardPaid를 통해 수령한 HUNNY를 Main CA(0x3863)로 전송.
9,868 + 9,650 = 19,518 HUNNY → Main CA
Step 6 — Dump & Profit (Events #80,#137,#142)
19,518 HUNNY → 11.15 WBNB 덤핑 → 원금 복구
HUNNY/BNB 풀에서 1차 9,868 → 5.65 WBNB, 2차 9,650 → 5.50 WBNB 덤핑. 최종 6.018 WBNB를 CAKE/BNB 풀 경유로 원금 6 WBNB 복구. 순이익 ~5.17 WBNB (~$2,084).
순이익: 5.649 + 5.501 − 6.018 + 6.000 − 6.000 = ~5.13 WBNB (~$2,070)
2-3. Involved Entities & PnL
Attacker EOA ATTACKER
+~$1.1M (91 tx 누적 추정)
Main Attack CA ATTACKER
메인 실행 컨트랙트
HunnyMinter VICTIM
⚠ 과다 민팅 발생원
CakeFlipVault VICTIM
getReward() 트리거 경로
Child CA #1 INTERMEDIARY
사이클 1 HUNNY 중계
Child CA #2 INTERMEDIARY
사이클 2 HUNNY 중계
2-4. Minting Mechanism Detail
정상 토큰 가격 (tokenPriceCache)
WBNB $403.21
CAKE $19.31
HUNNY $0.1558
ETH $2,717.15
⚠ 민팅 비대칭 (핵심)
CAKE 투입 62.585 ($1,209)
HUNNY 발행 19,518 ($3,041)
발행 배율 ×2.52
덤핑 수익 11.15 BNB ($4,496)
HUNNY 덤핑 실효 환율
1차 (Event #80) 9,868→5.65 BNB
실효가 1차 $0.231/HUNNY
2차 (Event #137) 9,650→5.50 BNB
실효가 2차 $0.230/HUNNY
단일 Tx 경제성
원금 6 WBNB ($2,419)
총 수령 ~11.15+6 WBNB
총 지출 6+6.018 WBNB
순이익 ~5.13 BNB ($2,070)
2-5. Key Events (온체인 이벤트 기반)
# Event From To Amount Deviation
1 Swap #19(Flashloan borrow) Attacker CA PCS CAKE/BNB
6.000000 WBNB → 125.170666 CAKE
$403.21/BNB $2,419 → $2,417
2 Withdraw #26 PancakeSwap PancakeHunny 0.000000 Cake —
3 Deposit #31 PancakeHunny PancakeSwap 0.000003 Cake —
4 Swap #40 HunnyMinter PCS CAKE/BNB
31.292666 Cake → 1.492516 WBNB
$19.31/CAKE $604 → $602
5 Swap #43 PCS HUNNY/BNB HunnyMinter
1.492516 WBNB → 2,588.098331 HUNNY
$0.232/HUNNY +49.3% from $0.156
6 Swap #50 HunnyMinter PCS CAKE/BNB
31.292666 Cake → 1.492511 WBNB
$19.31/CAKE $604 → $602
7 Mint #61 PancakeRouter HUNNY/BNB LP
2,588.098331 HUNNY + 1.489951 WBNB
—
8 Swap #80 ⚠ PCS HUNNY/BNB HunnyMinter
9,868.040418 HUNNY → 5.649992 WBNB
$0.156/HUNNY $1,537 → $2,278 (+48%)
9 Withdraw #85 PancakeSwap PancakeHunny 0.000000 Cake —
10 Deposit #88 PancakeHunny PancakeSwap 0.000000 Cake —
11 Swap #97 HunnyMinter PCS CAKE/BNB
31.292666 Cake → 1.492506 WBNB
$19.31/CAKE $604 → $602
12 Swap #100 PCS HUNNY/BNB HunnyMinter
1.492506 WBNB → 2,599.418299 HUNNY
$0.232/HUNNY +48.7% from $0.156
13 Swap #107 HunnyMinter PCS CAKE/BNB
31.292666 Cake → 1.492502 WBNB
$19.31/CAKE $604 → $602
14 Mint #118 PancakeRouter HUNNY/BNB LP
2,599.418299 HUNNY + 1.489943 WBNB
—
15 Swap #137 ⚠ PCS HUNNY/BNB HunnyMinter
9,650.847346 HUNNY → 5.501949 WBNB
$0.156/HUNNY $1,504 → $2,218 (+48%)
16 Swap #142(Flashloan repayment) Attacker CA PCS CAKE/BNB
6.018054 WBNB → 6.000000 WBNB
원금 환원 fee: 0.018 BNB ($7.3)
2-6. 유사 공격 비교표
프로젝트 날짜 체인 손실 공격 기법
PancakeBunny 2021-05-19 BSC ~$45M Flash Loan + Minting Manipulation
AutoShark 2021-05-24 BSC ~$0.82M Performance Fee Minting (포크)
Merlin Labs 2021-05-26 BSC ~$0.68M Performance Fee Minting (포크)
★ PancakeHunny 2021-06-03 BSC ~$1.1M antiWhale 우회 + Minting (×91)
PancakeHunny (2차) 2021-10-20 BSC ~$1.9M Flash Loan + TUSD 경로 조작
2-7. Root Causes & Lessons
근본 원인
HunnyMinter.mintFor()가 외부에서 전달된 CAKE(62.585)를 WBNB→HUNNY→LP 경로로 처리하면서 산출한 hunnyBnbAmount를 기반으로 19,518 HUNNY를 신규 발행. 투입 $1,209 대비 발행 $3,041 — 2.52배 초과 민팅.
antiWhale 메커니즘이 단일 Transfer의 크기만 제한하므로, Child Contract를 경유한 다단계 전송/회수 패턴으로 완벽히 우회됨.
PancakeBunny(5/19), AutoShark(5/24), Merlin Labs(5/26) 공격이 동일 취약점으로 발생한 후에도 14일간 패치하지 않고 운영.
교훈
민팅 수량은 외부 입력(전달된 CAKE 금액)의 시장가 기준으로 상한을 검증해야 한다. LP 생성 과정의 내부 hunnyBnbAmount를 신뢰하면 조작 가능.
포크 프로젝트는 원본의 보안 사고 발생 시 동일 함수를 즉시 감사하고 패치해야 한다. 2주 이상의 대응 기회를 놓친 것은 운영 실패.
민팅 함수에 블록당/에포크당 최대 발행량, 타임락, 거버넌스 멀티시그 승인 등 다층 방어 필요.
2-8. 공격 당시 토큰 가격 (tokenPriceCache)
WBNB
$403.21
tokenPriceCache
CAKE
$19.31
tokenPriceCache
HUNNY
$0.1558
tokenPriceCache
HUNNY (공격 후)
~$0.075
−52% 가격 폭락
ETH
$2,717.15
참고 (tokenPriceCache)
HUNNY/BNB LP
$17,008
per LP token
💡 가격 조작 핵심: 공격자는 AMM 가격을 직접 조작하지 않았다. HunnyMinter의 성과 수수료 → LP 생성 → hunnyBnbAmount 산출 → mint() 경로에서, 외부 주입된 CAKE가 과도한 HUNNY 민팅으로 이어지는 비대칭 구조를 악용. HUNNY/BNB 풀의 실효 환율($0.231)이 정상가($0.156) 대비 +48% 높은 것은, 공격 전 풀에 유동성이 충분했기 때문이며 91회 반복 덤핑으로 점진적으로 하락했다.
Block 3 — 인터랙티브 Fund Flow
Step 1: CAKE 스왑
Step 2: Minter 주입
Step 3: 민팅
Step 4: 회수+덤핑
Main CA(0x3863)가 6 WBNB를 PancakeSwap CAKE/BNB 풀에서 125.17 CAKE로 스왑한다.
Attacker (0x3863)
Main CA
PCS CAKE/BNB
PancakeSwap
HunnyMinter ⚠
0x109e
HUNNY mint()
HUNNY/BNB
PancakeSwap
Child CAs (0xed50/0x78e0)
6 BNB→125 CAKE
62.5 CAKE
mint 19,518
19.5K dump 11.15 BNB → 원금 복구
BNB flow Mint Dump Recovery
Block 4 — 단일 Tx 가치 흐름 (Waterfall)
초기 투입 비용 / 수수료 민팅 수익 Net profit