Im November 2020 ereigneten sich auf vielen DeFi-Plattformen in Ethereum Sicherheitsvorfälle, wie z. B. bei Pickle Finance und 88mph.
Zur Erkennung der aufgetretenen Sicherheitsvorfälle im DeFi-Bereich haben wir das System ThunderForecast entwickelt. Bei der Analyse aktueller Transaktionen entdeckt es eine Klasse von Transaktionen, die äußerst verdächtig sind. Erstens gibt es ein Paar von Trades, bei denen die Handelsrate mehr als tausendmal voneinander abweicht. Zweitens kann der Aufrufer (EOA) am Ende jeder Transaktion immer einige Ether gewinnen. Wir haben das vom Forschungsteam entwickelte EthScope-System zur Analyse dieser Transaktionen verwendet und festgestellt, dass es sich um einen Angriff handelt, der eine Schwachstelle des Loopring-Vault-Protokolls für Arbitragezwecke ausnutzt.
LRC Protocol Fee Vault
Loopring ist ein Open-Source-Protokoll für dezentrale Börsen (DEX) auf der Ethereum-Blockchain. Entsprechend ist LRC der Token (ERC-20) von Loopring. Darüber hinaus verfügt Loopring über ein spezielles Vault-Protokoll (LRC Protocol Fee Vault), um Protokollgebühren zu speichern. Im Folgenden werden wir die Kurzform LRCPFV für die Analyse verwenden.
function sellTokenForLRC(
address token,
uint amount
)
external
nonReentrant
{
require(amount > 0, "ZERO_AMOUNT");
require(token != lrcAddress, "PROHIBITED");
address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress;
if (token == address(0)) {
recipient.sendETHAndVerify(amount, gasleft());
} else {
token.safeTransferAndVerify(recipient, amount);
}
require(
tokenSellerAddress == address(0) ||
ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress),
"SELL_FAILURE"
);
emit TokenSold(token, amount);
}
sellTokenForLRC ist eine Funktion in LRCPFV. Diese Funktion ermöglicht es Benutzern, Gebühren gegen den LRC-Token aus dem Pool zu tauschen. Es gibt jedoch keine Zugriffskontrolle in sellTokenForLRC seitens der Entwickler, sodass jeder diese Funktion aufrufen kann. Schließlich erhält der Angreifer durch die Ausnutzung dieser Schwachstelle die Möglichkeit, eine Reihe von Angriffen mit der gleichen Logik zu starten. Die Details des Angriffs werden im Folgenden analysiert.
Details
Nun enthüllen wir weitere Details dieses Angriffs anhand einer Angriffstransaktion 0x00b2c...

Es sind sechs Schritte beteiligt:
-
Schritt 1: Aufnahme eines Flash-Loans von 3773,88 ETH von 0xEB7e...
-
Schritt 2: Tausch von 3773,88 ETH gegen 5014,68 LRC auf Uniswap V1-LRC. Der Kurs bei diesem Handel beträgt: 1 ETH = 1,32878 LRC
-
Schritt 3: Tausch von 0,231 ETH Gebühr, die bei LRCFV gespeichert sind, gegen 0,000219 LRC auf dem Uniswap V1-LRC Pool durch Aufruf von
sellTokenForLRC(Wie bereits erwähnt, sollte der AngreifersellTokenForLRCnicht aufrufen). Basierend auf dem von Uniswap V1-LRC verwendeten Preisberechnungsalgorithmus steigt der Preis von LRC gegenüber ETH auf Uniswap V1-LRC dramatisch an. Der Kurs dieses Handels beträgt: 1 ETH = 0,00094 LRC -
Schritt 4: Tausch von 5014,68 LRC gegen 3774,09 ETH auf Uniswap V1-LRC. Basierend auf Schritt 3 wird nur ein kleiner Teil von LRC auf Uniswap V1-LRC gehandelt. Diese Aktion macht LRC auf Uniswap V1-LRC wertvoller gegenüber ETH. Daher erhält der Angreifer im Vergleich zu Schritt 1 3773,88 ETH durch den Tausch von 5014,68 LRC auf Uniswap V1-LRC und erzielt einen zusätzlichen Gewinn von 0,215 ETH.
-
Schritt 5: Rückzahlung des Flash-Loans von 3773,88 ETH
-
Schritt 6: Überweisung von 0,215 ETH an die Adresse des Angreifers (EOA)
Gewinn & Verlust
Die oben analysierte Transaktion wurde am 13. Oktober 2020 gestartet. Zur Berechnung des groben, aber nachvollziehbaren Gewinns und Verlusts für Angreifer und Opfer nutzen wir coingecko, um den Preis von LRC zu erhalten, der 0,0005175 ETH beträgt. Auf der anderen Seite, LRCPFV.
Der Angreifer manipuliert den Preis in Schritt 4 und erzielt durch zwei Trades einen Gewinn von 0,215 ETH.
Ausmaß des Angriffs
Basierend auf der Art des Angriffs haben wir 3 bereitgestellte bösartige Verträge (0xa896..., 0x414a..., 0xd91d...) und 90 Transaktionen des Angreifers 0x81e8... seit Block 9644449 (als LRCPFV bereitgestellt wurde) identifiziert. Der höchste Gewinn in Transaktion 0x33eab... erreichte sogar 9,89 ETH. Insgesamt hat der Angreifer 80,97 ETH durch Arbitrage gewonnen, was bei dem Preis vom 1. Oktober 2020 48.849,2 USD entspricht.
Ende
Mit der Entwicklung des DeFi-Ökosystems in Ethereum treten allmählich verschiedene Sicherheitsprobleme auf. Die Community lässt sich jedoch möglicherweise leichter von einem Angriff, der einen enormen finanziellen Verlust verursacht, ablenken als von einigen unauffälligen Angriffen. Tatsächlich verursachte die Ursache, die Zugriffskontrolle, hinter dem Angriff auch einen erheblichen Verlust (80,97 ETH) für Loopring durch 90 Transaktionen.
Zeitachse
- 2020/11/30: Verdächtige Transaktionen wurden gefunden.
- 2020/12/01: Analyse abgeschlossen.
- 2020/12/02: An Loopring gemeldet.
- 2020/12/03: Schwachstelle bestätigt und Korrektur online.
- 2020/12/03: Details veröffentlicht.
- 2021/01/03: CVE-2020–35962 zugewiesen.



