ERC-6492 部署漏洞:通过预编译合约绕过 isValidSignature

本文为机器翻译
展示原文

在2025年1月23日,ODOS协议OdosLimitOrderRouter合约中存在漏洞被利用,导致在E太Base上损失约50,000美元。该攻击是由于未经验证的用户输入导致的任意调用漏洞,加上使用预编译合约绕过签名检查而造成的。

概述

攻击者合约: https://basescan.org/address/0x22a7da241a39f189a8aec269a6f11a238b6086fc

易受攻击的合约: https://basescan.org/address/0xb6333e994fd02a9255e794c177efbdeb1fe779c7

交易攻击: https://basescan.org/tx/0xd10faa5b33ddb501b1dc6430896c966048271f2510ff9ed681dd6d510c5df9f6

漏洞分析

  • 攻击者主要利用了任意调用漏洞,用于部署ERC6492合约。他们可以利用任意调用来窃取该合约中的代币,使用ERC20.transfer,但必须绕过签名检查IERC1271Wallet(_signer).isValidSignature,这最初似乎是不可能的,因为_signer代码长度必须为零-意味着它不能被执行。但是,某些特殊合约确实具有零代码长度但仍可以执行命令:预编译合约

  • 攻击者使用了0x4身份预编译合约,该合约旨在在内存部分之间复制数据。在使用任意调用窃取代币后,攻击者通过使用0x4合约作为_signer绕过了签名检查。该合约调用IERC1271Wallet(0x4).isValidSignature而不会回滚,成功完成了攻击。

结论

在构建自己的项目时,不要相信任何用户输入。任何给定的参数都必须由代码仔细验证。对不受信任的合约的调用可能会引入几种意外的风险或错误。外部调用可能会触发恶意代码,无论是在目标合约内部还是在其生态系统中。每个外部调用都应被视为潜在的安全风险,必须谨慎处理。

在使用合约代码长度时要非常谨慎,因为这可能会引入与合约构造函数和预编译合约相关的真正问题。使用ERC-6492的协议应该仔细检查以减轻类似的风险。

此外,强烈建议进行安全审计,不仅针对首次发布版本,也针对未来添加的任何新功能。由于升级过程可能会引入各种问题,因此也应该进行彻底的审计。

来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论