慢霧安全團隊建議對於任何由外部傳入的參數都需要做嚴格的檢查,確保用戶只能對自己資產進行操作。
作者: Victory
據慢霧區消息,2022 年 10 月 27 日 Team Finance 平台遭受攻擊,損失價值約 1450 萬美元的代幣。慢霧安全團隊現將簡要復盤分析分享如下。
相關信息
攻擊交易
0xb2e3ea72d353da43a2ac9a8f1670fd16463ab370e563b9b5b26119b2601277ce
攻擊者地址
0x161cebB807Ac181d5303A4cCec2FC580CC5899Fd
攻擊者部署的攻擊合約地址
0xCFF07C4e6aa9E2fEc04DAaF5f41d1b10f3adAdF4
攻擊核心點
合約並未對遷移的 token 和鎖定的 token 進行一致性檢查,並且在遷移的邏輯中會退還遷移剩餘的代幣,導致攻擊者可以通過鎖定一個任意 token 對合約中不屬於攻擊者的 LPtoken 進行遷移。
攻擊分析
1、攻擊者先通過交易
0xe8f17ee00906cd0cfb61671937f11bd3d26cdc47c1534fedc43163a7e89edc6f 構造了 4 個假 token 的 lockedToken 數據。
2、攻擊者延長 lockedToken 的鎖定時間。至此攻擊者的準備工作已經完成,這些準備工作主要是為了繞過 migrate 的限制判斷。
3、攻擊者通過攻擊合約調用 Pool 的 migrate 函數。從傳入的參數可以看出攻擊者操作遷移的 token 與攻擊者鎖定的 token 並不一致,這是導致該合約被攻擊的根本原因。
4、通過分析參數可以發現傳入的 pair 與 token0 和 token1 並不匹配,並且由於傳入的 noLiquidity 為 true,所以在
v3Migrator.createAndInitializePoolIfNecessary 的調用中還會創建一個假 token 對 WETH 的 V3 Pool。
5、新創建的合約 Pool 價格 sqrtPriceX96 雖然由外部傳入,但在此次攻擊中並不是關鍵原因。此次攻擊最重要的獲利點是 v3Migrator.migrate(params) 的調用,此函數的作用是進行 Uni V2 往 Uni V3 遷移的邏輯。邏輯如下圖所示:
6、在 v3Migrator.migrate(params) 中會 burn 掉 V2 的 LP,根據遷移的比例往 V3 的池子繼續添加流動性剩餘的部分轉回去給遷移者,攻擊者傳入的遷移比例是 1,所以在遷移完成後還剩餘 99% 的 WETH 和 100% FEG(因為添加流動性的是假 token 和 WETH),在之後的邏輯會把遷移剩下的代幣轉回去給執行遷移的用戶。所以攻擊者通過遷移不屬於他的 LP 獲得了非法收益。
7、在第二次攻擊中,雖然從調用遷移的參數看出這次傳入的 token0 跟 token1 與 Pair 是一致的,但由於此合約被攻擊的根本原因是遷移函數中攻擊者可以通過鎖定任意 token 對合約中存有的 LP 進行遷移。雖然傳入的 token 與 pair 參數是一致的,但攻擊者還是同樣通過 v3Migrator.migrate(params) 的調用,burn 掉了不屬於他的 USDC-CAW 的 LPToken,並且在設置遷移的數量只有 1%,攻擊者獲得了遷移剩餘的代幣。
8、最後,攻擊者利用同樣的手法將 USDC-TSUKA,WETH-KNDX 的 LP 套走獲利離場。
總結
截止本文發佈時,Team Finance 白帽黑客地址已返還 1340 萬美元數字資產。
本次攻擊事件最根本的原因是由於遷移函數並未對用戶鎖倉的 token 與遷移操作的 token 進行判斷,導致只要任意鎖倉一個 token 就可以對合約中存有的 LP 進行一個遷移操作並且遷移的數量還是由外部指定的。慢霧安全團隊建議對於任何由外部傳入的參數都需要做嚴格的檢查,確保用戶只能對自己資產進行操作。
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。