freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

权限校验漏洞:SushiSwap被攻击事件分析
2023-04-11 09:23:46
所属地 广东省

北京时间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池。

# 区块链 # 区块链安全 # 区块链技术 # 区块链应用 # 区块链交易所
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者