Am 08. November 2022 stellten wir fest, dass einige Angriffe erfolgreich dazu führten, Vermögenswerte aus Pools abzuzweigen, die auf dem offiziellen KashiPairMediumRiskV1-Vertrag von Sushi (oder einigen davon abgeleiteten Verträgen) basieren. Nach der Untersuchung stellten wir fest, dass die Hauptursache ein Logikfehler ist, der zur Fehlkalkulation der Token-Preise führt.
Wir kontaktierten sofort das Sicherheitsteam von Sushi, und sie bestätigten unsere Ergebnisse. Das Gute daran war, dass sie Maßnahmen ergriffen, um einige wertvolle, aber anfällige Pools vor Angriffen zu schützen. Außerdem stellten sie Verfahren zur Entschädigung derjenigen bereit, die Gelder durch den Exploit verloren hatten. Daher glauben wir nun, dass es sicher ist, die Details zu der Schwachstelle und den Angriffen offenzulegen. In diesem Bericht möchten wir eine detaillierte Analyse bereitstellen.
Schwachstellenanalyse
Nach der Analyse des Quellcodes des KashiPairMediumRiskV1-Vertrags kommen wir zu dem Schluss, dass dieser Fehler in der borrow-Funktion liegt, die den veralteten exchangeRate verwendet, um den Leih-Share im solvent-Modifikator zu überprüfen. Insbesondere wird die Überprüfung basierend auf dem aktuellen Wert von exchangeRate in der Funktion _isSolvent durchgeführt.


Während in der liquidate-Funktion die Funktion updateExchangeRate ganz am Anfang aufgerufen wird. Daher wird die Überprüfung und Berechnung basierend auf dem aktualisierten Wert durchgeführt.


Offensichtlich könnte dieser Fehler ausgenutzt werden, um eine (riesige) Preisdifferenz zu erzeugen.
Angriffsanalyse
Wir beobachteten zwei Angriffe:
- 0xcf8f242ea83100b6d43e659f7f53a698d304fc6ac2ca6fe79e3e07ee05fefe58: Das Opfer verwendet den KashiPairMediumRiskV1-Vertrag, und der Verlust beträgt rund 9.466 USDC.
- 0x3d163bfbec5686d428a6d43e45e2626a220cc4fcfac7620c620b82c1f2537c78: Das Opfer ist ein Strategievertrag, der CauldronMediumRiskV1 (den Fork von KashiPairMediumRiskV1) verwendet, und der Verlust beträgt rund 110.911 MIM.
Beachten Sie, dass die erste Angriffstransaktion von einem Bot gestartet wurde, der die ursprüngliche Angriffstransaktion vorwegnimmt: 0x7a845d8d2af7919f5b9e22dd5571305cb5347d17986a8402715c1463d515fc18, und die ursprüngliche Angreiferadresse lautet 0xb7ea0f0f8c6df7a61bf024db21bbe85ac5688005.
Hier nehmen wir die erste Angriffstransaktion als Beispiel, die die folgenden Schritte umfasst:
- Entleihen eines Flashloans von 40.900 BADGER und 121.904 USDC von
Balancer. - Hinterlegen von 40.900 BADGER und 113.599 USDC bei
BentoBox. - Aufrufen der Funktion
addCollateralvon kmBADGER/USDC-LINK, um 40.900.000.000.000.000.000.000 Anteile von BADGER zu hinterlegen. - Aufrufen der Funktion
addAssetvon kmBADGER/USDC-LINK, um 112.529.000.000 Anteile von USDC zu hinterlegen. - Aufrufen der Funktion
borrow, um 120.755.095.093 Anteile von USDC zu leihen. - Aufrufen der Funktion
UpdateExchangeRate. - Aufrufen der Funktion
liquidate, um sich selbst zu liquidieren. - Abheben von 40.899 BADGER und 123.006 USDC aus
BentoBox. - Zurückzahlen des Flashloans und Erzielen eines Gewinns von etwa 9466 USDC.
Beachten Sie, dass Schritt 6 nicht notwendig ist, da die
borrow-Funktion dieUpdateExchangeRate-Funktion aufruft.
Die wichtigsten Schritte sind wie folgt:
Es ist nicht schwer zu erkennen, dass der Wert von exchangeRate, der in der borrow-Funktion verwendet wird, vom Wert abweicht, der in der liquidate-Funktion verwendet wird:
- In der
borrow-Funktion: 250.997.938.545.109.237.740.214.705.193 - In der
liquidate-Funktion: 328.266.883.541.864.569.505.752.156.794
Die Auswirkungen
Es gibt Dutzende von Pools (sowohl auf Ethereum als auch auf BSC), die von diesem Fehler betroffen sein könnten. Eine vorübergehende Methode zur Abmilderung dieses Problems ist die Reduzierung oder Eliminierung der Abweichung durch gelegentliches (oder periodisches) Aufrufen der Funktion UpdateExchangeRate. Diese Methode wurde bereits von vielen betroffenen Projekten übernommen, und die entsprechenden Transaktionen sind in der Praxis zu beobachten.
Fazit
Ein DeFi-Projekt sicher zu machen, ist keine leichte Aufgabe. Neben der Code-Prüfung sind wir der Meinung, dass die Community einen proaktiven Ansatz verfolgen sollte, um den Projektstatus zu überwachen und Angriffe zu blockieren, bevor sie überhaupt stattfinden.
Über BlockSec
BlockSec ist ein wegweisendes Blockchain-Sicherheitsunternehmen, das 2021 von einer Gruppe weltweit anerkannter Sicherheitsexperten gegründet wurde. Das Unternehmen hat sich zum Ziel gesetzt, die Sicherheit und Benutzerfreundlichkeit für die aufstrebende Web3-Welt zu verbessern, um deren Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Dienstleistungen für die Prüfung von Smart Contracts und EVM-Ketten an, die Phalcon-Plattform für die sichere Entwicklung und die proaktive Abwehr von Bedrohungen, die MetaSleuth-Plattform für die Nachverfolgung und Untersuchung von Geldern sowie die MetaDock-Erweiterung für Web3-Entwickler, um effizient in der Krypto-Welt zu surfen.
Bis heute hat das Unternehmen über 300 angesehene 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/
Offizielles Twitter-Konto: https://twitter.com/BlockSecTeam



