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