Back to Blog

Revelando los Ataques de Repetición de "Mensajes" en EthereumPoW

Code Auditing
September 19, 2022
4 min read

El 16 de septiembre de 2022, detectamos que algunos atacantes lograron obtener grandes cantidades de ETHW reproduciendo el mensaje (es decir, el calldata) de la cadena PoS en EthereumPoW (también conocida como la cadena PoW). La causa raíz de la explotación es que el puente Omni en la cadena PoW utiliza el chainId antiguo y no verifica correctamente el chainId real del mensaje entre cadenas.

Inmediatamente contactamos al equipo oficial de EthereumPoW. El equipo estuvo activamente dispuesto a tomar medidas, y también intentaron comunicarse con el Puente Omni.

Sin embargo, a medida que se observaron cada vez más ataques en la práctica, consideramos que el riesgo debía notificarse al público, y publicamos la alerta el 18 de septiembre de 2022.

Como aún existe cierta incomprensión sobre estos ataques, es decir, reproducir la transacción en lugar del mensaje. En este informe, nos gustaría proporcionar un análisis detallado para aclararlo.

Análisis del Ataque

A continuación se muestra un ejemplo de transacciones de explotación:

Nótese que estas dos transacciones son diferentes, sin embargo, el calldata (o datos de entrada) de estas dos transacciones son exactamente iguales*:

0x23caab4900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000011500050000a7823d6f1e31569f51861e345b30c6bebf70ebe7000000000000e0f6f6a78083ca3e2a662d6dd1703c939c8ace2e268d88ad09518695c6c3712ac10a214be5109a655671000927c00101806401867f7a4d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a6439ca0fcba1d0f80df0be6a17220fed9c9038a00000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001482faed2da812d2e5cced3c12b3baeb1a522dc67700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105041c1b1c1c981df6cdaf073d55b78d7f0c7e2b421a569bff677a9464d1d5203672d7b5a3d6af658d14ebc11c26f2547fd0aed01750cca58753a0a79b297bad8a62a71eb6b7ac2099611604eff316e7fe733e9981c1b3890cb04ff9d43612e6f2687227f0226cfa27e4b6cd96a10865e04aa9e0f369dda7548771a094f69bf0a9fa6c27257e22d2b1bbb84beb52ad3966592037b328d352fce375a1fa75cb3fbfd18166f4177a19ad2cc74ce67da68f5ce17b857e6382c3ebf20f76482534135f426f4a74222daa07d9f401cb8baca4339ecd44e285df0e0cb88447a31d08b673cecc67d22c7e6e0ce5afd2ac9439c5a8b68f05077b850cdfdfb79cdaefc5b103bb69360944000000000000000000000000000000000000000000000000000000

Son simplemente los datos de entrada de la invocación de la función safeExecuteSignaturesWithAutoGasLimit.

Evidentemente, el atacante (0x82fae) primero transfirió 200 WETH a través del puente omni de la cadena Gnosis, y luego reprodujo el mismo mensaje en la cadena PoW y obtuvo 200 ETHW adicionales. Al hacerlo, el saldo del contrato de la cadena desplegado en la cadena PoW podría ser drenado.

Análisis de Vulnerabilidad

Tras analizar el código fuente del puente Omni, encontramos que SÍ existe la lógica para verificar el chainId.

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

Desafortunadamente, el chainId verificado utilizado en este contrato proviene del valor almacenado en el almacenamiento denominado unitStorage:

    /**
     * Función interna para recuperar el id de cadena de la red de origen
     * @return id de cadena para la red actual
     */
    function sourceChainId() public view returns (uint256) {
        return uintStorage[SOURCE_CHAIN_ID];
    }

NO es el chainId real obtenido a través del opcode CHAINID, que fue propuesto en EIP-1344. Esto se debe probablemente al hecho de que el código es bastante antiguo (usando Solidity 0.4.24). El código funcionó correctamente todo el tiempo hasta la bifurcación de la cadena PoW.

En resumen, la causa raíz de la explotación es que el puente Omni en la cadena ETHW utiliza el chainId antiguo y no verifica correctamente el chainId real del mensaje entre cadenas. Además, problemas similares pueden existir en otros protocolos.

El Impacto

El impacto más directo es que el/los atacante(s) podría(n) obtener grandes cantidades de ETHW (y también otros tokens propiedad del puente en la cadena PoW) y negociarlos en algunos mercados (por ejemplo, algunos CEX). Al hacerlo, el precio del ETHW podría verse afectado debido al aumento de la liquidez. Por lo tanto, los usuarios/inversores deben ser cautelosos respecto al comercio de estos tokens en la cadena PoW.

Conclusión

Los desarrolladores de Solidity deben prestar especial atención cuando traten con el chainId que está diseñado para ser mantenido por el propio contrato.

Acerca de BlockSec

BlockSec es una empresa pionera en seguridad blockchain establecida en 2021 por un grupo de expertos en seguridad de reconocimiento mundial. La empresa está comprometida a mejorar la seguridad y la usabilidad del emergente mundo Web3 con el fin de facilitar su adopción masiva. Con este fin, BlockSec ofrece servicios de auditoría de seguridad para contratos inteligentes y cadenas EVM, la plataforma Phalcon para el desarrollo de seguridad y el bloqueo proactivo de amenazas, la plataforma MetaSleuth para el seguimiento e investigación de fondos, y la extensión MetaDock para que los desarrolladores de web3 naveguen eficientemente en el mundo cripto.

Hasta la fecha, la empresa ha prestado servicios a más de 300 prestigiosos clientes como MetaMask, Uniswap Foundation, Compound, Forta y PancakeSwap, y ha recibido decenas de millones de dólares estadounidenses en dos rondas de financiación de destacados inversores, entre ellos Matrix Partners, Vitalbridge Capital y Fenbushi Capital.

Sitio web oficial: https://blocksec.com/

Cuenta oficial de Twitter: https://twitter.com/BlockSecTeam

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit