互联网网站开发服务合同,互动教学平台,如何用api做网站,吉林seo管理平台智能合约漏洞#xff0c;价值 5200 万美元的 Vyper 漏洞攻击原理分析
7 月 30 日#xff0c;因为 Vyper 部分版本中的漏洞#xff0c;导致 Curve、JPEG’d 等项目陆续受到攻击#xff0c;损失总计超过 5200 万美元。
Safful 对此事件第一时间进行了技术分析#xff0c;并…智能合约漏洞价值 5200 万美元的 Vyper 漏洞攻击原理分析
7 月 30 日因为 Vyper 部分版本中的漏洞导致 Curve、JPEG’d 等项目陆续受到攻击损失总计超过 5200 万美元。
Safful 对此事件第一时间进行了技术分析并总结了安全防范手段希望后续项目可以引以为戒共筑区块链行业的安全防线。
一、 事件分析
以 JPEG’d 被攻击为例 攻击者地址0x6ec21d1868743a44318c3c259a6d4953f9978538 攻击者合约0x9420F8821aB4609Ad9FA514f8D2F5344C3c0A6Ab 攻击交易0xa84aa065ce61dbb1eb50ab6ae67fc31a9da50dd2c74eefd561661bfce2f1620c 1攻击者0x6ec21d18创建 0x466B85B4 的合约通过闪电贷向 [Balancer: Vault]借了 80,000 枚 WETH。 2攻击者0x6ec21d18向 pETH-ETH-f0x9848482d流动性池中添加了 40,000 枚 WETH获得 32,431 枚 pETH。 3随后攻击者0x6ec21d18从 pETH-ETH-f0x9848482d流动性池中重复地移除流动性。 4最终攻击者0x6ec21d18获得 86,106 枚 WETH归还闪电贷后获利 6,106 枚 WETH 离场。
二、漏洞分析
1该攻击是典型的重入攻击。对遭受攻击的项目合约进行字节码反编译我们从下图可以发现add_liquidity 和 remove_liquidity 两个函数在进行校验存储槽值时所要验证的存储槽是不一样的。使用不同的存储槽重入锁可能会失效。此时怀疑是 Vyper 底层设计漏洞。 2结合 Curve 官方的推文所说。最终定位是 Vyper 版本漏洞。该漏洞存在于 0.2.15、0.2.16、0.3.0 版本中在重入锁设计方面存在缺陷。我们对比 0.2.15 之前的 0.2.14 以及 0.3.0 之后的 0.3.1 版本发现这部分代码在不断更新中老的 0.2.14 和交心的 0.3.1 版本没有这个问题。 3在 Vyper 对应的重入锁相关设置文件 data_positions.py 中storage_slot 的值会被覆盖。在 ret 中第一次获取锁的 slot 为 0然后再次调用函数时会将锁的 slot 加 1此时的重入锁会失效。 漏洞总结本次攻击事件根本原因是 Vyper 的 0.2.15、0.2.16、0.3.0 版本的重入锁相关设计不合理并且没有进行足够全面的功能测试。导致后期使用这些版本的项目中重入锁失效最终遭受了黑客攻击。
三、安全建议
对于本次攻击事件开发人员在日常开发中应当采取有以下的安全措施 1 项目方需保障功能设计合理并对代码进行全面测试防止遗漏某些功能的测试。 2 项目发版前需要向第三方专业的审计团队寻求技术帮助。