Magpie Protocol的MagpieRouterV2智能合约存在漏洞,导致22万个钱包中被盗取129,000美元。漏洞已修复,受影响用户已全额补偿。漏洞主要在于未正确验证函数选择器的位置,攻击者通过构造特定数据序列跳过了安全检查。未来将加强合约安全性并引入第三方监控。
2024年4月23日,我们收到了关于MagpieRouterV2智能合约中存在漏洞的警报。
如果你来这里是为了快速了解情况,以下是简短总结:
它原本应该如何工作
我们的路由器MagpieRouterV2本应作为路由器工作,仅此而已。这意味着它不应该有资金,只执行所需的聚合并将代币发送到目标地址。我们使我们的路由器灵活地进行聚合,以便我们可以构建复杂的调用,这有助于我们在几乎任何协议中高效地处理Gas成本(它不需要为每个协议持续更新合约,更重要的是,优化了用户的Gas使用)。
从安全角度来看,最重要的部分之一是函数选择器。函数参数不应该是一个问题,因为合约不应该持有资金,而从用户的角度来看,最重要的事情是在执行结束时必须收到请求资产的最少数量。因此,最关键的问题是如果发起者不是用户自己,则拒绝从批准的资金中进行转账。
发生了什么?
我们构建命令的方式存在一个错误,我们检查选择器的有效性和构建的输入长度,但没有检查选择器的位置。攻击者创建了一个以批准的选择器之一开头的地址。
问题
攻击者构建了一个命令,其中:
1. 创建了一个自定义数据序列:
23b872dd000000000000000000000000dd21d4610dc36792372769758e53aa9e312b14a0000000000000000000000000
2. 下一个序列是从存储中选择的选择器:
e8eda9df
3. 然后创建了另一个自定义数据序列:
edb228aa0cfd2c2f809a4418d0319eb20000000000000000000000000000000000000000000000000000000023c34600
因此,攻击者可以将此地址注入到输入中:
0xe8eda9dfedb228aa0cfd2c2f809a4418d0319eb2
通过这样做,他绕过了我们用来防止此类攻击的InvalidTransferFrom
检查。最后,他使用了他生成的以选择器本身开头的地址,同时他仍然定义了所需的选择器。
攻击者
我们已经联系了攻击者,截至本文撰写时,我们尚未收到回复。如果你正在阅读本文,我们将非常感激能提供丰厚的赏金,并且我们将承诺不披露任何关于你身份的信息。
https://etherscan.io/tx/0x58dfc25f1135710b882e17723a5b5c6e8d990ceceaba93d30ea8583ce7074130
临时修复
将所有选择器重置为0可以防止此利用,因为合约中有一个检查,不会执行任何未定义选择器的自定义调用。
解决方案
我们将在执行命令之前检查最终输入中的选择器,以确保如果它不是由发送者发起的,则无法执行transferFrom
。我们将在交换中添加暂停功能,以防未来发生任何紧急情况。
我们还在考虑将第三方添加到我们的合约中,以监控并在发生任何异常活动时暂停我们的交换。
那些帮助过我们的人
我们想利用这一部分来突出在这个紧急时期帮助过我们的个人和团体。个人感谢SEAL 911的@pcaversaccio和Mudit Gupta在确认问题、测试漏洞和确认修复以便漏洞无法重复方面的努力。再次感谢!
下一步
我们正在整合工具以增强下一版本合约的安全性。
我们正在与Cube3AI、Hypernative等联系,以保护我们合约的下一版本。通过像Cube3AI这样的协议,它将启用RASP(运行时应用程序自我保护),使我们能够实时阻止高风险和欺诈性交易。这也将自动提醒任何人试图进行的漏洞利用或黑客攻击。
此外,我们正在将Web3Shield作为我们的保险合作伙伴,它允许我们的用户通过支付保费来获得保险,保费用他们在桥接资产时交换的代币支付。
社区补偿
最后但同样重要的是,我们最近已经向所有受影响的钱包发放了补偿。我们对我们的社区充满感激,并感谢你们在这段紧急情况下的理解。在此之前,在合约应用修复后,我们将在发布新版本之前与QuillAudits进行审计,因此我们的应用程序将进行维护直到那时。
Magpie Protocol团队还要感谢我们的社区成员,他们让这个项目成为可能。感谢你们在这段紧急情况下的理解和耐心。社区是一个项目的命脉,我们必须确保正确处理,并将继续以安全为优先事项前进。
有关Magpie的更多新闻和更新,请加入我们的Discord、Twitter和Telegram。
- 原文链接: medium.com/@Magpieprotoc...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!