2022年5月16日,成都鏈安鏈必應-區塊鏈安全態勢感知平臺輿情監測顯示,ethereum和bnb chain上fegtoken專案的fegexpro合約遭受駭客攻擊,駭客獲利約3280 bnb 以及144 eth,價值約130萬美元。成都鏈安技術團隊對事件進行了分析,結果如下。
#1 事件相關資訊
本次攻擊事件包含多筆交易,部分交易資訊如下所示:
攻擊交易 (部分)
0x77cf448ceaf8f66e06d1537ef83218725670d3a509583ea0d161533fda56c063 (bnb chain)
0x1e769a59a5a9dabec0cb7f21a3e346f55ae1972bb18ae5eeacdaa0bc3424abd2 (ethereum)
攻擊者地址
0x73b359d5da488eb2e97990619976f2f004e9ff7c
攻擊合約
0x9a843bb125a3c03f496cb44653741f2cef82f445
被攻擊合約(部分)
0x818e2013dd7d9bf4547aaabf6b617c1262578bc7 (bnb chain)
0xf2bda964ec2d2fcb1610c886ed4831bf58f64948 (ethereum)
#2 攻擊流程
ethereum和bnb chain上使用攻擊手法相同,以下分析基於bnb chain上攻擊:
1. 攻擊者呼叫攻擊合約(0x9a84...f445)利用閃電貸從dvm合約(0xd534...0dd7)中借貸915.84 wbnb,然後將116.81 wbnb兌換成115.65 fbnb為後續攻擊做準備。
2. 攻擊者利用攻擊合約建立了10個合約,為後續攻擊做準備。
3. 攻擊者接下來將兌換得到的fbnb代幣抵押到fegexpro合約(0x818e...8bc7)中。
4. 然後攻擊者重複呼叫depositinternal和swaptoswap函式,讓fegexpro合約授權fbnb給之前建立好的其他攻擊合約。
5. 然後利用其他攻擊合約呼叫transferfrom函式將fegexpro合約中fbnb全部轉移到攻擊合約(0x9a84...f445)中。
6. 接下來又在lp交易對合約(0x2aa7...6c14)中借貸31,217,683,882,286.007211154 feg代幣和423 wbnb。
7. 然後重複3、4、5步驟的攻擊手法,將fegexpro合約中大量feg代幣盜取到攻擊合約中。
8. 然後歸還閃電貸,將獲得的wbnb轉入攻擊合約中完成此筆攻擊。
9. 此後,又利用相同的原理,執行了50餘筆相同的攻擊,最獲利約144 eth和3280 bnb。
#3 漏洞分析
本次攻擊主要利用了fegexpro合約中swaptoswap函式中path地址可控且合約中未對path地址進行有效性校驗的漏洞。由於合約中depositinternal函式中更新使用者餘額時依賴於合約中當前代幣餘額,攻擊者透過傳入一個惡意的path地址,呼叫swaptoswap函式時合約中代幣餘額並未發生變化,導致攻擊者可以反覆重置攻擊合約在fegexpro合約中記錄的代幣數量,從而讓fegexpro合約將自身代幣反覆授權給攻擊者所控制的多個惡意合約。
#4 資金追蹤
截止發文時,被盜資金仍在攻擊者地址(0x73b3...ff7c)中並未轉移。
#5 總結
針對本次事件,成都鏈安技術團隊建議:
專案開發時,應該注意與其他合約互動時可能存在的安全風險,儘量避免將關鍵引數設定為使用者可控。如果業務需求如此,則需要嚴格判斷使用者輸入的引數是否存在風險。此外建議專案上線前選擇專業的安全審計公司進行全面的安全審計,規避安全風險。