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 imFarm-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



