Enthüllen Sie die „Message“-Replay-Angriffe auf EthereumPoW

Erfahren Sie mehr über die jüngsten Angriffe auf EthereumPoW mit Nachrichten-Wiederholungen, die die Schwachstelle in der Omni-Bridge hervorheben und die Notwendigkeit einer chainId-Überprüfung aufzeigen

Enthüllen Sie die „Message“-Replay-Angriffe auf EthereumPoW

Am 16. September 2022 stellten wir fest, dass einige Angreifer durch Wiedereinspielung der Nachricht (d. h. des Calldata) der PoS-Kette auf EthereumPoW (auch bekannt als PoW-Kette) erfolgreich viel ETHW erbeuteten. Die Hauptursache für die Ausnutzung ist, dass die Omni-Brücke auf der PoW-Kette die alte chainId verwendet und nicht korrekt die tatsächliche chainId der Cross-Chain-Nachricht verifiziert.

Wir haben uns umgehend mit dem offiziellen Team von EthereumPoW in Verbindung gesetzt. Das Team war aktiv bereit, Maßnahmen zu ergreifen, und sie versuchten auch, mit der Omni-Brücke zu kommunizieren.

Da jedoch immer mehr Angriffe beobachtet wurden, glaubten wir, dass das Risiko öffentlich gemacht werden sollte, und veröffentlichten am 18. September 2022 den Alarm.

Da es noch einige Missverständnisse bezüglich dieser Angriffe gibt, d. h. die Transaktion und nicht die Nachricht wiederholend. In diesem Bericht möchten wir eine detaillierte Analyse zur Klärung liefern.

Angriffsanalyse

Hier ist ein Beispiel für ausnutzende Transaktionen:

Beachten Sie, dass diese beiden Transaktionen unterschiedlich sind, jedoch sind die Calldata (oder Eingabedaten) dieser beiden Transaktionen exakt gleich*:

0x23caab4900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000011500050000a7823d6f1e31569f51861e345b30c6bebf70ebe7000000000000e0f6f6a78083ca3e2a662d6dd1703c939c8ace2e268d88ad09518695c6c3712ac10a214be5109a655671000927c00101806401867f7a4d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a6439ca0fcba1d0f80df0be6a17220fed9c9038a0000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001482faed2da812d2e5cced3c12b3baeb1a522dc67700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105041c1b1c1c981df6cdaf073d55b78d7f0c7e2b421a569bff677a9464d1d5203672d7b5a3d6af658d14ebc11c26f2547fd0aed01750cca58753a0a79b297bad8a62a71eb6b7ac2099611604eff316e7fe733e9981c1b3890cb04ff9d43612e6f2687227f0226cfa27e4b6cd96a10865e04aa9e0f369dda7548771a094f69bf0a9fa6c27257e22d2b1bbb84beb52ad3966592037b328d352fce375a1fa75cb3fbfd18166f4177a19ad2cc74ce67da68f5ce17b857e6382c3ebf20f76482534135f426f4a74222daa07d9f401cb8baca4339ecd44e285df0e0cb88447a31d08b673cecc67d22c7e6e0ce5afd2ac9439c5a8b68f05077b850cdfdfb79cdaefc5b103bb693609440000000000000000000000000000000000000000000000000000

Es handelt sich lediglich um die Eingabedaten des Aufrufs der Funktion safeExecuteSignaturesWithAutoGasLimit.

Offensichtlich hat der Angreifer (0x82fae) zunächst 200 WETH über die Omni-Brücke der Gnosis-Kette transferiert und dann die gleiche Nachricht auf der PoW-Kette wieder eingespielt und weitere 200 ETHW erhalten. Dadurch konnte der Saldo des auf der PoW-Kette bereitgestellten Chain-Vertrags geleert werden.

Schwachstellenanalyse

Nach der Analyse des Quellcodes der Omni-Brücke stellten wir fest, dass die Logik zur Überprüfung der chainId TATsächlich vorhanden ist.

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

Leider stammt die verwendete chainId in diesem Vertrag aus dem Wert, der im Speicher namens unitStorage gespeichert ist:

    /**
     * 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];
    }

Es handelt sich NICHT um die tatsächliche chainId, die über den CHAINID-Opcode abgefragt wird, wie er in EIP-1344 vorgeschlagen wurde. Dies liegt wahrscheinlich daran, dass der Code ziemlich alt ist (er verwendet Solidity 0.4.24). Der Code funktionierte immer einwandfrei, bis zur Abspaltung der PoW-Kette.

Kurz gesagt, die Hauptursache für die Ausnutzung ist, dass die Omni-Brücke auf der ETHW-Kette die alte chainId verwendet und nicht korrekt die tatsächliche chainId der Cross-Chain-Nachricht verifiziert. Darüber hinaus können ähnliche Probleme in anderen Protokollen bestehen.

Die Auswirkungen

Die unmittelbare Auswirkung ist, dass der oder die Angreifer viel ETHW (und auch andere Token, die der Brücke auf der PoW-Kette gehören) erbeuten und diese auf einigen Marktplätzen (z. B. einigen CEXs) handeln konnten. Dadurch könnte der Preis von ETHW aufgrund der erhöhten Liquidität beeinflusst werden. Daher sollten Benutzer/Investoren beim Handel mit diesen Token auf der PoW-Kette vorsichtig sein.

Schlussfolgerung

Solidity-Entwickler sollten besondere Aufmerksamkeit auf chainIds legen, die vom Vertrag selbst verwaltet werden sollen.

Über BlockSec

BlockSec ist ein Pionier im Bereich der Blockchain-Sicherheit, das 2021 von einer Gruppe weltweit renommierter Sicherheitsexperten gegründet wurde. Das Unternehmen engagiert sich für die Verbesserung der Sicherheit und Benutzerfreundlichkeit der aufstrebenden Web3-Welt, um deren Massenadaption zu ermöglichen. Zu diesem Zweck bietet BlockSec Dienstleistungen für die Prüfung von Smart Contracts und EVM-Ketten, die Phalcon-Plattform für die Entwicklung und proaktive Abwehr von Sicherheitsbedrohungen, die MetaSleuth-Plattform für die Nachverfolgung und Untersuchung von Geldern sowie die MetaDock-Erweiterung für Web3-Entwickler, um effizient im Krypto-Bereich zu agieren.

Bis heute hat das Unternehmen über 300 geschätzte Kunden wie MetaMask, Uniswap Foundation, Compound, Forta und PancakeSwap betreut und in zwei Finanzierungsrunden von namhaften Investoren wie Matrix Partners, Vitalbridge Capital und Fenbushi Capital zehn Millionen US-Dollar erhalten.

Offizielle Website: https://blocksec.com/

Offizieller Twitter-Account: https://twitter.com/BlockSecTeam

Sign up for the latest updates