MonoX.Finance安全事件分析 - 冷萃財經

MonoX.Finance安全事件分析

MonoX.Finance安全事件分析

前言

11 月 30 日,知道創宇區塊鏈安全實驗室 監測到自動做市商協議 MonoX.Finance 遭黑客攻擊,損失超 3100 萬美元。實驗室第一時間跟蹤本次事件並分析。

攻擊涉及信息

此次安全事件共有兩次攻擊分別發生在以太坊和 polygon 上。

簡述攻擊流程

本次攻擊分析選用以太坊交攻擊交易:0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299

1、黑客首先通過 swapExactTokenForToken 函數將 0.1WETH 兌換為 79.9MONO

MonoX.Finance安全事件分析

2、重複利用函數 removeLiquidity 移除 Monoswap 合約中的流動性,直至全部移除

MonoX.Finance安全事件分析

MonoX.Finance安全事件分析

3、通過函數 addLiquidity 添加自己操控的流動性

MonoX.Finance安全事件分析

4、重複調用函數 swapExactTokenForToken(55次)實現 MONO->MONO 的不合理兌換

MonoX.Finance安全事件分析

5、最終利用被以上操作抬高價格的 MONO 兌換了 WETH、WBTC、MONO、USDC、USDT、 DUCK、MIM、IMX 等從而獲利。

MonoX.Finance安全事件分析

漏洞成因分析

分析攻擊流程可以發現兩個不合理的地方:

  • 攻擊者可以通過函數 removeLiquidity 移除了其他人添加的流動性
  • 攻擊者通過函數 swapExactTokenForToken 不斷重複 MONO 兌換 MONO 的操作

檢查源碼

對函數 removeLiquidity 源碼進行分析

MonoX.Finance安全事件分析

可以看到函數 removeLiquidity 和它包含的內部函數 _removeLiquidityHelper 都沒有對調用者進行許可權限制,以及對需要被移除流動性的傳參地址 to 進行驗證,這導致了任意地址都能進行對該 pool 內所有流動性進行移除。

對函數 swapExactTokenForToken 源碼進行分析

MonoX.Finance安全事件分析

1、發現函數 swapExactTokenForToken 主要功能由函數 swapIn 實現,對函數 swapIn 進行跟進分析

MonoX.Finance安全事件分析

2、發現獲取 token 信息的函數 getAmountOut,對函數 getAmountOut 進行跟進分析

MonoX.Finance安全事件分析

3、發現 tokenInPrice 與 tokenOutPrice 的計算規則相同都是通過函數 _getNewPrice 計算,跟進到函數 _getNewPrice

MonoX.Finance安全事件分析

4、發現 price 的獲取對應兩種狀態

  • SELL 狀態:價格 = 代幣初始價格*代幣存儲量 / (代幣存儲量+費用)
  • BUY 狀態:價格 = 代幣初始價格*代幣存儲量 / (代幣存儲量-費用)

很明顯相同 token 在 BUY 狀態下獲取到的價格大於 SELL 狀態

MonoX.Finance安全事件分析

MonoX.Finance安全事件分析

5.回到 swapIn 函數,當傳入 token 價格被獲取到後會按照 token 種類通過 _updateTokenInfo 進行 token 信息更新。

由於傳入的 token 都為 MONO 所以:

  • 當通過 if(tokenIn==address(vCash)) 判斷時,MONO 獲取到的價格是 SELL 狀態下計算的價格;
  • 當通過 if(tokenOut==address(vCash)) 判斷時,MONO 獲取到的 SELL 狀態下的價格會被 BUY 狀態下獲取的價格覆蓋;

因此當發生 MONO 兌換 MONO 操作時,MONO 的價格會上升。

重新梳理攻擊過程

第一步:黑客將 0.1WETH 兌換為 79.9MONO 作為啟動資金

第二步:黑客移除了 pool 內全部流動性,防止攻擊受到影響或者價格波動被檢測到

第三步:黑客添加了自己控制的流動性,便於兌換操作

第四步:黑客通過重複 MONO 兌換 MONO 的操作,不斷抬高 MONO 價格

第五步:利用已經被抬高的 MONO 兌換 pool 內其他資產達到獲利目的

總結

本次安全事件問題其實並不複雜,主要原因在於 monoswap 合約在設計時沒考慮到特殊情況下的價格覆蓋問題,而可任意移除流動性的缺陷則更加方便黑客對於價格的操縱。

知道創宇區塊鏈實驗室官網

創宇存證平台|知道創宇唯一指定存證平台

聯繫我們

知道創宇區塊鏈安全實驗室導航

微信公眾號

@ 創宇區塊鏈安全實驗室

MonoX.Finance安全事件分析

官方網站

@ 知道創宇區塊鏈安全實驗室

MonoX.Finance安全事件分析

微博

@ 知道創宇區塊鏈實驗室

知乎

@ 知道創宇區塊鏈安全實驗室

Twitter

@KS_Blockchain

MonoX.Finance安全事件分析

冷萃財經原創,作者:Awing,轉載請註明出處:https://www.lccjd.top/2021/12/03/monox-finance%e5%ae%89%e5%85%a8%e4%ba%8b%e4%bb%b6%e5%88%86%e6%9e%90/?variant=zh-tw

0

掃一掃,分享到微信

猜你喜歡

文章評論

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

後發表評論

    上一篇

    俄羅斯總統普京仍然認為Crypto具有很大風險,需加強監控

    下一篇

    Bitwise報告:與其他顛覆性技術相比,DeFi的增長空間還有多大?

    微信公眾號

    微信公眾號