← Dashboard
BNB Smart ChainChain ID: 56
PMA Case #—

AutoShark Finance

SharkMinter의 잔고 기반 리워드 계산 취약점을 악용한 플래시론 기반 토큰 과잉 민팅 공격
Reward Minting ManipulationFlash LoanSingle TxPancakeBunny Fork

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

All
Step 1: LP 예치
Step 2: Flash Loan
Step 3: Swap + 전송
Step 4: 민팅
Step 5: 덤프 & 이익
Single atomic transaction — Block #7,698,696 AttackerEOA 0xd9c7… + CA 0x22de… PancakeSwapFlash Loan Provider PantherSwapAMM (WBNB/SHARK) SharkMinter⚠ tokenToSharkBNB() 취약 StrategyCompoundSHARK-BNB Vault PantherSwapBUSD/SHARK Pool 1 100,000 BNB2 50K BNB→391K SHARK50K BNB + 10,987 SHARK3 getReward()100M SHARK⚠ 과잉 민팅4 110M SHARK 덤프102,514 BNB상환 100,301 BNB5
전체 공격 흐름: 공격자(EOA 0xd9c7…)가 컨트랙트(0x22de…)를 통해 PancakeSwap에서 100,000 BNB 플래시론 차입 → 50,000 BNB를 PantherSwap에서 391,175 SHARK로 스왑 → 나머지 50,000 BNB + 10,987 SHARK를 SharkMinter에 직접 전송 → getReward() 호출 시 부풀려진 잔고 기반으로 100M SHARK 민팅 → 110M SHARK를 2경로로 덤프하여 102,514 BNB 확보 → 100,301 BNB 상환 후 2,213 BNB($579,400) 순이익.

2. 종합 대시보드

2-1. Transaction Info

Date / Time2021-05-24 21:41:49 UTC
Attack TypeReward Minting Manipulation
Attacker Profit2,213.39 BNB (~$579,400)
Victim Loss~$759,046 (LP 유동성 + SHARK 가격 붕괴)

2-2. 공격 실행 흐름

Step 1 — 사전 준비: LP 예치
SHARK-BNB LP를 Vault에 소량 예치
PantherSwap에서 소량의 SHARK-BNB LP를 생성하여 StrategyCompoundFLIP에 예치. getReward() 호출 자격(performanceFee > DUST) 확보.
Step 2 — Flash Loan
PancakeSwap에서 100,000 BNB 차입
PancakeSwap WBNB/BUSD LP 풀에서 플래시론으로 100,000 WBNB 차입. 동일 트랜잭션 내 수수료 포함 상환 필요.
100,000 BNB ($26,174,633)
Step 3 — 가격 펌핑 + 잔고 인플레이션
50K BNB → 391,175 SHARK 스왑 + SharkMinter에 직접 전송
50,000 BNB를 PantherSwap WBNB/SHARK 풀에서 391,175 SHARK로 스왑. 나머지 50,000 BNB + 10,987 SHARK를 SharkMinter에 직접 전송. generateFlipToken()이 이 잔고를 참조하여 22,263 LP를 생성 — 정상 LP 생성량(0.000016)의 13.5억배.
50,000 BNB → 391,175 SHARK (PantherSwap)
Step 4 — 과잉 민팅 (138M SHARK)
getReward() → mintFor() → 공격자 100M + Dev 18M + Referrer 20M
getReward() 호출 시 SharkMinter의 50,000 BNB 잔고가 generateFlipToken()에 투입되어 22,263 LP 생성. 이 극단적 LP 양이 sharkBNBAmount로 반환되어 100M SHARK가 공격자 CA에 민팅. Dev 18M + Referrer 20M(CA 10M + PantherRouter 10M) 추가.
총 138,000,000 SHARK 민팅
Step 5 — 이익 실현
110M SHARK 2경로 덤프 → 102,514 BNB → 상환 → 순이익
110M SHARK(100M 리워드 + 10M referrer)를 2경로로 덤프: ① 55.19M SHARK → 101,361 BNB (WBNB/SHARK), ② 55.19M SHARK → 415,820 BUSD → 1,152 BNB (BUSD/SHARK → WBNB/BUSD). 총 102,514 BNB 확보 후 100,300.9 BNB 상환, 2,213.39 BNB를 EOA로 인출.
NET PROFIT: 2,213.39 BNB (~$579,400)

2-3. 관련 엔티티 & PnL

ATTACKER (EOA)
공격자 EOA
+2,213.39 BNB (~$579,400)
ATTACKER (CA)
공격 컨트랙트
메인 실행 + Referrer 10M SHARK 수령
VICTIM
AutoShark Finance
SharkMinter + SHARK-BNB LP Pool
-$759,046
FLASH LOAN
PancakeSwap
+300.9 BNB (수수료)
DEV
AutoShark Dev
18M SHARK 자동 스테이킹 (소각 약속)
INTERMEDIARY
PantherSwap AMM
WBNB/SHARK + BUSD/SHARK + WBNB/BUSD 풀
간접 피해 (유동성 고갈)

2-4. 가격/잔고 조작 상세

