找回密码
 立即注册
首页 业界区 业界 20250730 - AnyswapV4Router 授权漏洞: 绕过了不存在的 ...

20250730 - AnyswapV4Router 授权漏洞: 绕过了不存在的 permit 函数

宿遘稠 昨天 20:48
背景

20250730 一名用户在授权并使用 AnyswapV4Router 兑换了 WETH 后,被攻击者通过 AnyswapV4Router 授权漏洞转移走 WETH,前后共计损失 401 WETH。
AnyswapV4Router 是一个支持跨链代币转移、链内代币交换和跨链交换的智能合约。攻击者通过 anySwapOutUnderlyingWithPermit 函数绕过了 WETH 不存在的 permit 检查,通过受损用户的授权转移走 WETH。
攻击者的身份可能是 MEV bot 或是白帽,本文暂时以“攻击者”称呼。


  • 授权交易:https://www.oklink.com/zh-hans/ethereum/tx/0x2653c822153e711e34edf459eeb26e4f36ceb391f6937674726b67e3d954dba5
  • 攻击交易:

    • 0x75316e0aac282c9db5c57d2abe74e29e072466114afb8d70cd8b7115196fca57
    • 0x0abafd9b7691a0b06bc02e6274f5a1b6925c2d97c77f4702ba9d2761d0bd4563
    • 0xae79fdcfd7c36ed654d11b352b495340bd3cc47d0849c35ac6ffa1e4859098ec

Trace 分析

用户一共进行了 3 次 swap 操作,每次 swap 结束后(在同一个区块或下一个区块)所获得的 WETH 就被转走了。
https://etherscan.io/address/0x4527106ae1a661a9d2ffc22575bacdaacb5e51e0#tokentxns
1.png

取其中一个 TX 进行分析:https://app.blocksec.com/explorer/tx/eth/0x75316e0aac282c9db5c57d2abe74e29e072466114afb8d70cd8b7115196fca57

  • 攻击合约:https://etherscan.io/address/0x2d3e6e2af3047f82a8ba9a1596f86e202a49d9c8
2.png


  • 攻击者调用 anySwapOutUnderlyingWithPermit 函数,传入攻击合约作为 token 参数。
  • 在 anySwapOutUnderlyingWithPermit 函数函数中调用 WETH.permit() 函数进行验证。(很奇怪啊,调用的是 permit() 函数,却打印了一个 Deposit 的 event。)
  • 利用被盗用户对 AnyswapV4Router 合约的授权额度转移用户 WETH 资产。
代码分析

在 anySwapOutUnderlyingWithPermit 函数中, 由于 token 参数是攻击者设置的攻击合约,取出来的 _underlying 被设置为了 WETH。转移 _underlying 资产之前,会调用其 permit 函数检查授权情况。
3.png

但是 WETH 代币并没有实现 permit 函数,所以调用 WETH.permit() 函数时,会跳转到其 fallback 函数中。也就是为什么会在 permit() 函数的调用中打印了一个 Deposit 的 event。
4.png

后记

在需要使用一些 DeFi 或者工具合约时,难免需要对合约进行授权。通常出于方便或者节省 gas 考虑,用户会选择直接授权最大值。但是这也随之带来了安全隐患,如果被授权的合约存在可利用的漏洞,那么黑客可以通过授权合约转移你账户内的所有已经授权的资产。
而这次的受损用户正是在授权时对 AnyswapV4Router 合约(及其其他一系列的合约)给了最大的授权额度,这也间接导致了这次事件的发生。
5.png

从资金安全的考虑,用户在使用合约时需要谨慎设置授权金额。最好的习惯就是用多少授权多少(当然有利有弊,这样操作就需要每次多花点 gas 授权了)。提高安全意识,减少资金损失,本期安全小课堂就到此结束了。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册