兩天內遭遇兩次攻擊 DeFi 協議 FEG 真的傷不起

2022-05-18 15:05:25

前言

北京時間 2022 年 5 月 16 日,知道創宇區塊鏈安全實驗室 監測到多鏈 DeFi 協議 FEG 遭到閃電貸攻擊,攻擊者竊取 144 ETH 和 3280 BNB,損失約 130 萬美元。

5 月 17 日,多鏈 DeFi 協議 FEG 再次受到攻擊,攻擊者竊取 291 ETH 和 4343 BNB,損失約 190 萬美元,其中 BSC 130 萬美元,以太坊鏈 60 萬美元。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

分析

該協議在 BSC 和 Ether 上都被攻擊了,下面的圖分別是兩鏈上的攻擊事件交易哈希。本次攻擊事件主要原因是 swapToSwap() 函數中 path 地址可被攻擊者控制。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

基礎信息

攻擊合約:0x9a843bb125a3c03f496cb44653741f2cef82f445

攻擊者地址:0x73b359d5da488eb2e97990619976f2f004e9ff7c

漏洞合約地址:

BSC: 0x818e2013dd7d9bf4547aaabf6b617c1262578bc7

Ether: 0xf2bda964ec2d2fcb1610c886ed4831bf58f64948

攻擊 tx:

BSC:0x77cf448ceaf8f66e06d1537ef83218725670d3a509583ea0d161533fda56c063

Ether:0x1e769a59a5a9dabec0cb7f21a3e346f55ae1972bb18ae5eeacdaa0bc3424abd2

攻擊流程

1.攻擊者 0x73b3 調用事先創建好的攻擊合約 0x9a84 從 DVM 中閃電貸借出 915.842 WBNB,接着將其中的 116.81 WBNB 兌換成 115.65 fBNB。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

2.攻擊者 0x73b3 通過攻擊合約 0x9a84 創建了 10 個合約以便後面利用漏洞。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

3.攻擊者 0x73b3 將第一步中兌換得到的 fBNB 通過函數 depositInternal() 抵押到 FEGexPRO 合約 0x818e 中。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

4.攻擊者 0x73b3 調用 depositInternal() 和 swapToSwap() 函數使得 FEGexPRO 合約 0x818e 授權 fBNB 給第二步創建好的合約,重復多次調用授權 fBNB 給創建的 10 個合約。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

5、由於上一步中已經將攻擊者 0x73b3 創建的 10 個合約都已授權,攻擊者用這些已被授權的合約調用 transferFrom() 函數將 FEGexPRO 合約 0x818e 每次轉走 113.452 fBNB。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

6、攻擊者 0x73b3 又從 PancakePair 的 LP 交易對 0x2aa7 中借出 31217683882286.007 的 FEG 和 423 WBNB 並重復上面的 第三步、第四步和第五步,最終獲得 。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

7、最後歸還閃電貸,將上面攻擊獲得的所有 WBNB 轉入攻擊合約 0x9a84 中。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

細節

查看 FEGexPRO 合約,我們能看到 depositInternal() 函數和 swapToSwap() 函數的具體邏輯。其中 depositInternal() 函數進行質押,用戶的余額受到合約當前代幣余額的影響,第一次攻擊者正常質押後 balance 也正常增加,而由於當前合約代幣余額沒變,後面的質押只需要傳入最小值調用即可。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

通過調用 swapToSwap() 函數傳入惡意的 path 地址參數,當前合約代幣余額並不會受到影響,IERC20(address(Main)).approve(address(path), amt); 這樣就能給 path 地址進行當前合約 fBNB 的授權。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

攻擊者通過反復調用 depositInternal() 和 swapToSwap()就可以讓 FEGexPRO 合約將 fBNB 反復授權給攻擊者傳入的惡意合約 path 地址。其他地址轉走的代幣數量就是攻擊者第一次質押的代幣數量減去手續費的數量。通過查看 Debugger 中的信息,我們可以發現傳入的 path 地址參數都是攻擊流程中創建的合約地址。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

後續

在 16 日的攻擊之後,次日攻擊者又進行了一次攻擊,但更換了攻擊地址。

攻擊合約:0xf02b075f514c34df0c3d5cb7ebadf50d74a6fb17

攻擊者地址:0xf99e5f80486426e7d3e3921269ffee9c2da258e2

漏洞合約:0xa3d522c151ad654b36bdfe7a69d0c405193a22f9

攻擊 tx:

BSC:0xe956da324e16cb84acec1a43445fc2adbcdeb0e5635af6e40234179857858f82

Ether:0c0031514e222bf2f9f1a57a4af652494f08ec6e401b6ae5b4761d3b41e266a59


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

由於 R0X 漏洞合約 0xa3d5 未开源,我們試着從 Debugger 中進行分析,發現和第一次的攻擊流程類似,但還用了 BUY() 輔助存入和 SELL() 函數進行輔助提取。


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起


      兩天內遭遇兩次攻擊  DeFi 協議 FEG 真的傷不起

總結

該次攻擊的主要原因是未驗證 swapToSwap() 函數中 path 地址參數,導致可以被攻擊者任意傳入使得 FEGexPRO 合約將自身代幣授權給攻擊者傳入的所有惡意 path 地址。建議合約在开發時要對所有傳入的參數進行校驗,不要相信攻擊者傳入的任何參數。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

逆市拉盤,一文速覽Depin協議Grass為何暴漲

在加密市場近期震蕩中,Grass代幣($GRASS)以其獨特的表現引發了市場的廣泛關注。尤其是在過...

coincaso
5 20小時前

從大虧8.68億到協議重生:Ethena的困境與破局

引言Ethena是本輪周期少有的現象級DeFi項目,其代幣上线後流通市值一度超過20億美金(對應F...

coincaso
13 3天前

GLIF代幣空投:Filecoin最大DeFi協議开啓一億枚代幣的分發!

Glif是Filecoin上最大的DeFi協議,正在推出其原生代幣。總計將向用戶空投1億枚GLIF...

coincaso
21 6天前

牛熊轉換:加密貨幣的PvP與PvE模式解析

“畢業後,你會有一段短暫的時間來進行超高風險投資以獲得精英地位,否則你就會終身成為工資奴隸。” -...

coincaso
24 6天前

LRT 之爭:在劇烈波動中賺取 AVS 獎勵

前言比特幣重回 7W,行情波動加劇,再質押重回投資者視野,幣圈真正賺錢的時候,一定是在低風險高收益...

coincaso
25 6天前

World Liberty Financial能否改變穩定幣遊戲規則?

特朗普加密項目“World Liberty”計劃發行穩定幣,消息人士稱據悉,特朗普加密項目計劃推出...

coincaso
24 1周前