PANews 1月18日消息, Multichain(AnySwap) 此前一個影響6 個跨鏈Token 的關鍵漏洞被利用,導致被盜取445ETH。慢霧安全團隊分析了安全事件經過,
1. 用戶可以通過Multichain 的AnyswapV4Router 合約進行資金跨鏈操作,在進行資金跨鏈時用戶需要將待跨鏈的代幣授權給AnyswapV4Router 合約。
2. AnyswapV4Router 存在anySwapOutUnderlyingWithPermit 函數。此函數允許用戶在鏈下進行授權簽名,鏈上驗證並授權的操作。在此函數中,其會先通過調用用戶傳入的Token 地址的underlying 函數來獲取underlying 代幣地址(正常情況下用戶傳入的Token 地址應該是anyToken,獲取underlying 代幣應該是用戶要跨鏈的資產,如anyUSDT 與USDT),隨後通過underlying 代幣的permit 函數進行簽名檢查與授權操作,授權完成後通過safeTransferFrom 將代幣轉入anyToken 合約中,最後通過_anySwapOut 觸發事件。
3. 但由於anySwapOutUnderlyingWithPermit 函數中未檢查用戶傳入的token 的合法性,且由於WETH 代幣不存在permit 函數的同時實現了fallback 函數,而permit 函數接口也恰好沒有返回值,因此在對WETH 合約的permit 函數進行調用時是不會拋出錯誤的。攻擊者正是利用此問題構造了惡意的Token 地址,使得anySwapOutUnderlyingWithPermit 函數獲取的underlying 為WETH,將先前有將WETH 代幣授權給AnyswapV4Router 合約的用戶的WETH 直接轉移到攻擊者惡意構造的Token 地址中。
此次主要是由於anySwapOutUnderlyingWithPermit 函數未檢查用戶傳入的Token 的合法性,且未考慮並非所有underlying 代幣都有實現permit 函數,導致用戶資產被未授權轉出。慢霧安全團隊建議:應對用戶傳入的參數是否符合預期進行檢查,且在與其他合約進行對接時應考慮好兼容性問題。
參考交易: https://etherscan.io/tx/0xd07c0f40eec44f7674dddf617cbdec4758f258b531e99b18b8ee3b3b95885e7d