1. 首页
  2. 金融科技

Vyper 被黑的时间线和反思

"Trust but verify"(信任,但要核查),不要做“事后诸葛亮”。最厉害的 bug 都是灯下黑。

黑客攻击由于合约的不可变性, 项目会隐性依赖多年前编写的代码, 我们在修复 bug 时,就更需要注意它的潜在影响。

这次的事情是这样发生的。

时间线

在本文中,我会用“我们”来指代所有为这次事件努力的人。我觉得,虽然我最初对发现漏洞作出了一些贡献,但在整个过程中,有无数人提供了更多的帮助。

13:10 UTC pETH/ETH 1100 万美元[1] 流失。

13:19 UTC Michal 在 ETHSecurity 上发布有关 pETH 价格突然暴跌的消息。

Igor 首先注意到不对劲。多亏了他,我们开始深入调查。

但是机器人是如何在remove_liquidity()调用中重入add_liquidity()的呢?

14:01 UTC 就这个问题组建了一个应急小组。

14:07 UTC 我们用我们最喜欢的反编译器[2]反编译了 JPEGd 合约,并注意到重入保护存储槽有点不同。

// Dispatch table entry for add_liquidity(uint256[2],uint256)

label_0057:

if (storage[0x00]) { revert(memory[0x00:0x00]); }

    storage[0x00] = 0x01;

// Dispatch table entry for remove_liquidity(uint256,uint256[2])

label_1AF3:

if (storage[0x02]) { revert(memory[0x00:0x00]); }

    storage[0x02] = 0x01;

14:27 UTC 我们通过一个简单的本地测试合约确认了这个问题。

@external

@nonreentrant("lock")

def test(addr: address) -> bool:

returnTrue


@external

@nonreentrant("lock")

def test2(addr: address) -> bool:

returnFalse

这不仅仅是另一个重入 bug。

此时,我们意识到这将产生多大的影响。封锁消息,我们删除了有关该漏洞的公开消息。

14:37 UTC Wavey 帮助确认了存在漏洞的提交和受影响的版本。我和 Charles 通过手动检查 Vyper 编译器输出也证实了这一点。

黑客攻击这是一场与黑客的竞赛。

值得庆幸的是,人们还将其与只读重入混淆。摘自 “Web3 安全警报” 频道-Alchemix 和 Metronome DAO 也因只读重入 bug 遭到黑客攻击[3]

Michael 发现运行 0.2.15 版本的 alETH 和 msETH 池也存在潜在漏洞。

- 星际资讯

免责声明:投资有风险,入市须谨慎。本资讯不作为投资建议。

下一篇:Curve问题,是DeFi「收益病」的表症
« 上一篇
上一篇:Curve 深陷安全危机,创始人低价甩卖 CRV“求生”
下一篇 »

相关推荐