原文來源:慢霧
據 Multichain(AnySwap) 早前消息,2022 年 01 月 18 日,一個影響 6 個跨鏈 Token 的關鍵漏洞正在被利用。慢霧安全團隊進行分析後以簡訊的形式分享給大家。
1. 用戶可以通過 Multichain 的 Anyswap V4 Router 合約進行資金跨鏈操作,在進行資金跨鏈時用戶需要將待跨鏈的 Token 授權給 Anyswap V4 Router 合約。
2. Anyswap V4 Router 存在 anySwap Out Underlying With Permit 函數。此函數允許用戶在鏈下進行授權簽名,鏈上驗證並授權的操作。在此函數中,其會先通過調用用戶傳入的 Token 地址的 underlying 函數來獲取 underlying Token 地址 (正常情況下用戶傳入的 Token 地址應該是 anyToken,獲取 underlying Token 應該是用戶要跨鏈的資產,如 anyUSDT 與 USDT),隨後通過 underlying Token 的 Permit 函數進行簽名檢查與授權操作,授權完成後通過 safeTransfer From 將 Token 轉入 anyToken 合約中,最後通過 _anySwapOut 觸發事件。
3. 但由於 anySwap Out Underlying With Permit 函數中未檢查用戶傳入的 token 的合法性,且由於 WETH Token 不存在 Permit 函數的同時實現了 Fallback 函數,而 Permit 函數接口也恰好沒有返回值,因此在對 WETH 合約的 Permit 函數進行調用時是不會拋出錯誤的。攻擊者正是利用此問題構造了惡意的 Token 地址,使得 anySwap Out Underlying With Permit 函數獲取的 underlying 爲 WETH,將先前有將 WETH Token 授權給 Anyswap V4 Router 合約的用戶的 WETH 直接轉移到攻擊者惡意構造的 Token 地址中。
此次主要是由於 anySwap Out Underlying With Permit 函數爲檢查用戶傳入的 Token 的合法性,且未考慮並非所有 underlying Token 都有實現 Permit 函數,導致用戶資產被未授權轉出。慢霧安全團隊建議:應對用戶傳入的參數是否符合預期進行檢查,且在與其他合約進行對接時應考慮好兼容性問題。
參考交易: https://etherscan.io/tx/0xd07c0f40eec44f7674dddf617cbdec4758f258b531e99b18b8ee3b3b95885e7d
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia