Zurück zum Blog

Sicherheitsvorfall bei Seal Finance

Code Auditing
3. Januar 2021
5 Min. Lesezeit

Am 30. November entdeckte unser Sicherheitssystem zur Überwachung von Vorfällen ThunderForecast einen Angriff auf das Loopring-Protokoll (Blog in EN, CN) durch die Analyse von Transaktionsverläufen auf Ethereum. Als Schlussfolgerung lässt sich sagen, dass die Ursache dieses Angriffs der fehlende Zugriffsschutz für die Funktion sellTokenForLRC ist. Der Angreifer nutzte 80,97 ETH, was zum damaligen Preis 48.849,2 USD entsprach.

Am 11. Dezember 2020 meldete unser Überwachungssystem ThunderForecast eine Reihe von Transaktionen mit einer ungewöhnlichen Handelsrate. Anschließend nutzten wir das von unserem Forschungsteam entwickelte EthScope-System, um diese Transaktionen zu analysieren und stellten fest, dass es sich um einen Angriff handelte, der eine Schwachstelle des Seal Finance Protocol für Arbitrage-Zwecke ausnutzte.

Was ist Seal?

Im Whitepaper von Seal heißt es: "SEAL – Ein experimentelles Protokoll, das als Vermittler zwischen wichtigen DeFi-Protokoll-Tokens dient und dadurch eine tiefere Liquidität zwischen ihnen schafft." Bis heute gibt es über 10 Liquiditätspools, die Seal mit anderen bekannten Token verbinden (wie z. B. UNI, YFI, USDT, SNX usw.). Um den Bonus zu erhalten, muss der Investor LP-Tokens in den SEAL-Belohnungsvertrag einzahlen und die breed()-Funktion im Farm-Vertrag auslösen, um neue SEAL-Tokens zu erzeugen. Der Farm-Vertrag ist in jedem Seal-Pool bereitgestellt und die Funktion breed() im Vertrag wird verwendet, um neue Seal-Tokens auszugeben. Gemäß der Einstellung von breed() gibt sie zusätzlich 1,6 % des Seal-Tokens aus. Darüber hinaus werden 0,8 % der ausgegebenen Seal-Tokens gegen einen anderen Token getauscht, der mit den restlichen 0,8 % der ausgegebenen Seal-Tokens als Liquidität in den Pool eingezahlt wird. Da jedoch kein Zugriffsschutz für die breed()-Funktion vorgesehen ist, kann jeder diese Funktion auslösen, und dieses primitive Design wird zur Ursache des gemeldeten Angriffs.

Im Folgenden ist der bestätigte Quellcode der Funktion breed() aufgeführt:

function breed() external {
	require(now / 1 days > today);
	today += 1;
 
	uint256 sealPairAmount = seal.balanceOf(address(cSeal));
	uint256 tokenPairAmount = token.balanceOf(address(cSeal));
	uint256 newSeal = sealPairAmount.mul(spawnRate).div(1e18);
	uint256 amount = UniswapV2Library.getAmountOut(newSeal, sealPairAmount, tokenPairAmount);
 
	seal.mint(address(cSeal), newSeal);
	if(address(seal) < address(token))
    	cSeal.swap(0, amount, address(this), "");
	else
    	cSeal.swap(amount, 0, address(this), "");
	token.transfer(address(cSeal), amount);
	seal.mint(address(cSeal), newSeal);
	cSeal.mint(address(this));
}

Details

Wir beginnen nun damit, weitere Details dieses Angriffs aufzudecken, beginnend mit einer Angriffstransaktion hier. Bei dieser Transaktion wiederholte der Angreifer die Angrifflogik für 10 Seal-Pools, um seinen Gewinn zu maximieren. Für die folgende Analyse konzentrieren wir uns auf den Angriff im Seal-SNX-Pool.

An dem Angriff sind drei Schritte beteiligt:

  • Schritt 1: Tausch von 1.084 Seal gegen 2.787 SNX im Seal-SNX-Pool. Der Wechselkurs beträgt: 1 Seal = 2,57 SNX.
  • Schritt 2: Auslösen der breed()-Funktion im Farm-Vertrag. Diese Funktion gibt 13,08 Seal aus und tauscht sie gegen 10,20 SNX. Der Wechselkurs beträgt nun: 1 SNX = 0,78 Seal. Der Grund dafür ist, dass die meisten SNX im Pool gegen Seal getauscht werden und dies zu einer enormen Differenz zwischen SNX und Seal in Bezug auf die Menge führt. Dann, basierend auf dem Preisberechnungsalgorithmus von Uniswap, wird SNX im Pool extrem wertvoll (Preissteigerung um mehr als das 3-fache).
  • Schritt 3: Tausch von 2787 SNX gegen 1100 Seal im Seal-SNX-Pool. Da der Tausch den Preis von SNX weiter erhöht, arb-t der Angreifer mehr Seal-Tokens heraus (zusätzlich 16 Seal).

Um den Verlust weiter zu messen und zu bestätigen, haben wir die breed()-Funktion unter dem Blockzustand vor dem Angriff mit unserem System EthScope wiederholt. Als Ergebnis gab Farm 18 zusätzliche Seal-Tokens aus im Vergleich zu einem normalen Aufruf. Der Angreifer nahm 16 Seal und nur 2 Seal verblieben im Pool.

Gewinn & Verlust

Bei dieser Transaktion erzielte der Angreifer einen Gesamtgewinn von 175 Seal.

Das Ausmaß des Angriffs

