权限校验漏洞:SushiSwap被攻击事件分析

  • SharkTeam
  • 更新于 2023-04-11 09:27
  • 阅读 2750

北京时间2023年4月9日,SushiSwap的RouteProcessor2合约存在权限校验漏洞,攻击者已获利约330万美元。SharkTeam对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。一、事件分析此次攻击包含了多笔交易,以

北京时间2023年4月9日,SushiSwap 的 RouteProcessor2合约存在权限校验漏洞,攻击者已获利约330万美元。

SharkTeam对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

一、事件分析

此次攻击包含了多笔交易,以其中一笔交易为例进行分析。

攻击者地址:

0x719cdb61e217de6754ee8fc958f2866d61d565cf

攻击合约:

0x000000c0524f353223d94fb76efab586a2ff8664

漏洞合约:

0x044b75f554b886A065b9567891e45c79542d7357

攻击交易:

0xea3480f1f1d1f0b32283f8f282ce16403fe22ede35c0b71a732193e56c5c45e8

该攻击交易的执行流程:

(1)首先,攻击者(0x719cdb61)先调用了漏洞合约(0x044b75f5)的 processRoute 函数。

1681175794\_6434b4f21b700a10fcec2.png!small

(2)在 processRoute 函数中,通过输入参数route判断调用 processMyERC20。

1681175811\_6434b503f21fe9447e1d5.png!small

(3)攻击者所控制的stream参数,通过processMyERC20 -> distributeAndSwap -> swap 等一系列函数调用,最终调用了swapUniV3 函数。

1681175819\_6434b50bd231ff2a4d01d.png!small

(4)在swapUniV3 函数中,pool 值是由攻击者控制的 stream 参数值解析而成,实际就是攻击合约。解析后的 pool 值赋给lastCalledPool,此时的lastCalledPool 就是攻击者控制的恶意值(即攻击合约),然后调用了pool即攻击合约自定义的swap函数。

1681175825\_6434b5112afa51e360f6f.png!small

(5)通过swap函数回调了漏洞合约中的uniswapV3SwapCallback函数,成功提取100枚ETH。

1681175832\_6434b518bedc1d617bef8.png!small

漏洞分析:

在swapUniV3函数中,pool值来自于攻击者恶意构造的stream参数值,实际为攻击合约,然后调用了攻击合约中自定义的swap函数。

1681175839\_6434b51f0c410d4c046db.png!small

在swap函数中又回调了漏洞合约中的uniswapV3SwapCallback函数。

1681175845\_6434b5259c94214ee4a67.png!small

由于lastCalledPool在swapUniV3函数中设置为了pool值(即攻击合约地址),在回调uniswapV3SwapCallback函数时,msg.sender == lastCalledPool为true,直接绕过了对msg.sender是否是真实的pool地址的权限校验,并且通过参数构造token进行传参,窃取了账户授权给漏洞合约过多尚未使用的WETH。然后将lastCalledPool设置为常量IMPOSSIBLE_POOL_ADDRESS,从而通过了swapUniV3函数中最后的对lastCalledPool==IMPOSSIBLE_POOL_ADDRESS的require校验。

漏洞总结:

本次事件根本原因是漏洞合约(RouteProcessor2)未对回调调用者进行是否是uniswapV3 factory部署的V3池检查,只是检查是否是原来lastCalledPool 的值,导致了账户授权给RouteProcessor2合约过多尚未使用的资金被盗取。

二、安全建议

针对本次攻击事件,我们在开发过程中应遵循以下注意事项:

(1)在用户与合约交互的每个业务模块中,应遵循最小权限原则,合理授权单笔交易实际数量,避免过多金额授权导致账户资金损失。

(2)在类似uniswapV3SwapCallback回调函数中,应当验证调用者是否是uniswapV3 factory部署的V3池。

About Us

SharkTeam的愿景是全面保护Web3世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如Polkadot、Moonbeam、polygon、OKC、Huobi Global、imToken、ChainIDE等建立长期合作关系。

1681175780\_6434b4e44d6813eb176f6.png!small

Twitter:<https://twitter.com/sharkteamorg>

Discord:<https://discord.gg/jGH9xXCjDZ>

Telegram:<https://t.me/sharkteamorg>

更多区块链安全咨询与分析,点击下方链接查看

D查查|链上风险核查https://app.chainaegis.com

  • 原创
  • 学分: 20
  • 分类: 安全
  • 标签:
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
该文章收录于 智能合约安全
438 订阅 172 篇文章

0 条评论

请先 登录 后评论
SharkTeam
SharkTeam
0xC0f5...8888
SharkTeam是领先的Web3安全服务提供商,提供智能合约审计、链上分析和应急响应服务。 Web: https://www.sharkteam.org Telegram: https://t.me/sharkteamorg Twitter:https://twitter.com/sharkteamorg