Zurück zum Blog

Analyse des Array Finance-Sicherheitsvorfalls

Code Auditing
19. Juli 2021
5 Min. Lesezeit

Am 18. Juli meldete unser DeFiRanger-System einige verdächtige Transaktionen. Nach manueller Analyse bestätigen wir, dass es sich bei diesen Transaktionen um Angriffe auf Array Finance handelt. Im Folgenden werden wir eine Angriffstransaktion verwenden, um den Angriffsprozess und die Grundursache der Schwachstelle zu veranschaulichen.

Angriffstransaktion

Die in diesem Blog verwendete Angriffstransaktion ist: 0xa17bbc7c9ab17aa88fdb5de83b41de982845e9c9c072efff6709dd29febf0daa

Angriffsablauf

Abbildung 1
Abbildung 1

Wie in Abbildung 1 gezeigt, stellten wir fest, dass der Angreifer nach der Aufnahme eines Flash-Loans von AAVE einen Gewinn von 186,62 WETH erzielte (wir unterscheiden in diesem Blog nicht explizit zwischen WETH und ETH).

Abbildung 2
Abbildung 2

Der detaillierte Angriffsablauf ist in Abbildung 2 dargestellt.

  • Zuerst rief der Angreifer die Funktion buy von Array Finance auf. Der Angreifer erhielt 430 ARRAY-Token, die von Array Finance geprägt wurden, unter Verwendung von 45,91 WETH.
  • Dann rief der Angreifer fünfmal die Funktion joinPool eines Closed-Source-Vertrags (Array Collater - 0xa800cda5) auf. Er/sie hinterlegte 676.410,58 DAI + 679.080,46 USDC + 901,82 WETH + 20 WBTC + 20 renBTC und erhielt 726,38 aBPT-Token, die von Array Collater geprägt wurden.
  • Der Angreifer rief die Funktion sell auf, um 430 ARRAY-Token zu verbrennen und erhielt 77,17 aBPT-Token.
  • Zuletzt rief der Angreifer die Funktion exitPool des Array Collater auf. Er/sie verbrannte die in den vorherigen beiden Schritten erhaltenen 804,55 aBPT-Token und erhielt 748.271,55 DAI + 751.225,08 USDC + 997,62 WETH + 22,63 WBTC + 22,74 renBTC.

Aus Abbildung 2 geht hervor, dass der Angreifer im Schritt 5 (Abbildung 2: Aufruf der Funktion sell) Gewinne erzielt. Das liegt daran, dass die erhaltenen 77,17 aBPT-Token wertvoller sind als die im Schritt 3 (Abbildung 2: Aufruf der Funktion buy) eingezahlten 49,9142 WETH. Im Folgenden werden wir den Code analysieren, um zu verstehen, warum dieser Angriff möglich war.

Code-Schwachstelle

Der folgende Code zeigt die Funktion sell von Array Finance. In dieser Funktion verwendet Array Finance den Saldo des ARRAY-Tokens, der dem Angreifer gehört, und ruft die interne Funktion _sell auf, um die Anzahl der aBPT-Token zu berechnen, die durch den Verkauf des ARRAY-Tokens erhalten werden können.

Im Folgenden ist die Implementierung der Funktion _sell aufgeführt. Sie ruft calculateLPtokensGivenArrayTokens auf, um die Anzahl der aBPT-Token zu ermitteln, die für eine bestimmte Anzahl von ARRAY-Token erhalten werden können. Dann verbrennt diese Funktion ARRAY-Token und gibt das aBPT-Token zurück.

Das Folgende zeigt die Implementierung der Funktion calculateLPtokensGivenArrayTokens.

Beachten Sie, dass es vier Argumente gibt, die die Berechnung von amountLPToken beeinflussen können. Nach dem Lesen des saleTargetAmount leiten wir die Formel wie folgt ab:

arraySmartPool.totalSupply() * (1 - (1 - amount / ARRAY.totalSupply()) ^ (1000000 / reseveRatio))
 

Das arraySmartPool ist die Smart-Contract-Adresse des Array Collater (0xa800cda5f3416a6fb64ef93d84d6298a685d190d). Der Wert von arraySmartPool.totalSupply() erhöht sich, wenn der Angreifer die über den Flash-Loan geliehenen Mittel in den Array Collater einzahlt (siehe folgende Tabelle).

TxnIndex: 64 arraySmartPool.totalSupply(): 110162296218708026400
TxnIndex: 107 arraySmartPool.totalSupply(): 165243444328062039600
TxnIndex: 150 arraySmartPool.totalSupply(): 247865166492093059400
TxnIndex: 193 arraySmartPool.totalSupply(): 371797749738139589100
TxnIndex: 236 arraySmartPool.totalSupply(): 557696624607209383650
TxnIndex: 280 arraySmartPool.totalSupply(): 836544936910814075475

