Back to Blog

Jenseits des Marktrisikos: Logikfehler im SushiSwap KashiPairMediumRiskV1 Contract entdeckt

Code Auditing
December 15, 2022
4 min read

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:

  1. 0xcf8f242ea83100b6d43e659f7f53a698d304fc6ac2ca6fe79e3e07ee05fefe58: Das Opfer verwendet den KashiPairMediumRiskV1-Vertrag, und der Verlust beträgt etwa 9.466 USDC.
  2. 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:

  1. Entleihen eines Flashloans von 40.900 BADGER und 121.904 USDC von Balancer.
  2. Einzahlung von 40.900 BADGER und 113.599 USDC in BentoBox.
  3. Aufruf der Funktion addCollateral von kmBADGER/USDC-LINK zur Einzahlung von 40.900.000.000.000.000.000.000.000.000.000 Anteilen von BADGER.
  4. Aufruf der Funktion addAsset von kmBADGER/USDC-LINK zur Einzahlung von 112.529.000.000 Anteilen von USDC.
  5. Aufruf der Funktion borrow, um 120.755.095.093 Anteile von USDC zu leihen.
  6. Aufruf der Funktion UpdateExchangeRate.
  7. Aufruf der Funktion liquidate, um sich selbst zu liquidieren.
  8. Abhebung von 40.899 BADGER und 123.006 USDC aus BentoBox.
  9. Rückzahlung des Flashloans und Erzielung eines Gewinns von ca. 9466 USDC.

Beachten Sie, dass Schritt 6 nicht notwendig ist, da die borrow-Funktion die UpdateExchangeRate-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

Best Security Auditor for Web3

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

BlockSec Audit