Autor: Victory & Lisa

Hintergrund

Am 22. Mai berichtete die Community, dass der Liquiditätsanbieter Cetus im SUI-Ökosystem anscheinend angegriffen wurde, die Liquiditätspooltiefe stark gesunken ist, und mehrere Token-Paare auf Cetus einen Rückgang erlebt haben, wobei der geschätzte Verlust über 230 Millionen Dollar beträgt. Anschließend gab Cetus eine Mitteilung heraus: „In unserem Protokoll wurde ein Vorfall festgestellt. Zur Sicherheit wurde der Smart Contract vorübergehend ausgesetzt. Das Team untersucht derzeit diesen Vorfall. Wir werden bald eine weitere Erklärung zur Untersuchung veröffentlichen.“

Nach dem Vorfall hat das SlowMist-Sicherheitsteam sofort mit der Analyse begonnen und eine Sicherheitswarnung veröffentlicht. Hier ist eine detaillierte Analyse der Angriffsmethoden und der Mittelübertragungen.

(https://x.com/CetusProtocol/status/1925515662346404024)

Verwandte Informationen

Eine der Angriffstransaktionen:

https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x

Adresse des Angreifers:

0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06

Die Adresse des angegriffenen Pools:

0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc

Betroffene Token:

haSUI / SUI

Angriffsanalyse

Der Kern dieses Vorfalls liegt darin, dass der Angreifer Parameter sorgfältig konstruierte, um Überläufe zu erzeugen, die jedoch bei der Überprüfung umgangen werden konnten, und schließlich mit einem extrem kleinen Token-Betrag riesige Liquiditätswerte eintauschen konnte. Hier sind die spezifischen Schritte zur Analyse:

1. Der Angreifer hat zunächst 10.024.321,28 haSUI über ein Flash-Darlehen aufgenommen, was dazu führte, dass der Preis des Pools von 18.956.530.795.606.879.104 auf 18.425.720.184762886 fiel, was einem Rückgang von 99,90 % entspricht.

2. Der Angreifer wählt sorgfältig einen extrem engen Preisbereich für die Eröffnung der Liquiditätsposition:

  • Tick-Untergrenze: 300000 (Preis: 60.257.519.765.924.248.467.716.150)

  • Tick-Obergrenze: 300200 (Preis: 60.863.087.478.126.617.965.993.239)

  • Preisspanne: nur 1,00496621 %

3. Der Kern dieses Angriffs ist, dass der Angreifer erklärt, er wolle eine enorme Liquidität von 10.365.647.984.364.446.732.462.244.378.333.008 Einheiten hinzufügen, aber aufgrund eines Fehlers hat das System nur 1 Token A akzeptiert.

Lassen Sie uns analysieren, warum der Angreifer mit 1 Token eine riesige Liquidität eintauschen konnte. Der Hauptgrund liegt darin, dass die checked_shlw-Funktion im get_delta_a ein Überlaufprüfungsumgehungsproblem aufweist. Der Angreifer hat dies ausgenutzt, was dazu führte, dass das System bei der Berechnung, wie viel haSUI tatsächlich benötigt wird, erheblich abweichen konnte. Da der Überlauf nicht erkannt wurde, hat das System die benötigte Anzahl an haSUI falsch beurteilt, was dazu führte, dass der Angreifer nur sehr wenige Token benötigte, um große Liquiditätswerte zu erhalten und den Angriff erfolgreich durchzuführen.

Wenn das System berechnet, wie viel haSUI benötigt wird, um eine so große Liquidität hinzuzufügen:

Der Schlüssel hier liegt in der schwerwiegenden Mängel der Implementierung der checked_shlw-Funktion. Tatsächlich umgehen alle Eingabewerte, die kleiner als 0xffffffffffffffff << 192 sind, die Überlaufprüfung. Wenn diese Werte jedoch um 64 Bits verschoben werden, überschreitet das Ergebnis den darstellbaren Bereich von u256, wodurch die oberen Daten abgeschnitten werden, was dazu führt, dass das Ergebnis weit unter dem theoretischen Wert liegt. Infolgedessen wird das System bei nachfolgenden Berechnungen die benötigte Anzahl an haSUI unterschätzen.

  • Fehlermaske: 0xffffffffffffffff << 192= sehr große Zahl (ca. 2^256-2^192)

  • Fast alle Eingaben sind kleiner als diese Maske und umgehen die Überlaufprüfung

  • Das eigentliche Problem: Wenn n >= 2^192 ist, wird n << 64 den u256-Bereich überschreiten und abgeschnitten.

Der vom Angreifer konstruierte Mittelwert liquidity * sqrt_price_diff = 6277101735386680763835789423207666908085499738337898853712:

  • Kleiner als die Fehlermaske, umgeht die Überlaufprüfung

  • Aber nach einer Verschiebung um 64 Bits überschreitet es den maximalen Wert von u256, was dazu führt, dass der überlaufene Teil abgeschnitten wird.

  • Was dazu führt, dass das endgültige Ergebnis etwa kleiner als 1 ist, aber da es aufgerundet wird, ergibt sich der Quotient gleich 1.

4. Schließlich entfernt der Angreifer die Liquidität und erzielt riesige Token-Gewinne:

  • Erste Abhebung: 10.024.321,28 haSUI erhalten

  • Zweite Abhebung: 1 haSUI erhalten

  • Dritte Abhebung: 10.024.321,28 haSUI erhalten

5. Der Angreifer gibt den Flash-Darlehen zurück und erzielt einen Nettogewinn von etwa 10.024.321,28 haSUI und 5.765.124,79 SUI, der Angriff ist abgeschlossen.

Reparaturstatus des Projekts

Nach dem Angriff veröffentlichte Cetus einen Reparatur-Patch. Der spezifische Reparaturcode kann hier eingesehen werden: https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebbabb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409.

Die reparierte checked_shlw-Funktion sieht wie folgt aus:

Reparaturhinweise:

  • Korrigieren Sie die falsche Maske 0xffffffffffffffff << 192 auf den richtigen Schwellenwert 1 << 192

  • Ändern Sie die Bedingung von n > mask auf n >= mask

  • Stellen Sie sicher, dass bei einer möglichen Überlaufverschiebung um 64 Bit das Überlaufzeichen korrekt erkannt und zurückgegeben wird

MistTrack-Analyse

Analysen zeigen, dass der Angreifer 0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06 einen Gewinn von etwa 230 Millionen Dollar erzielt hat, einschließlich SUI, vSUI, USDC und anderen Vermögenswerten.

Wir haben festgestellt, dass der Angreifer bereits vor zwei Tagen die Gasgebühren vorbereitet hat und vor dem Angriff einen Versuch unternommen hat, der jedoch gescheitert ist:

Nach dem Gewinn überweist der Angreifer einen Teil der Mittel wie

USDC, SOL, suiETH über Cross-Chain-Brücken wie Sui Bridge, Circle, Wormhole, Mayan an die EVM-Adresse 0x89012a55cd6b88e407c9d4ae9b3425f55924919b:

Davon wurden 5.2341 WBNB über Cross-Chain-Brücken wie Sui Bridge, Circle, Wormhole und Mayan an die BSC-Adresse 0x89012a55cd6b88e407c9d4ae9b3425f55924919b übertragen:

Anschließend überweist der Angreifer einen Wert von

10 Millionen Dollar an Vermögenswerten wurden in Suilend eingezahlt:

Der Angreifer überweist außerdem 24.022.896 SUI an die neue Adresse 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214, die bisher nicht abgehoben wurde:

Glücklicherweise hat Cetus berichtet, dass in Zusammenarbeit mit der SUI-Stiftung und anderen Mitgliedern des Ökosystems bisher 162 Millionen Dollar an gestohlenem Geld auf SUI erfolgreich eingefroren wurden.

(https://x.com/CetusProtocol/status/1925567348586815622)

Als nächstes analysieren wir mit dem On-Chain-Anti-Geldwäsche- und Tracking-Tool MistTrack die Adresse 0x89012a55cd6b88e407c9d4ae9b3425f55924919b, die über Cross-Chain-Mittel verfügt.

Diese Adresse hat auf BSC 5.2319 BNB erhalten, die bisher nicht abgehoben wurde:

Diese Adresse hat auf Ethereum 3.000 USDT, 40.880.000 USDC, 1.771 SOL und 8.130,4 ETH erhalten.

Dabei wurden USDT, USDC und SOL über CoW Swap, ParaSwap usw. in ETH umgetauscht:

Anschließend überweist diese Adresse 20.000 ETH an die Adresse 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16, die bisher nicht abgehoben wurde:

Derzeit hat diese Adresse auf Ethereum ein Guthaben von 3.244 ETH:

MistTrack hat die oben genannten relevanten Adressen in die bösartige Adressdatenbank aufgenommen, und wir werden weiterhin die Kontostände der Adressen überwachen.

Zusammenfassung

Dieser Angriff zeigt die Kraft von mathematischen Überlaufanfälligkeiten. Der Angreifer nutzt präzise Berechnungen, um spezifische Parameter auszuwählen und die Schwachstelle der Funktion checked_shlw auszunutzen, um mit 1 Token einen Wert von mehreren Milliarden an Liquidität zu erhalten. Dies ist ein extrem präziser mathematischer Angriff, und das SlowMist-Sicherheitsteam empfiehlt Entwicklern, alle Grenzbedingungen aller mathematischen Funktionen bei der Entwicklung von Smart Contracts streng zu überprüfen.