Diese Logik können wir nach dem Lesen des Codes des arraySmartPool bestätigen. Das Folgende zeigt die Funktion joinPool des arraySmartPool.

Diese Funktion ruft zuerst die Funktion joinPool von SmartPoolManager auf, um die Anzahl der Token (actualAmountsIn) zu berechnen, die vom msg.sender erhalten werden müssen. Dann ruft sie für jedes Token die Funktion _pullUnderlying auf, um das Token in arraySmartPool einzuzahlen. Schließlich ruft sie _mintPoolShare und _pushPoolShare auf, um aBPT-Token zu prägen und die geprägten aBPT-Token an msg.sender zu übertragen.

Beachten Sie, dass arraySmartPool von PCToken erbt. Die Funktion _mintPoolShare ruft die Funktion _mint auf, die im Folgenden dargestellt ist.

Die Funktion _mint erhöht die Variable varTotalSupply, die direkt von totalSupply() zurückgegeben wird. Somit wird dieser Wert bei jeder Ausführung von joinPool erhöht.

Gewinnabschätzung

Zusammenfassung

Zusammenfassend lässt sich sagen, dass der Angreifer die Schwachstelle ausnutzt, dass der Preismechanismus von Array Finance vom totalSupply des aBPT-Tokens abhängt, was manipulierbar ist. Die Schwachstelle wurde in unserem Forschungsbericht DeFiRanger: Detecting Price Manipulation Attacks on DeFi Applications diskutiert.

Danksagung

Junjie Fei, Yufeng Hu, Ziling Lin, Siwei Wu, Lei Wu, Yajin Zhou @BlockSec

(In alphabetischer Reihenfolge nach Nachnamen)

Über BlockSec

BlockSec ist ein Pionierunternehmen im Bereich der Blockchain-Sicherheit, das 2021 von einer Gruppe weltweit anerkannter Sicherheitsexperten gegründet wurde. Das Unternehmen hat sich zum Ziel gesetzt, die Sicherheit und Benutzerfreundlichkeit der aufkommenden Web3-Welt zu verbessern, um deren breite Akzeptanz zu fördern. Zu diesem Zweck bietet BlockSec Audits von Smart Contracts und EVM-Chains, die Phalcon-Plattform für die sichere Entwicklung und proaktive Bedrohungsabwehr, die MetaSleuth-Plattform für die Nachverfolgung von Geldern und Ermittlungen sowie die MetaDock-Erweiterung für Web3-Entwickler, die effizient im Kryptobereich 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 Millionen von US-Dollar erhalten.

Offizielle Website: https://blocksec.com/

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

Für die neuesten Informationen anmelden
Exploit bei NEAR Intents: Fehler bei der Rückerstattung und Lehren für die Sicherheit
Security Insights

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

Der Exploit bei NEAR Intents nutzte überhöhte Rückerstattungs-Events, um interne Guthaben aufrechtzuerhalten, nachdem die eingezahlten Vermögenswerte zurückerstattet worden waren. Diese Analyse rekonstruiert den Ablauf der Receipt-Verarbeitung und sieben Auszahlungen auf der BNB Chain in Höhe von insgesamt 3.865.021 USDT, grenzt diese Mittelabflüsse von der vom Projekt gemeldeten vollständigen Rückerlangung der Mittel ab und erläutert Sicherheitsaspekte bei der Entwicklung und Prüfung von NEAR-Smart-Contracts.

Verluste von rund 5,57 Millionen USD: Exploits bei X100 Freezer und NEM | BlockSec-Wochenrückblick
Security Insights

Verluste von rund 5,57 Millionen USD: Exploits bei X100 Freezer und NEM | BlockSec-Wochenrückblick

Dieser Wochenbericht behandelt zwei Sicherheitsvorfälle auf Ethereum und BNB Chain im Zeitraum 19.10.2026–25.10.2026. Er untersucht eine durch einen Flash Loan finanzierte Übernahme der Governance von X100 Freezer sowie einen Fehler bei der Steuerabrechnung, der einen Liquiditätspool eines NEM-Tokens auf BNB Chain betrifft. Die geschätzten Verluste im Rahmen des Berichts belaufen sich insgesamt auf etwa 5,57 Millionen USD: rund 4,75 Millionen USD aus der exemplarischen X100-Transaktion und rund 820 Tausend USD aus dem Vorfall beim NEM-Pool. Gesondert gemeldete spätere Entnahmen aus X100 sind in der Gesamtsumme nicht enthalten.

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.

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
Analyse des Array Finance-Sicherheitsvorfalls