Sicherheitsvorfall bei Seal Finance

Seal Finance Protocol kompromittiert, Angreifer erbeutet 80,97 ETH im Wert von 48.849 $

Sicherheitsvorfall bei Seal Finance

Am 30. November entdeckte unser Sicherheitssystem zur Überwachung von Vorfällen ThunderForecast einen Angriff auf das Loopring-Protokoll (Blog in EN, CN), indem es Transaktionshistorien auf Ethereum scannte. Als Fazit ist die Hauptursache dieses Angriffs der fehlende Zugriffsschutz für die Funktion sellTokenForLRC. Der Angreifer nutzte 80,97 ETH aus, was zu dem damaligen Preis 48.849,2 USD entsprach.

Am 11. Dezember 2020 meldete unser Überwachungssystem ThunderForecast eine Reihe von Transaktionen mit einer abnormalen Handelsrate. Anschließend nutzten wir das von unserem Forschungsteam entwickelte System EthScope, um diese Transaktionen zu analysieren und entdeckten, dass es sich um einen Angriff handelte, der eine Schwachstelle des Seal Finance Protocols zum Zwecke der Arbitrage ausnutzte.

Was ist Seal?

Im Whitepaper von Seal wird erwähnt: "SEAL – Ein experimentelles Protokoll, das als Vermittler zwischen wichtigen DeFi-Protokoll-Token fungiert und 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-Token in den SEAL-Belohnungsvertrag einzahlen und die Funktion breed() im Vertrag Farm auslösen, um neue SEAL-Token zu generieren. Der Farm-Vertrag wird in jedem Seal-Pool bereitgestellt und die Funktion breed() im Vertrag wird zur Ausgabe neuer Seal-Token verwendet. Gemäß der Einstellung von breed() gibt sie zusätzliche 1,6 % Seal-Token aus. Darüber hinaus werden 0,8 % der ausgegebenen Seal-Token gegen einen anderen Token getauscht, der mit den restlichen 0,8 % der ausgegebenen Seal-Token als Liquidität in den Pool eingezahlt wird. Da jedoch kein Zugriffsschutz für die Funktion breed() vorgesehen war, kann jeder diese Funktion auslösen, und dieses primitive Design wird zur Hauptursache des gemeldeten Angriffs.

Das Folgende ist der bestätigte Quellcode der Funktion breed():

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, weitere Details zu diesem Angriff mit einer angreifenden Transaktion zu enthüllen. In dieser Transaktion wiederholte der Angreifer die Angriffslogik 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.

Drei Schritte sind beteiligt:

  • Schritt 1: Tauschen von 1.084 Seal gegen 2.787 SNX im Seal-SNX-Pool. Die Handelsrate beträgt: 1 Seal = 2,57 SNX.
  • Schritt 2: Auslösen der Funktion breed() im Farm-Vertrag. Diese Funktion gibt 13,08 Seal aus und tauscht sie gegen 10,20 SNX. Die Handelsrate beträgt nun: 1 SNX = 0,78 Seal. Der Grund dafür ist, dass der größte Teil des SNX im Pool gegen Seal getauscht wurde, was zu einem enormen Unterschied zwischen SNX und Seal hinsichtlich der Menge führt. Dann wird SNX gemäß dem Preisberechnungsalgorithmus von Uniswap extrem wertvoll (der Preis steigt um mehr als das Dreifache) im Pool.
  • Schritt 3: Tauschen von 2787 SNX gegen 1100 Seal im Seal-SNX-Pool. Da der Tausch den Preis von SNX weiter erhöht, erzielt der Angreifer mehr Seal-Token (zusätzlich 16 Seal).

Um den Verlust weiter zu messen und zu bestätigen, haben wir die Funktion breed() unter dem Blockstatus, der vor dem Angriff lag, mit unserem System EthScope nachgespielt. Infolgedessen gab Farm im Vergleich zur normalen Ausführung 18 zusätzliche Seal-Token aus. Der Angreifer schnappte sich 16 Seal und nur 2 Seal blieben 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) on-chain bereitgestellt und 22 Transaktionen erfolgreich durchgeführt, um 4.247 Seal-Token zu verpacken. Basierend auf dem damaligen Preis verdiente der Angreifer rund 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 entdeckten wir durch die Analyse des Flusses der gewonnenen Seal-Token, dass etwa 900 Seal-Token in DEX eingezahlt wurden und der Rest auf 6 verschiedene Adressen verteilt wurde. Wie in der folgenden Abbildung gezeigt, sind diese Adressen alle Top-Halter von Seal-Token, abgesehen von Seal Finance und dem Liquiditätspool in Uniswap V2.

Das Ende

Mit der Entwicklung des DeFi-Ökosystems auf Ethereum tauchen nach und nach verschiedene Sicherheitsprobleme auf. Tatsächlich verursachte die Hauptursache hinter dem Angriff, nämlich Zugriffskontrolle, erhebliche Verluste (58.467 USD) bei Seal durch die Durchführung von 22 Transaktionen bis zum 13. Dezember 2020.

Update (2021/01/04)

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

Zeitachse:

  • 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 zugewiesen

Über BlockSec

BlockSec ist ein wegweisendes Blockchain-Sicherheitsunternehmen, das 2021 von einer Gruppe weltweit herausragender Sicherheitsexperten gegründet wurde. Das Unternehmen hat sich zum Ziel gesetzt, die Sicherheit und Benutzerfreundlichkeit der aufstrebenden Web3-Welt zu verbessern, um deren Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Dienstleistungen für die Sicherheitsprüfung von Smart Contracts und EVM-Ketten an, die Phalcon-Plattform für die Sicherheitsentwicklung und proaktive Bedrohungsabwehr, die MetaSleuth-Plattform für die Verfolgung von Geldern und Ermittlungen sowie die MetaSuites-Erweiterung für Web3-Entwickler, um effizient in der Krypto-Welt zu surfen.

Bisher 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 Millionen von US-Dollar erhalten.

Offizielle Website: https://blocksec.com/

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

Sign up for the latest updates