Cointime

扫码下载App
iOS & Android

SharkTeam:Vyper漏洞导致Curve和JPEG'd等项目被攻击原理分析

7月30日,因为Vyper部分版本中的漏洞,导致Curve、JPEG'd等项目陆续受到攻击,损失总计超过5200万美元。

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

一、 事件分析

以JPEG'd被攻击为例:

攻击者地址:0x6ec21d1868743a44318c3c259a6d4953f9978538

攻击者合约:0x9420F8821aB4609Ad9FA514f8D2F5344C3c0A6Ab

攻击交易:0xa84aa065ce61dbb1eb50ab6ae67fc31a9da50dd2c74eefd561661bfce2f1620c

(1)攻击者(0x6ec21d18)创建0x466B85B4的合约,通过闪电贷向 [Balancer: Vault]借了80,000 枚WETH。

(2)攻击者(0x6ec21d18)向pETH-ETH-f(0x9848482d)流动性池中添加了40,000枚WETH,获得32,431枚pETH。

(3)随后攻击者(0x6ec21d18)从pETH-ETH-f(0x9848482d)流动性池中重复地移除流动性。

(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) 项目发版前,需要向第三方专业的审计团队寻求技术帮助。

About Us

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

官网:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg

评论

所有评论

推荐阅读

  • 贝莱德 BTC 持仓突破80万枚

    Cointime 报道,4月22日,据 Lookonchain 监测,贝莱德近期持续增持 BTC,持仓达 806,700 枚 BTC(637.3 亿美元),创历史新高。

  • BTC突破79000美元

    Cointime 报道,行情显示,BTC突破79000美元,现报79005.99美元,24小时涨幅达到4.18%,行情波动较大,请做好风险控制。

  • 伊朗尚未决定周五举行谈判

    Cointime 报道,据伊朗塔斯尼姆通讯社:伊朗尚未决定周五举行谈判。

  • 特朗普:最快周五会有与伊朗谈判的“好消息”

    Cointime 报道,4月22日讯,据纽约邮报报道,美国总统特朗普和巴基斯坦方面的人士周三透露,有关美国与伊��进行第二轮谈判的“好消息”可能最快于周五出现。巴基斯坦消息人士称,与伊朗的积极调解努力使未来“36至72小时内”举行更多和平谈判的可能性再度出现。当被问及这一可能的突破时,特朗普通过短信回复道:“有可能!。”此前,特朗普表示他将把该停火协议延长至伊朗领导层能够提出“统一的方案”之时。此后数小时里,巴基斯坦继续通过外交渠道与伊朗进行沟通。一位巴基斯坦人士表示,这一时间安排是基于对相关工作的评估得出的。

  • 消息人士:特朗普愿意再给伊朗3至5天停火时间

    Cointime 报道,美国阿克西奥斯新闻网站22日援引一名美方消息人士的话报道,美国总统特朗普愿意再给伊朗3至5天停火时间,但“这不会是无限期的”。(新华社)

  • ETH跌破2400美元

    Cointime 报道,行情显示,ETH跌破2400美元,现报2399.88美元,24小时涨幅达到3.46%,行情波动较大,请做好风险控制。

  • Robinhood Ventures向OpenAI投资7500万美元

    Cointime 报道,4月22日,据纽约时报:Robinhood Ventures向OpenAI投资7500万美元。

  • 腾讯与阿里巴巴正洽谈以超过200亿美元的估值投资DeepSeek

    Cointime 报道,4月22日,据The Information:腾讯与阿里巴巴正洽谈以超过200亿美元的估值投资DeepSeek。

  • 又有一艘货船遭到伊朗炮击 暂无人员伤亡

    Cointime 报道,4月22日,英国海上贸易行动办公室:已经收到一份关于伊朗以西8海里处发生事件的报告,一艘出港货船的船长报告称遭到射击,目前已在水上停船。船员均安全且人数齐全。暂无船只受损报告。目前已注意到霍尔木兹海峡地区活动频繁,并鼓励船只报告任何可疑活动。(东新社)

  • 过去两周全球市场「历史级别反转」,高盛警告股市胜率仍偏低,警惕乐观预期透支

    估值重置不充分、宏观数据改善滞后于资产定价、战争尾部风险未消,标普 500 未来 12 个月深度回撤概率仍高,当前胜率依然偏低。