Bis zum 13. Dezember 2020 wurden 3 bösartige Verträge (0x49f93e, 0x8b3710, 0x0f20b6) auf der Kette bereitgestellt und 22 Transaktionen erfolgreich ausgeführt, um 4.247 Seal-Tokens zu verpacken. Basierend auf dem damaligen Preis verdiente der Angreifer etwa 58.467 USD, indem er die Schwachstelle des Seal-Protokolls ausnutzte. Es ist erwähnenswert, dass die Schwachstelle des Seal-Protokolls immer noch angegriffen wird!!!

Darüber hinaus haben wir durch die Analyse des Flusses der erhaltenen Seal-Tokens festgestellt, dass etwa 900 Seal-Tokens in DEX eingezahlt und der Rest auf 6 verschiedene Adressen verteilt wurden. Wie in der folgenden Abbildung gezeigt, gehören diese Adressen neben Seal Finance und dem Liquiditätspool in Uniswap V2 zu den Top-Haltern von Seal-Tokens.

Das Ende

Mit der Entwicklung des DeFi-Ökosystems in Ethereum tauchen nach und nach verschiedene Sicherheitsprobleme auf. Tatsächlich verursacht die Ursache, die Zugriffskontrolle, hinter dem Angriff erhebliche Verluste (58.467 USD) bei Seal, indem bis zum 13. Dezember 2020 22 Transaktionen durchgeführt wurden.

Update (04.01.2021)

Nach dem ersten Angriff am 30.11.2020 hat der Angreifer einen dritten Angriffskontrakt bereitgestellt und fünf Angriffe gestartet. Der letzte Angriff fand am 24.12.2020 statt und die erhaltenen Seal-Tokens wurden an diese Adresse übertragen. Während dieses Prozesses erhielt der Angreifer 6.021 Seal-Tokens.

Zeitplan:

  • 11.12.2020: Verdächtige Transaktionen wurden gefunden
  • 12.12.2020: Analyse abgeschlossen
  • 13.12.2020: An Seal Finance gemeldet
  • 03.01.2021: Details wurden veröffentlicht
  • 03.01.2021: CVE-2021–3006 wurde zugewiesen

Über BlockSec

BlockSec ist ein führendes Blockchain-Sicherheitsunternehmen, das 2021 von einer Gruppe weltweit renommierter Sicherheitsexperten gegründet wurde. Das Unternehmen hat sich der Verbesserung der Sicherheit und Benutzerfreundlichkeit für die aufstrebende Web3-Welt verschrieben, um deren Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Dienstleistungen für die Sicherheitsprüfung von Smart Contracts und EVM-Chains an, die Phalcon-Plattform für die proaktive Sicherheitsentwicklung und Bedrohungsabwehr, die MetaSleuth-Plattform für die Nachverfolgung von Geldern und Ermittlungen sowie die MetaSuites-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 zweistellige Millionenbeträge erhalten.

Offizielle Website: https://blocksec.com/

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

Für die neuesten Informationen anmelden
Über die sichere Speicherung hinaus, Teil 2: Wallet-Kryptografie sicher implementieren
Security Insights

Über die sichere Speicherung hinaus, Teil 2: Wallet-Kryptografie sicher implementieren

Kann ein Angreifer einen privaten Schlüssel rekonstruieren, ohne dessen geschützte Kopie auszulesen? Teil 2 von Beyond Secure Storage untersucht sechs Vorfälle, bei denen schwache Zufallszahlen, Entropieverlust oder Fehler bei Signatur-Nonces Schlüssel vorhersagbar oder rekonstruierbar machten. Daraus leitet er Anforderungen an die Implementierung der Schlüsselerzeugung und des Signierens ab und erläutert anschließend, wie Zahlungsinstitute deren Einhaltung durch Code-Reviews und Tests des produktiv eingesetzten Systems überprüfen können.

Über sichere Speicherung hinaus, Teil 1: Sichere Zahlungs- und Signaturabläufe gestalten
Security Insights

Über sichere Speicherung hinaus, Teil 1: Sichere Zahlungs- und Signaturabläufe gestalten

Wie kann ein nicht autorisierter Vorgang eine gültige Signatur erhalten, ohne dass der Angreifer den privaten Schlüssel stiehlt? Teil 1 von Beyond Secure Storage untersucht anhand von Vorfällen bei Bitget, Bybit und Binance Autorisierungsfehler bei Zahlungsanforderungen, der Erstellung, Signierung und Ausführung von Transaktionen sowie bei deren Abwicklung. Daraus leitet er Gestaltungsprinzipien ab, um nicht autorisierte Vorgänge zu verhindern und Verluste zu begrenzen. Anschließend erläutert er, wie Überprüfungen, Audits, Penetrationstests und Übungen diese Schutzmaßnahmen verifizieren können.

NEAR-Intents-Exploit: Fehler bei der Rückerstattung und Lehren für die Sicherheit
Security Insights

NEAR-Intents-Exploit: Fehler bei der Rückerstattung und Lehren für die Sicherheit

Beim Exploit von NEAR Intents wurden überdimensionierte Rückerstattungsereignisse genutzt, um interne Guthaben zu erhalten, nachdem die eingezahlten Vermögenswerte zurückgegeben worden waren. Diese Analyse rekonstruiert den Ablauf der Receipts und sieben Auszahlungen auf der BNB Chain in Höhe von insgesamt 3.865.021 USDT. Sie unterscheidet diese Mittelabflüsse von der vom Projekt gemeldeten vollständigen Rückgewinnung der Mittel und erläutert Sicherheitsaspekte bei der Entwicklung und Prüfung von NEAR-Smart-Contracts.

Der beste Sicherheitsauditor für Web3

Lassen Sie Design, Code und Geschäftslogik vor dem Launch prüfen. Nach den höchsten Sicherheitsstandards der Branche.

BlockSec-Audit