. J3 p9 t8 \5 i" ^- d& ^; r / {) @) F9 o! d4 [4 R5 P: y 7 Y" m3 x6 [. W5 M) r& A8. 然后归还闪电贷,将获得的WBNB转入攻击合约中完成此笔攻击。5 T0 Z C( z1 M& G
% `' r. F9 G: x . u" F0 N9 I+ i: g6 \3 }; q w* ?! W$ b Q
0 J4 D* M. V4 {( z) |/ Y- Z2 s$ }. U
1 [4 V" F, q$ [, g
9. 此后,又利用相同的原理,执行了50余笔相同的攻击,最获利约144 ETH和3280 BNB。 & W0 {! k9 d# X+ G7 P; E" E+ o+ A7 g. o: m# H' u
3 P: z5 T' ~ I3 @; H3 b- ?
* c) A; q- o) D: N9 n1 t
4 I: |+ a+ J$ u1 C7 O( n+ x: M: @
* P0 J2 w3 p4 [6 r6 ]7 J. T, ^8 `' T$ d
1 B8 {7 Z0 X/ J: G& Y0 g/ x L
8 g6 `6 ?9 {- a0 S3 b1 l
: J4 E3 h8 D% F0 ^; f#3 漏洞分析9 i% A- `% W4 d. t+ ~
# W; i% D" h/ O+ ^. h, N- B2 z8 n9 i0 Z P
本次攻击主要利用了FEGexPRO合约中swapToSwap函数中path地址可控且合约中未对path地址进行有效性校验的漏洞。由于合约中depositInternal函数中更新用户余额时依赖于合约中当前代币余额,攻击者通过传入一个恶意的path地址,调用swapToSwap函数时合约中代币余额并未发生变化,导致攻击者可以反复重置攻击合约在FEGexPRO合约中记录的代币数量,从而让FEGexPRO合约将自身代币反复授权给攻击者所控制的多个恶意合约。 3 R& L' l" z1 `& n; i7 r 6 ?" x, k' s6 ]" O 9 a: m4 j% S& O* J- E 1 w4 e8 A' ~0 S- p: P2 q$ h) p2 E6 n, `( p
/ H# Z! b G+ e4 t! T, y 9 w2 u: @* `$ b- P/ r4 [1 A. i2 b+ e3 s, ?5 E2 V" K4 s" d
#4 资金追踪 " h, f1 S0 c# I W9 k3 z( e ' Y+ I/ |+ Y; @& g. P3 W- v: A - k B) m: o0 ^( p截止发文时,被盗资金仍在攻击者地址(0x73b3...ff7c)中并未转移。 & [# X& m; D! u2 R: A+ ]+ H' S3 p; ?' z; s. Y
$ I5 T% @9 |5 P9 E( f9 j4 T; z* f7 o" m+ X
. U0 a, k: P2 M& J) F# K3 T1 ?! `
" U- ~/ j. K2 ]
1 J$ N1 ?" E( t) n
& a5 d. s% l$ L6 L