정상 상태 (공격 전)
SHARK 가격$0.4807
BNB 가격$261.75
SharkMinter WBNB~0
SharkMinter SHARK~0
⚠ 조작 후 (mintFor 직전)
SharkMinter WBNB50,000 BNB
SharkMinter SHARK10,987 SHARK
generateFlipToken LP22,263 LP
결과 민팅량100,000,000 SHARK
조작 비용
Flash Loan 원금100,000 BNB
Flash Loan 수수료300.9 BNB
SHARK 매수 (펌프)50,000 BNB
PantherSwap 풀 영향
WBNB/SHARK reserve0 (전)~1,401 WBNB
WBNB/SHARK reserve0 (후)39.89 WBNB
BUSD/SHARK reserve0 (후)2,626 BUSD

2-5. Key Events

#EventFromToAmountDeviation
1Swap (Flashloan borrow) (#294)PancakeSwap LPAttacker CA100,000 WBNB
2Swap (#299)Attacker CAPantherSwap WBNB/SHARK50,000 WBNB → 391,175.80 SHARK$33.45/SHARK
실효 BNB/SHARK: 0.1278
3Direct Transfer (#300-301)Attacker CASharkMinter50,000 WBNB + 10,987 SHARK
4Mint (#328-329)SharkMinterAttacker CA100,000,000 SHARK
정상 대비 무한배
5Swap (#356)Attacker CAPantherSwap WBNB/SHARK55,190,094 SHARK → 101,361.65 WBNB$0.0048/SHARK
−99.0% from $0.4807
6Swap (#361→364)Attacker CAPantherSwap (2-hop)55,190,094 SHARK → 415,820 BUSD → 1,152.64 WBNB$0.0075/SHARK
−98.4% from $0.4807
7Swap (Flashloan repayment) (#368)Attacker CAPancakeSwap LP100,300.90 WBNB (원금+수수료)0.3% fee
300.9 BNB
8Profit (#366)Attacker CAAttacker EOA2,213.39 WBNB$579,406
× $261.75/BNB

2-6. 유사 공격 비교표

프로토콜날짜체인피해액공격 기법Flash Loan
PancakeBunny2021-05-19BSC~$45MBunnyMinter 잔고 조작PancakeSwap + ForTube
AutoShark Finance2021-05-24BSC~$759KSharkMinter 잔고 조작PancakeSwap (100K BNB)
Merlin Labs2021-05 후반BSC~$680KCAKE 잔고 조작 (멀티 Tx)없음 (EOA 직접)
PancakeHunny2021-06BSC~$300KHunnyMinter 잔고 조작없음 (antiWhale 우회)

2-7. 근본 원인 & 교훈

취약점
tokenToSharkBNB()가 외부에서 조작 가능한 현재 잔고를 리워드 계산 입력으로 사용 — Mint #323에서 50,000 WBNB 투입 확인
generateFlipToken()이 SharkMinter의 WBNB/SHARK 잔고를 직접 참조 — 정상 Burn(0.000037 WBNB) 대비 Mint(50,000 WBNB)는 13.5억배 차이
PancakeBunny 동일 취약점 공개 후 5일간 포크 코드 미수정
Flash loan 방어(noContract modifier) 미적용
교훈
리워드 계산에 현재 잔고 대신 누적 기록(checkpoint) 또는 TWAP 오라클 사용 필요
포크 프로젝트는 원본의 보안 사고 발생 시 즉각 동일 취약점 패치 필수
4건의 감사에도 미발견 — 감사만으로는 불충분
Flash loan 방어를 기본 적용해야 함

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

WBNB
$261.75
tokenPriceCache
SHARK (공격 전)
$0.4807
tokenPriceCache
BUSD
$1.00
스테이블코인
SHARK (덤프 후 실효)
~$0.005
풀 유동성 사실상 고갈
💡 가격 조작 핵심: SharkMinter의 내부 WBNB/SHARK 잔고를 50,000 BNB + 10,987 SHARK로 부풀려 generateFlipToken()이 22,263 LP를 생성하도록 유도. 정상 LP 생성량(0.000016 LP)과 비교하면 약 13.5억배.

3. 인터랙티브 Fund Flow

Step 1: LP 예치
Step 2: Flash Loan
Step 3: Swap + 전송
Step 4: 민팅
Step 5: 덤프 & 이익
AttackerEOA 0xd9c7… + CA 0x22de… PancakeSwapFlash Loan PantherSwapAMM SharkMinter⚠ 잔고 조작 → 138M SHARK SHARK-BNB Vault BUSD/SHARK +WBNB/BUSD LP 생성 100,000 BNB 50K→391K SHARK50K BNB+10,987 SHARK getReward()100M SHARK 110M SHARK102,514 BNB상환 100,301 BNB flowToken flowRepay / Trigger
Step 1: PantherSwap에서 SHARK-BNB LP를 소량 생성하여 Vault(StrategyCompoundFLIP)에 예치. getReward() 호출 자격 확보.
BNB Balance
~0 BNB
SHARK Balance
소량 LP
Status
사전 준비 완료

4. BNB Balance Waterfall

Flash loan 유입유출Exploit 유입Net profit