返回博客

揭秘以太坊PoW上的“消息”重放攻击

Code Auditing
2022年9月19日
阅读约 3 分钟

2022年9月16日,我们发现一些攻击者通过重放EthereumPoW(又称PoW链)的PoS链消息(即calldata)成功窃取了大量ETHW。 此次漏洞利用的根本原因是PoW链上的Omni桥使用了旧的chainId,未能正确验证跨链消息的实际chainId。

我们立即联系了EthereumPoW的官方团队。 该团队积极表示愿意采取行动,并且他们也尝试与Omni Bridge沟通

然而,随着越来越多的攻击被观察到,我们认为应该将风险通知公众,并于2022年9月18日发布了警报

由于目前仍存在对这些攻击的一些误解,例如认为是重放交易而非消息。在本报告中,我们希望提供详细的分析来澄清这一点。

攻击分析

以下是一个利用交易的示例:

请注意,这两笔交易是不同的,然而,这两笔交易的calldata(或输入数据)是完全相同的

0x23caab4900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000011500050000a7823d6f1e31569f51861e345b30c6bebf70ebe7000000000000e0f6f6a78083ca3e2a662d6dd1703c939c8ace2e268d88ad09518695c6c3712ac10a214be5109a655671000927c00101806401867f7a4d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a6439ca0fcba1d0f80df0be6a17220fed9c9038a0000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001482faed2da812d2e5cced3c12b3baeb1a522dc67700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105041c1b1c1c981df6cdaf073d55b78d7f0c7e2b421a569bff677a9464d1d5203672d7b5a3d6af658d14ebc11c26f2547fd0aed01750cca58753a0a79b297bad8a62a71eb6b7ac2099611604eff316e7fe733e9981c1b3890cb04ff9d43612e6f2687227f0226cfa27e4b6cd96a10865e04aa9e0f369dda7548771a094f69bf0a9fa6c27257e22d2b1bbb84beb52ad3966592037b328d352fce375a1fa75cb3fbfd18166f4177a19ad2cc74ce67da68f5ce17b857e6382c3ebf20f76482534135f426f4a74222daa07d9f401cb8baca4339ecd44e285df0e0cb88447a31d08b673cecc67d22c7e6e0ce5afd2ac9439c5a8b68f05077b850cdfdfb79cdaefc5b103bb693609440000000000000000000000000000000000000000000000000000

这仅仅是调用safeExecuteSignaturesWithAutoGasLimit函数的输入数据。

显然,攻击者(0x82fae)首先通过Gnosis链的Omni桥转移了200 WETH,然后又在PoW链上重放了相同的消息,从而获得了额外的200 ETHW。 这样做,PoW链上部署的桥合约的余额可能会被耗尽。

漏洞分析

在分析了Omni桥的源代码后,我们发现其中确实存在验证chainId的逻辑。

    function _isDestinationChainIdValid(uint256 _chainId) internal returns (bool res) {
        return _chainId == sourceChainId();
    }

不幸的是,此合约中使用的已验证chainId来自名为unitStorage的存储中的值:

    /**
     * Internal function for retrieving chain id for the source network
     * @return chain id for the current network
     */
    function sourceChainId() public view returns (uint256) {
        return uintStorage[SOURCE_CHAIN_ID];
    }

不是通过EIP-1344提出的CHAINID操作码获取的实际chainId。 这可能是因为代码相当老旧(使用了Solidity 0.4.24)。 直到PoW链分叉之前,这段代码一直运行良好。

总之,此次利用的根本原因是ETHW链上的Omni桥使用了旧的chainId,未能正确验证跨链消息的实际chainId。 此外,其他协议也可能存在类似的问题。

影响

直接影响是攻击者可以窃取大量ETHW(以及桥在PoW链上拥有的其他代币),并在某些市场上(例如一些中心化交易所)进行交易。 这样做,ETHW的价格可能会因流动性增加而受到影响。 因此,用户/投资者在PoW链上交易这些代币时应保持谨慎。

结论

Solidity开发者在处理由合约本身维护的chainId时,应给予特别关注。

关于BlockSec

BlockSec是一家开创性的区块链安全公司,成立于2021年,由一群全球知名的安全专家创立。公司致力于增强新兴Web3世界的安全性和可用性,以促进其大规模采用。为此,BlockSec提供智能合约和EVM链安全审计服务,Phalcon平台用于安全开发和主动威胁拦截,MetaSleuth平台用于资金追踪和调查,以及MetaDock扩展,为Web3构建者在加密世界中高效冲浪。

迄今为止,公司已为MetaMask、Uniswap Foundation、Compound、Forta和PancakeSwap等300多家知名客户提供服务,并在两轮融资中获得了来自Matrix Partners、Vitalbridge Capital和Fenbushi Capital等知名投资者的数千万美元投资。

官方网站:https://blocksec.com/

官方Twitter账号:https://twitter.com/BlockSecTeam

订阅最新动态
Web3攻击面:渗透测试概览

Web3攻击面:渗透测试概览

加密机构承载所有传统攻击面,并叠加资金处理链。本文提供系统的实用抽象:应用、授权与签名、区块链交互、基础设施四组件模型,说明各自职责、代表实现及继承的攻击面,并将web3特有覆盖细分为五大攻击面:生产与自动化运维、签名意图、审批与提现链、资金逻辑及链上交易与已部署合约。

损失约2300万美元:Cosmos EVM与Moonwell遭利用攻击 | BlockSec Weekly
Security Insights

损失约2300万美元:Cosmos EVM与Moonwell遭利用攻击 | BlockSec Weekly

在报告期(2026/08/22-2026/08/30)内,我们统计5起区块链安全事件,损失约2270万美元;Tectonic被盗约7400万-1.195亿美元,因Cronos回滚至攻击前状态而多数被抹除。重点是六链Cosmos EVM漏洞系列(实现约570万美元),经TAC Chain溯源,共享余额同步漏洞串联下溢与上溢耗尽质押池。报告还分析了Moonwell的抵押品核算与预言机价格操纵组合攻击、Tectonic的预言机价格与凭证代币汇率操纵低流动性抵押品、Ajna清算业务逻辑缺陷,以及Solana上的Rain Card Contract Exploit Series(Ed25519签名验证绕过,涉及Avici、Tria等)。

什么是区块链渗透测试?定义与边界
Security Services

什么是区块链渗透测试?定义与边界

区块链渗透测试尚无公认定义,常与审计、扫描、赏金测试混淆。本文提出工作定义:在约定范围与规则下,对运行系统进行对抗性实测,验证可利用路径与控制链;并指出web3新增的资金处理威胁模型,其关键组合缺口在链下到链上的交接。随后梳理该链条的五项可测能力,并将相关目标分流至代码审计、钱包安全审计、web3安全测试、扫描与赏金测试。

Web3 最佳安全审计方

在上线之前验证设计、代码与业务逻辑,对标业内最高安全标准。

BlockSec 审计