Back to Blog

Раскрытие атак повторного воспроизведения «сообщения» в EthereumPoW

Code Auditing
19 сентября 2022 г.
3 min read

16 сентября 2022 года мы обнаружили, что злоумышленники успешно похитили большое количество ETHW, воспроизводя сообщения (т.е. calldata) из сети PoS в EthereumPoW (также известную как сеть PoW). Первопричина эксплойта заключается в том, что Omni bridge в сети PoW использует старый chainId и не проверяет должным образом фактический chainId кроссчейн-сообщения.

Мы немедленно связались с официальной командой EthereumPoW. Команда проявила готовность принять меры, а также попыталась связаться с Omni Bridge.

Однако, поскольку случаи атак продолжались, мы решили, что общественность должна быть уведомлена о рисках, и опубликовали предупреждение 18 сентября 2022 года.

Поскольку до сих пор существует некоторое непонимание сути этих атак (а именно воспроизведение транзакции вместо сообщения), в этом отчете мы хотели бы предоставить подробный анализ для прояснения ситуации.

Анализ атаки

Вот пример транзакций, использованных при эксплойте:

Обратите внимание, что эти две транзакции различаются, однако calldata (или входные данные) этих двух транзакций абсолютно идентичны:

0x23caab4900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000011500050000a7823d6f1e31569f51861e345b30c6bebf70ebe7000000000000e0f6f6a78083ca3e2a662d6dd1703c939c8ace2e268d88ad09518695c6c3712ac10a214be5109a655671000927c00101806401867f7a4d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a6439ca0fcba1d0f80df0be6a17220fed9c9038a00000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001482faed2da812d2e5cced3c12b3baeb1a522dc67700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105041c1b1c1c981df6cdaf073d55b78d7f0c7e2b421a569bff677a9464d1d5203672d7b5a3d6af658d14ebc11c26f2547fd0aed01750cca58753a0a79b297bad8a62a71eb6b7ac2099611604eff316e7fe733e9981c1b3890cb04ff9d43612e6f2687227f0226cfa27e4b6cd96a10865e04aa9e0f369dda7548771a094f69bf0a9fa6c27257e22d2b1bbb84beb52ad3966592037b328d352fce375a1fa75cb3fbfd18166f4177a19ad2cc74ce67da68f5ce17b857e6382c3ebf20f76482534135f426f4a74222daa07d9f401cb8baca4339ecd44e285df0e0cb88447a31d08b673cecc67d22c7e6e0ce5afd2ac9439c5a8b68f05077b850cdfdfb79cdaefc5b103bb69360944000000000000000000000000000000000000000000000000000000

Это просто входные данные вызова функции safeExecuteSignaturesWithAutoGasLimit.

Очевидно, что злоумышленник (0x82fae) сначала перевел 200 WETH через Omni Bridge в сети Gnosis, а затем воспроизвел то же самое сообщение в сети PoW и получил дополнительные 200 ETHW. Таким образом, баланс контракта моста, развернутого в сети PoW, мог быть исчерпан.

Анализ уязвимости

Проанализировав исходный код Omni bridge, мы обнаружили, что логика проверки 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];
    }

Это НЕ фактический chainId, полученный через опкод CHAINID, который был предложен в EIP-1344. Вероятно, это связано с тем, что код довольно старый (используется Solidity 0.4.24). Код отлично работал всё время до момента форка сети PoW.

Короче говоря, первопричина эксплойта заключается в том, что Omni bridge в сети ETHW использовал старый chainId и не проверял должным образом фактический chainId кроссчейн-сообщения. Кроме того, подобные проблемы могут существовать и в других протоколах.

Влияние

Прямое последствие заключается в том, что злоумышленник(и) могли похитить большое количество ETHW (а также другие токены, принадлежащие мосту в сети PoW) и торговать ими на некоторых площадках (например, на некоторых CEX). Таким образом, цена ETHW могла пострадать из-за увеличения ликвидности. Следовательно, пользователям/инвесторам следует проявлять осторожность при торговле этими токенами в сети PoW.

Заключение

Разработчикам на Solidity следует уделять особое внимание работе с chainId, который поддерживается самим контрактом.

О компании BlockSec

BlockSec — передовая компания в сфере безопасности блокчейна, основанная в 2021 году группой всемирно признанных экспертов по безопасности. Компания стремится повысить безопасность и удобство использования развивающегося мира Web3 для содействия его массовому внедрению. Для этого BlockSec предоставляет услуги по аудиту безопасности смарт-контрактов и EVM-сетей, платформу Phalcon для разработки систем безопасности и проактивной блокировки угроз, платформу MetaSleuth для отслеживания средств и расследований, а также расширение MetaDock для эффективной навигации разработчиков Web3 в криптовалютном мире.

На сегодняшний день компания обслужила более 300 уважаемых клиентов, таких как MetaMask, Uniswap Foundation, Compound, Forta и PancakeSwap, и получила десятки миллионов долларов США в двух раундах финансирования от выдающихся инвесторов, включая Matrix Partners, Vitalbridge Capital и Fenbushi Capital.

Официальный сайт: https://blocksec.com/

Официальный аккаунт в Twitter: https://twitter.com/BlockSecTeam

Sign up for the latest updates
Потери около 5,57 млн USD: атаки на X100 Freezer и NEM | Еженедельный обзор BlockSec
Security Insights

Потери около 5,57 млн USD: атаки на X100 Freezer и NEM | Еженедельный обзор BlockSec

Этот еженедельный отчёт охватывает два инцидента безопасности в сетях Ethereum и BNB Chain за период 19.10.2026–25.10.2026. В нём рассматриваются захват управления X100 Freezer, профинансированный с помощью флеш-кредита, и ошибка при расчёте налога, затронувшая пул ликвидности токена NEM в сети BNB Chain. Оценочные потери в рамках отчёта составляют в общей сложности около 5,57 млн USD: ~4,75 млн USD по рассматриваемой транзакции X100 и ~820 тыс. USD в результате инцидента с пулом NEM. В эту сумму не входят отдельно опубликованные данные о последующих выводах средств из X100.

Потери на сумму около 3,87 млн USD: взломы Autheo Network и UNCX | Еженедельный обзор BlockSec
Security Insights

Потери на сумму около 3,87 млн USD: взломы Autheo Network и UNCX | Еженедельный обзор BlockSec

В этом еженедельном отчёте рассматриваются 3 инцидента безопасности за период 12.10.2026–18.10.2026. Общий оценочный ущерб составил около 3,87 млн USD. Ущерб Autheo Network от компрометации закрытого ключа составил примерно 1,76 млн USD, Qubic Wallet потерял примерно 1,30 млн USD из-за ненадёжной генерации seed, а ошибка учёта в контрактах Smart Token Vesting V2 сети UNCX Network на Ethereum, BNB Chain, Base и Robinhood Chain привела к ущербу примерно в 807 тыс. USD. В подробном анализе инцидента UNCX объясняется, как некорректный расчёт совокупного количества долей смешивал транши вестинга, созданные при разных соотношениях токенов и долей, и позволял выводить из общих пулов больше положенного.

Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec
Security Insights

Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec

В Ethereum за 05–11.10.2026 произошёл 1 инцидент; ущерб — около $542 тыс. Атакующий передал вредоносный адаптер функции MakerDaoBot без контроля доступа. Получив права на балансы MakerDAO, адаптер закрыл 4 аукциона ETH-A, конвертировал 200 ETH-A в WETH; атакующий вывел 200 ETH.

Best Security Auditor for Web3

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

BlockSec Audit