Back to Blog

Analyse des Array Finance-Sicherheitsvorfalls

Code Auditing
July 19, 2021
5 min read

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

Sign up for the latest updates
~$4.72M Lost: TAC, Transit Finance & More | BlockSec Weekly
Security Insights

~$4.72M Lost: TAC, Transit Finance & More | BlockSec Weekly

This BlockSec weekly security report covers 3 notable attack incidents identified between May 11 and May 17, 2026, across TRON, TON, and Ethereum, with total estimated losses of approximately $4.72M. Three incidents are analyzed in detail: the highlighted $1.88M Transit Finance exploit on TRON, where a deprecated swap bridge contract with lingering token approvals was exploited through arbitrary calldata forwarding; the $2.8M TAC TON-to-EVM bridge exploit caused by missing canonical wallet verification in the jetton deposit flow; and the $46.75K Boost Hook exploit on Ethereum, where spot price manipulation on a Uniswap V4 hook-based perpetual protocol forced the protocol to buy tokens at inflated prices using its own reserves.

~$15.9M Lost: Trusted Volumes, Wasabi & More | BlockSec Weekly
Security Insights

~$15.9M Lost: Trusted Volumes, Wasabi & More | BlockSec Weekly

This BlockSec bi-weekly security report covers 11 notable attack incidents identified between April 27 and May 10, 2026, across Sui, Ethereum, BNB Chain, Base, Blast, and Berachain, with total estimated losses of approximately $15.9M. Three incidents are analyzed in detail: the highlighted $1.14M Aftermath Finance exploit on Sui, where a signed/unsigned semantic mismatch in the builder-fee validation allowed an attacker to inject a negative fee that was converted into positive collateral during settlement; the $5.87M Trusted Volumes RFQ authorization mismatch on Ethereum; and the $5.7M Wasabi Protocol infrastructure-to-contract-control compromise across multiple EVM chains.

Newsletter - April 2026
Security Insights

Newsletter - April 2026

In April 2026, the DeFi ecosystem experienced three major security incidents. KelpDAO lost ~$290M due to an insecure 1-of-1 DVN bridge configuration exploited via RPC infrastructure compromise, Drift Protocol suffered ~$285M from a multisig governance takeover leveraging Solana's durable nonce mechanism, and Rhea Finance incurred ~$18.4M following a business logic flaw in its margin-trading module that allowed circular swap path manipulatio

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit