Am 08.11.2022 stellten wir fest, dass einige Angriffe erfolgreich Vermögenswerte aus Pools entzogen haben, die auf dem offiziellen KashiPairMediumRiskV1-Vertrag von Sushi (oder einigen davon abgeleiteten Verträgen) aufbauen. Nach der Untersuchung stellten wir fest, dass die Grundursache in einem Logikfehler liegt, der zu einer 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 durch den Exploit Gelder verloren hatten. Daher glauben wir nun, dass es sicher ist, die Details der Schwachstelle und der Angriffe offenzulegen. In diesem Bericht möchten wir eine detaillierte Analyse liefern.
Schwachstellenanalyse
Nach der Analyse des Quellcodes des KashiPairMediumRiskV1-Vertrags kommen wir zu dem Schluss, dass sich dieser Fehler in der borrow-Funktion befindet, die den veralteten exchangeRate zur Überprüfung des Borrow-Anteils im solvent-Modifier verwendet. Insbesondere wird die Überprüfung basierend auf dem aktuellen Wert von exchangeRate in der _isSolvent-Funktion durchgeführt.


Während in der liquidate-Funktion die updateExchangeRate-Funktion ganz am Anfang aufgerufen wird. Daher erfolgen die Überprüfung und Berechnung auf Basis des aktualisierten Wertes.


Offensichtlich könnte dieser Fehler ausgenutzt werden, um zu einer (riesigen) Preisdifferenz zu führen.
Angriffsanalyse
Wir beobachteten zwei Angriffe:
- 0xcf8f242ea83100b6d43e659f7f53a698d304fc6ac2ca6fe79e3e07ee05fefe58: Das Opfer verwendet den KashiPairMediumRiskV1-Vertrag, und der Verlust beträgt etwa 9.466 USDC.
- 0x3d163bfbec5686d428a6d43e45e2626a220cc4fcfac7620c620b82c1f2537c78: Das Opfer ist ein Strategievertrag, der CauldronMediumRiskV1 (die Abspaltung von KashiPairMediumRiskV1) verwendet, und der Verlust beträgt etwa 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 aus folgenden Schritten besteht:
- Entleihen eines Flashloans von 40.900 BADGER und 121.904 USDC von
Balancer. - Einzahlung von 40.900 BADGER und 113.599 USDC in
BentoBox. - Aufruf der Funktion
addCollateralvon kmBADGER/USDC-LINK zur Einzahlung von 40.900.000.000.000.000.000.000.000.000.000 Anteilen von BADGER. - Aufruf der Funktion
addAssetvon kmBADGER/USDC-LINK zur Einzahlung von 112.529.000.000 Anteilen von USDC. - Aufruf der Funktion
borrow, um 120.755.095.093 Anteile von USDC zu leihen. - Aufruf der Funktion
UpdateExchangeRate. - Aufruf der Funktion
liquidate, um sich selbst zu liquidieren. - Abhebung von 40.899 BADGER und 123.006 USDC aus
BentoBox. - Rückzahlung des Flashloans und Erzielung eines Gewinns von ca. 9466 USDC.
Beachten Sie, dass Schritt 6 nicht notwendig ist, da die
borrow-Funktion dieUpdateExchangeRate-Funktion aufruft.
Die wichtigsten Schritte sind folgende:
Es ist nicht schwer zu erkennen, dass der Wert von exchangeRate, der in der borrow-Funktion verwendet wird, von dem 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 vorläufige Methode zur Abmilderung dieses Problems besteht darin, die Abweichung durch gelegentliches (oder periodisches) Aufrufen der UpdateExchangeRate-Funktion zu reduzieren oder zu eliminieren. Diese Methode wurde bereits von vielen betroffenen Projekten übernommen, und die entsprechenden Transaktionen können in freier Wildbahn beobachtet werden.
Fazit
Die Sicherung eines DeFi-Projekts ist keine einfache Aufgabe. Neben der Code-Prüfung sollten wir unserer Meinung nach auf proaktive Weise den Projektstatus überwachen und Angriffe 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 aufkommende Web3-Welt zu verbessern, um deren Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Auditing-Dienste für Smart Contracts und EVM-Ketten, die Phalcon-Plattform zur proaktiven Entwicklung und Abwehr von Bedrohungen, die MetaSleuth-Plattform zur Nachverfolgung und Untersuchung von Geldern sowie die MetaDock-Erweiterung für Web3-Entwickler zum effizienten Surfen in der Kryptowelt an.
Bislang hat das Unternehmen über 300 namhafte 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 zweistellige Millionenbeträge erhalten.
Offizielle Website: https://blocksec.com/
Offizieller Twitter-Account: https://twitter.com/BlockSecTeam



