老調重彈,淺談 「通縮型代幣」 兼容性問題 - 冷萃財經

老調重彈,淺談 「通縮型代幣」 兼容性問題

By:[email protected]慢霧安全團隊

據慢霧區情報,MDEX 的 XSquid 和 HT 代幣池子中 HT 代幣在沒有進行 swap 的情況下被頻繁抽取,慢霧安全團隊對此介入分析,並將簡要分析分享如下。

攻擊核心

本次攻擊的核心在於利用 XSquid 映射通縮型代幣的模型,在轉賬後會發生通縮,自身合約所獲取的 balanceOf 與通過 Mdex pair 池所獲取到的 reserve 不匹配的問題,使得攻擊者可以抽取池中的 HT 代幣。

攻擊細節

由鏈上分析工具我們可以看到,這筆交易中 Mdex pair 池最終向攻擊者轉移了 0.003 枚 WHT 代幣,而鏈上的交易記錄顯示還有很多筆這樣的交易與之相同。

老調重彈,淺談 「通縮型代幣」 兼容性問題

接下來我們仔細觀察這筆交易的細節,這是一個 XSquid 和 HT 的 Mdex Pair 池,在對 XSquid 進行 swap 轉賬前 pair 合約通過 getReserves 介面所獲取到池子中 _reserve0 為 1010.505640800917497232。但在下一步通過 XSquid 合約的 balanceOf 獲取 pair 餘額後我們卻發現結果為 1010.5060773394782 ,數量上存在明顯的差異。

老調重彈,淺談 「通縮型代幣」 兼容性問題

但是在最後一次更新 reserve 之後並沒有用戶向合約中進行轉賬。於是我們就可以定位到,是在 balancOf 獲取時造成的誤差。於是我們開始查看 XSquid 合約,並定位到 balanceOf 函數合約的 715 行。通過函數的一步步跟蹤 balanceOf。

老調重彈,淺談 「通縮型代幣」 兼容性問題

其中 balanceOf 調用了 tokenFromReflection 來獲取。而 tokenFromReflection 函數中傳入的是所映射的 rAmount.div(currentRate)。currentRate 又是由 _getRate 函數決定的。通過 _getRate 我們接著跟蹤到 _getCurrentSupply 函數。

老調重彈,淺談 「通縮型代幣」 兼容性問題

老調重彈,淺談 「通縮型代幣」 兼容性問題

根據一步步的定位我們發現,合約中代幣的 _tTotal 總量是不會發生變化的,最終影響 _getCurrentSupply 輸出結果的是由於 _rTotal 值的變化而造成的。從合約我們發現 XSquid 是映射通縮型代幣,而在每一次轉賬時計算 _rTotal 都會由 _reflectFee 產生通縮使得 _rTotal 值減少,而造成 currentRate 因此減少,而 rAmount.div(currentRate) 增大,最終造成所獲取到的 balanceOf 大於 getReserves 所獲取到的值。

老調重彈,淺談 「通縮型代幣」 兼容性問題

老調重彈,淺談 「通縮型代幣」 兼容性問題

這樣就造成了一種假象,使得池子認為外部又多打入了 XSquid 進來。這時攻擊者只需要調用 Mdex Pair 合約的 swap 函數根據上訴計算的差額來抽取代幣,或者是調用 skim 函數直接轉走代幣。由此,可從池子中抽離這一小部分「多餘」而不屬於他的 HT。對此,我們可以在每次轉賬最後通過調用 sync 函數強制準備金與餘額匹配同步更新,來避免以上不匹配的問題。

總結

此次抽池的核心問題在於「通縮映射型代幣」與項目合約不兼容所導致的。而代幣與 DeFi 項目合約代碼不兼容所導致的安全問題已是重複出現的老問題了,慢霧安全團隊再次提醒:由於 DeFi 項目需要多個合約間進行交互,在進行設計時項目方應充分考慮不同合約間交互的兼容性問題,並確保交易對與項⽬是相互兼容的。

冷萃財經原創,作者:awing,轉載請註明出處:https://www.lccjd.top/2021/11/30/%e8%80%81%e8%b0%83%e9%87%8d%e5%bc%b9%ef%bc%8c%e6%b5%85%e8%b0%88-%e9%80%9a%e7%bc%a9%e5%9e%8b%e4%bb%a3%e5%b8%81-%e5%85%bc%e5%ae%b9%e6%80%a7%e9%97%ae%e9%a2%98/?variant=zh-tw

0

掃一掃,分享到微信

猜你喜歡

文章評論

電子郵件地址不會被公開。 必填項已用*標註

後發表評論

    上一篇

    鏈游公會Avocado Guild完成1800萬美元融資,Animoca Brands、QSN領投

    下一篇

    深度解析MakerDAO:為何被譽為去中心化央行?

    微信公眾號

    微信公眾號