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
Verluste von rund 3,87 Millionen USD: Hacks bei Autheo Network und UNCX | BlockSec Weekly
Security Insights

Verluste von rund 3,87 Millionen USD: Hacks bei Autheo Network und UNCX | BlockSec Weekly

Dieser Wochenbericht behandelt 3 Sicherheitsvorfälle im Zeitraum 12.10.2026–18.10.2026 mit einem geschätzten Gesamtschaden von etwa 3,87 Millionen USD. Bei Autheo Network wurde ein privater Schlüssel kompromittiert; der Schaden betrug rund 1,76 Millionen USD. Qubic Wallet verlor aufgrund einer schwachen Seed-Generierung rund 1,30 Millionen USD. Bei den Smart Token Vesting V2-Verträgen von UNCX Network führte ein Buchführungsfehler auf Ethereum, BNB Chain, Base und Robinhood Chain zu einem Schaden von rund 807 Tausend USD. Die hervorgehobene Analyse zu UNCX erklärt, wie eine fehlerhafte Berechnung der Gesamtanteile Vesting-Tranchen zusammenführte, die mit unterschiedlichen Token-zu-Anteil-Verhältnissen erstellt worden waren, und dadurch überhöhte Entnahmen aus gemeinsamen Pools ermöglichte.

Rund 542.000 $ verloren: MakerDaoBot-Exploit | BlockSec Wochenrückblick
Security Insights

Rund 542.000 $ verloren: MakerDaoBot-Exploit | BlockSec Wochenrückblick

Ethereum, 5.–11.10.2026: 1 Vorfall, ca. 542.000 $ Verlust. Über eine ungeschützte MakerDaoBot-Funktion erhielt ein bösartiger Adapter Zugriff auf Bot-Guthaben, wickelte 4 ETH-A-Auktionen ab und tauschte 200 ETH-A in WETH; 200 ETH gingen an den Angreifer.

~418 Mio. $ verloren: Bitget- und NEAR-Intents-Exploits | BlockSec Weekly
Security Insights

~418 Mio. $ verloren: Bitget- und NEAR-Intents-Exploits | BlockSec Weekly

Dieser 14-tägige Sicherheitsbericht (21.9.–4.10.26) erfasst 8 Vorfälle mit ca. 418,4 Mio. USD Verlust auf Ethereum, BNB Chain, Solana u.a. Bitget: 387,5 Mio. USD Lücke in Drittprodukt. NEAR Intents: 3,87 Mio. USD Rückerstattungsfehler, fehlender Rollback

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