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

~$7.04M Lost: GiddyDefi, Volo Vault & More | BlockSec Weekly
Security Insights

~$7.04M Lost: GiddyDefi, Volo Vault & More | BlockSec Weekly

This BlockSec weekly security report covers eight attack incidents detected between April 20 and April 26, 2026, across Ethereum, Avalanche, Sui, Base, HyperLiquid, and MegaETH, with total estimated losses of approximately $7.04M. The highlighted incident is the $1.3M GiddyDefi exploit, where the attacker did not break any cryptography or use a flash loan but simply replayed an existing on-chain EIP-712 signature with the unsigned `aggregator` and `fromToken` fields swapped out for a malicious contract, demonstrating how partial signature coverage turns any historical signature into a generic permit. Other incidents include a $3.5M Volo Vault operator key compromise on Sui, a $1.5M Purrlend privileged-role takeover, a $413K SingularityFinance oracle misconfiguration, a $142.7K Scallop cross-pool index injection, a $72.35K Kipseli Router decimal mismatch, a $50.7K REVLoans (Juicebox) accounting pollution, and a $64K Custom Rebalancer arbitrary-call exploit.

Weekly Web3 Security Incident Roundup | Apr 13 – Apr 19, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Apr 13 – Apr 19, 2026

This BlockSec weekly security report covers four attack incidents detected between April 13 and April 19, 2026, across multiple chains such as Ethereum, Unichain, Arbitrum, and NEAR, with total estimated losses of approximately $310M. The highlighted incident is the $290M KelpDAO rsETH bridge exploit, where an attacker poisoned the RPC infrastructure of the sole LayerZero DVN to fabricate a cross-chain message, triggering a cascading WETH freeze across five chains and an Arbitrum Security Council forced state transition that raises questions about the actual trust boundaries of decentralized systems. Other incidents include a $242K MMR proof forgery on Hyperbridge, a $1.5M signed integer abuse on Dango, and an $18.4M circular swap path exploit on Rhea Finance's Burrowland protocol.

Best Security Auditor for Web3

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

BlockSec Audit