卡Bug自己給自己「開工資」? Daoswap攻擊事件分析

北京時間2022年9月5日,CertiK審計團隊監測到Daoswap由於挖礦獎勵大於交換過程中收取的費用以及缺乏驗證,允許用戶將邀請者地址設置為自己,在一次攻擊中損失了58萬USDT。

攻擊步驟

① 攻擊者合約從12個地址中共閃電貸到了218萬美元。

② 攻擊者合約使用DAORouter將所有閃電貸到的USDT交換為DAO代幣。在交換過程中,攻擊者合約以兩種方式從SwapToEarn獲得DAO代幣作為獎勵:

a. 代幣獎勵:這是為換取代幣的用戶準備的。

b. 邀請者獎勵:攻擊者在調用函數時可以任意設置一個“邀請者”地址,相當於推薦人也可以獲取獎勵。在這種情況下,攻擊者合約將邀請者地址設置為自己。

③ 攻擊者合約用同樣的方法將所有DAO代幣換回USDT,再次獲得這兩種獎勵。

④ 攻擊者合約多次重複步驟②和③。因為攻擊者收到了DAO代幣作為獎勵,所以他每次都能獲得更多的USDT。

⑤ 攻擊者合約償還了所有借貸資金,並將剩餘的USDT金額轉移給攻擊者。

合約漏洞

DAOSwap包含一個“swap-mining”的獎勵,其實現方式如下。

在函數_swap中調換之後,可調用SwapToEarn.sol中的函數swapCall。

XDA8ivvATH9tEBxsoSZ95kPOxD44FNeKA8GvqFEi.png

VqDB8r7o8gOBynquCY33cfRU6JFCn4pFBLG6OjZE.png

在函數swapCall中,DAO代幣被轉移給用戶和邀請者,二者的地址都是通過參數傳遞的。

1tBosBiMd5E9n6RP59SGLBihikMMwapT5W5Mjqle.png

當函數在_swap中被調用時,我們可以看到用戶被設置為信息發送者msg.sender,而邀請者則來自於輸入參數。

uKEzZ3yn6oJvdnPey4fOYK0QQ84xDzUmvxe4A0er.png

邀請者地址可以是任何地址,因為這個地址沒有設置檢查。攻擊者能夠將邀請者設為自己,並得到了額外的獎勵。

值得注意的是,攻擊者作為邀請者得到的獎勵約佔總獎勵的20%。即使不允許攻擊者將邀請人地址設置為自己,攻擊者仍然可以從交易中獲利。

6次交易的總利潤約為581,254 USDT。

相關交易

交易①:

https://bscscan.com/tx/0x414462f2aa63f371fbcf3c8df46b9a64ab64085ac0ab48900f675acd63931f23

交易②: https://bscscan.com/tx/0x6c859ae624002e07dac39cbc5efef76133f8af5d5a4e0c42ef85e47d51f82ae0

交易③:

https://bscscan.com/tx/0x3b1d631542eb91b5734e3305be54f305f26ab291b33c8017a73dcca5b0c32a1b

交易④: https://bscscan.com/tx/0xa7fdefcd80ba54d2e8dd1ab260495dca547993019d90f7885819bb4670b65bad

交易⑤:

https://bscscan.com/tx/0xf1368418344e21a1a09a2c1770ea301bf109ca3b387a59a79242a27d709195a7

交易⑥:

https://bscscan.com/tx/0x8eb87423f2d021e3acbe35c07875d1d1b30ab6dff14574a3f71f138c432a40ef

寫在最後

攻擊發生後,CertiK的推特預警賬號以及官方預警系統已於第一時間發布了消息。同時,CertiK也會持續於官方公眾號發布與項目預警(攻擊、欺詐、跑路等)相關的信息。

CertiK的端到端安全解決方案,從智能合約審計和KYC項目背景調查服務,到Skynet天網動態掃描系統和SkyTrace等區塊鏈分析工具,以及漏洞賞金計劃,助力每一個項目充分發揮潛力的同時為Web3.0打造用戶和投資者高參與的生態系統。

Total
0
Shares
Related Posts