wwww

慢雾:Multichain被黑由于anySwapOutUnderlyingWithPermit函数相关问题

据Multichain(AnySwap) 早前消息,2022 年 01 月 18 日,一个影响 6 个跨链 Token 的关键漏洞正在被利用。慢雾安全团队进行分析后以简讯的形式分享给大家: 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 函数,导致用户资产被未授权转出。慢雾安全团队建议:应对用户传入的参数是否符合预期进行检查,且在与其他合约进行对接时应考虑好兼容性问题。

相关文章