' ^( [6 L& e" X : y- R! O) S+ y9 E+ k+ _3 c) u/ N攻击交易 (部分)4 F9 O' \% b' j9 @- r' _! P
0 X$ m1 L5 I. O, Y) Z; o- `0x77cf448ceaf8f66e06d1537ef83218725670d3a509583ea0d161533fda56c063 (BNB Chain) , c9 k R1 N+ M( {& ]/ i, b2 C; e/ \
0x1e769a59a5a9dabec0cb7f21a3e346f55ae1972bb18ae5eeacdaa0bc3424abd2 (Ethereum)- u. t. p$ d; r8 r9 C. t3 W# X) @
1 u+ c# ^4 ]# f4 G, X5 h
( ?6 f2 ^6 J l* d7 f9 K - }8 Q+ D. Y3 o6 ?攻击者地址5 a7 g5 U) D% t- q
" A7 W& b T% T' [- R1 H
0x73b359d5da488eb2e97990619976f2f004e9ff7c4 {# k0 _; ?. v. V: ^2 g
6 D2 w) W. W9 C9 s& g- b, n( {: y" j% Y7 K
; Y/ j% }9 E7 u4 l% n* E
% K* a; q o t ~- G3 J5 p攻击合约' U& ~; A! |6 H1 f4 Q
# u5 g5 H, j( P2 I8 C0x9a843bb125a3c03f496cb44653741f2cef82f445 5 b+ U' \6 r$ F" E; B 2 K. i4 s& r( A/ s- n6 O$ _4 R, ?+ S G
$ p" H# Z u" J" p( e; K. D# s( |; z
被攻击合约(部分) 2 ?5 Z4 f& c5 B k* u: G ; X, o* f7 v1 [' J8 n. ^3 I0x818e2013dd7d9bf4547aaabf6b617c1262578bc7 (BNB Chain) " n8 z: z( P! t1 q& ^3 m" p k& | & ^1 f9 E% f; `0xf2bda964ec2d2fcb1610c886ed4831bf58f64948 (Ethereum) ( @1 F( b( D# d7 V N( v! \( n4 W x ' E' L; z w% H$ _. B1 f# E8 q/ g- R- |2 o" m3 q! u. i5 n$ f. R& p R
) ^+ m& u% ?" B( m4 {5 E#2 攻击流程' ]( a; F% |6 P0 q) f' W
# p3 J- T; `3 e+ \5 p+ D( \1 |, _- T( V8 T
Ethereum和BNB Chain上使用攻击手法相同,以下分析基于BNB Chain上攻击:4 k& r5 N9 ^9 y( i' w8 _2 Q( a. Z1 \
/ j- g3 @' K* G
# L7 b$ n5 V# m, Y
& E$ ~& W5 {- ]8 t6 P4 J
1. 攻击者调用攻击合约(0x9a84...f445)利用闪电贷从DVM合约(0xd534...0dd7)中借贷915.84 WBNB,然后将116.81 WBNB兑换成115.65 fBNB为后续攻击做准备。 J/ ` s: k; R) L, W
, d; Y% h }! j1 Z/ h
- f8 v( g1 w0 p0 J+ U) s( ~/ o0 F% w! D( j: h# a ?+ u5 N4 K
2. 攻击者利用攻击合约创建了10个合约,为后续攻击做准备。 . x" q' H! m1 d5 Z( I3 m- C 3 A* {& W! a# d1 A3 O0 @+ y e. n( ]# d: R- Y+ Y/ D
3 I' Z" `: s* d9 g/ Y
7 C( Z# U% W1 Z 5 _2 f+ T" s t3. 攻击者接下来将兑换得到的fBNB代币抵押到FEGexPRO合约(0x818e...8bc7)中。" J Y& ^: m7 r& K; C) O/ s. w4 }* F
2 W. ~3 j B0 U3 E ! c3 }; {5 ?# ?7 h5 u+ y) M+ s , v" h' d+ b. v" W2 U4. 然后攻击者重复调用depositInternal和swapToSwap函数,让FEGexPRO合约授权fBNB给之前创建好的其他攻击合约。- B* }, @9 N9 ~% ], Y, Z
. o v7 J6 _& ^$ T9 g
/ H* F/ s/ R7 b; k# U+ L+ W$ a2 V
9 Q& \+ _6 s( c) I # V6 |4 X8 o% k4 [$ t( _5. 然后利用其他攻击合约调用transferFrom函数将FEGexPRO合约中fBNB全部转移到攻击合约(0x9a84...f445)中。# p0 m' a, s- H9 ^7 R
) h/ f* H0 k d: r' L @
' F! l7 s! i' {+ W
6 _% c, ^' k8 W& ?2 e3 a) Y* N* _( c$ d* z
4 T ~2 t& r& b
6. 接下来又在LP交易对合约(0x2aa7...6c14)中借贷31,217,683,882,286.007211154 FEG代币和423 WBNB。 4 F( h1 g2 Q# N+ s$ B( C- w3 O) s : p0 `# b# ~* V ' b9 w& U6 k6 e* i/ q5 X) o0 s$ S7 e& `8 w
7. 然后重复3、4、5步骤的攻击手法,将FEGexPRO合约中大量FEG代币盗取到攻击合约中。; _4 p4 I- Y- g, @: L) z6 A
6 `3 }3 J# _& G1 ]/ P9 V- Q( L, P8 p* s& F7 b6 g/ q' A( C
- T( n" u7 g; V3 a' e
! I1 D. M. u; S" | # n$ Q, U7 v9 T# E. N1 z/ s( a0 |1 Q1 D& k: j" o# K, K4 f
* T* n5 ?9 d4 G7 n+ @8. 然后归还闪电贷,将获得的WBNB转入攻击合约中完成此笔攻击。 4 v P A X7 `+ G2 Y " H e7 I# u+ h/ {& S6 B. ]! W * s* X$ E3 e! P* Q' c. h5 ~$ e# F i" y% \2 H F
& \/ l% s1 t4 H4 d8 d
' i( q" k3 i* e7 a( ^2 s! C9. 此后,又利用相同的原理,执行了50余笔相同的攻击,最获利约144 ETH和3280 BNB。 4 c7 n5 E. F1 l ; M8 A: {) l0 \) x; u) d* r# K4 D' \; _: J
$ `: _( K7 s2 g
# Z6 U& ^: }- z; ]8 i . R6 E( Z- }9 ~' C3 _8 p% `$ c0 }$ q' q, H2 n! L
( `, p3 @4 Z9 x3 C: u
# j% k3 Q1 ^3 i2 q 0 X2 f$ M9 d. X#3 漏洞分析 & C8 \! f. H; F# u& M' a6 O# j , h: h9 M9 Q) e' v7 Y1 m- e+ Z' T- L 1 {) r+ l1 L& g) n4 g. u Y9 K8 ]本次攻击主要利用了FEGexPRO合约中swapToSwap函数中path地址可控且合约中未对path地址进行有效性校验的漏洞。由于合约中depositInternal函数中更新用户余额时依赖于合约中当前代币余额,攻击者通过传入一个恶意的path地址,调用swapToSwap函数时合约中代币余额并未发生变化,导致攻击者可以反复重置攻击合约在FEGexPRO合约中记录的代币数量,从而让FEGexPRO合约将自身代币反复授权给攻击者所控制的多个恶意合约。/ @, W( \9 k. V7 w
: _ P* M) h3 p
3 z! e$ Q2 U( O9 M- D: J
) S; F# c |/ X# `4 T$ u
) [5 o5 t5 [5 I2 ~ - l" J7 n* E5 n6 w! g. E , U; I4 B; x! j- q6 _1 s- @+ \9 W& A1 K0 P1 h$ h3 v s
#4 资金追踪 $ o; O* ^& ~8 [0 W5 k, C6 Z* P4 n
! c! R f8 i1 Y7 h
截止发文时,被盗资金仍在攻击者地址(0x73b3...ff7c)中并未转移。 8 ]9 w, Z: q3 I- @6 R. y ' }, U+ `# a2 z. s 6 D7 O L' T7 P i7 I4 n/ `* r
" x! z8 {# l3 R3 \1 F% K! V" r2 u) B9 v
6 w1 X2 H* S& s/ g
- q; V5 ~# r9 f- w+ K7 Z& f0 P( X. S
( X8 U8 o' ?5 j$ D/ E% H4 }: R3 y0 `: b5 m* d8 F! S% N
5 d9 E+ v' R+ O7 f! X( o4 H 8 T+ C- t1 E( X! S3 W( Q2 W6 Z8 ~$ L! e J3 s
#5 总结9 w$ M( t% T( g2 ^7 |; \; a
# O6 J0 ?3 ~" ~+ |0 ^1 a# i9 k# A