Back to Blog

Analyse eines Sicherheitsvorfalls bei Indexed Finance

Code Auditing
October 22, 2021

0x.1 Hintergrund

Am 15. Oktober 2021 um 02:38 Uhr (UTC+8) erkannte unser internes Überwachungssystem verdächtige Flashloan-Transaktionen:

Unser Überwachungssystem
Unser Überwachungssystem

Nach der Untersuchung stellten wir fest, dass es sich um einen Preismanipulationsangriff auf Indexed Finance handelte. Konkret startete der Angreifer den Angriff, indem er die fehlerhafte Formel (die zur Berechnung des Preises verwendet wird) dieses Projekts ausnutzte und einen Gewinn von 16 Millionen US-Dollar erzielte.

Es gab bereits einige Diskussionen in den sozialen Medien, während das Projekt einen offiziellen Post-Mortem veröffentlicht hat (Indexed Attack Post-Mortem. Bestehende Analysen geben jedoch kein vollständiges Verständnis dieses Sicherheitsvorfalls. Daher zielt dieser Blog darauf ab, eine umfassende Analyse zu liefern, einschließlich des Mechanismus des Projekts, der Schwachstelle, des Angriffs und des Gewinns.

0x1.1 Relevante Vertragsadressen

  • MarketCapSqrtController: 0x120c6956d292b800a835cb935c9dd326bdb4e011

  • DEFI5: 0xfa6de2697d59e88ed7fc4dfe5a33dac43565ea41

  • CC10: 0x17ac188e09a7890a1844e5e65471fe8b0ccfadf3

0x1.2 Angriffstransaktionen

  • Angriff TX-I: 0x44aad3b853866468161735496a5d9cc961ce5aa872924c5d78673076b1cd95aa

  • Angriff TX-II: 0xbde4521c5ac08d0033019993b0e7e1d29b1457e80e7743d318a3c27649ca4417

0x2. Mechanismus von Indexed Finance

Um die Schwachstelle/den Angriff besser zu verstehen, verwenden wir DEFI5 (d. h. den vom Angreifer gehackten Pool), um den Mechanismus von Indexed Finance zu demonstrieren.

0x2.1 Bindungstoken

DEFI5 wurde entwickelt, um den Handelsdienst für die Top-5-Token von DeFi-Projekten auf Ethereum anzubieten. Insbesondere aktualisiert Indexed Finance die Token-Ranglisten basierend auf ihrer Marktkapitalisierung über MarketCapSqrtController. Da sich die Reihenfolge der Top-5-Token im Laufe der Zeit ändern kann, kann die Anzahl der vom DEFI5-Pool verwendeten Token größer als 5 sein, wie im folgenden Code gezeigt:

Abbildung 1
Abbildung 1

Abbildung 1 zeigt, dass DEFI5, um einen neuen Token zu binden, die Funktion _bind auslösen muss, die von der Funktion reindexTokens aufgerufen wird und nur von der Funktion reindexPools von MarketCapSqrtController aufgerufen werden kann:

Abbildung 2
Abbildung 2

Abbildung 2 zeigt, dass MarketCapSqrtController zuerst Token-Informationen (einschließlich TotalSupply und Preis) von den Märkten abruft und dann die Rangliste basierend auf ihrer Marktkapitalisierung berechnet. Beim Aufrufen der Funktion reindexPool werden die Adressen der Top-Token als Argumente übergeben, um die Funktion reindexTokens aufzurufen. Beachten Sie, dass der neu hinzugefügte Token an DEFI5 gebunden wird, ohne die ursprünglichen Token von DEFI5 zu ersetzen.

0x2.2 Was kommt als Nächstes?

Nach der Token-Bindung muss DEFI5 eine Variable namens ready (die den Token-Status angibt) auf true setzen, um den Handel zu ermöglichen:

Abbildung 3
Abbildung 3

Laut der Code-Logik kann ready, abgesehen von der Vertragsinitialisierung, nur in der Funktion gulp gesetzt werden. Wie in Abbildung 3 gezeigt, geschieht dies, wenn die Token-Bilanz in DEFI5 größer oder gleich _minimumBalances ist. Gleichzeitig wird das anfängliche Token-Gewicht (d. h. denorm) anhand der folgenden Formel berechnet:

0x3. Schwachstellenanalyse

Der anfällige Code gehört zur Funktion updateMinimumBalance von MarketCapSqrtController.

Abbildung 4
Abbildung 4

Wie in Abbildung 4 gezeigt, kann updateMinimumBalance das minimumBalance eines Tokens, dessen ready falsch ist, auf 1/100 des poolValue ändern. Die Berechnung von poolValue ist der Schlüssel zur Schwachstelle.

Abbildung 5
Abbildung 5

Die Berechnung in Abbildung 5 implementiert lediglich die folgende Formel:

In dieser Formel gibt es jedoch zwei potenzielle Probleme:

  • Verwendung der Liquidität eines Tokens zur Schätzung des Werts des gesamten Pools;
  • die Gewichtungen des Pools (_totalWeight) und des Tokens (token.denorm) werden durch die Änderung der Liquidität nicht beeinflusst. Tatsächlich werden sie von der Marktkapitalisierung externer Märkte beeinflusst. Außerdem ist ihre Änderung durch den Zeitraum begrenzt, d. h. Erhöhung oder Verringerung um 1 % pro Stunde.

Kurz gesagt, der Angreifer kann poolValue durch die Verwendung von Flashloans manipulieren, um sofort eine große Änderung der Liquidität eines Tokens zu bewirken, während die Gewichtungen des Pools und des Tokens entsprechend unverändert bleiben. Dadurch kann das minimumBalance des Tokens (dessen ready falsch ist) manipuliert werden, um den Preismanipulationsangriff zu starten.

0x4. Angriffsanalyse

Der Angriff besteht aus den folgenden 9 Schritten:

Schritt 1: Aufrufen der Funktion reindexPool, um SUSHI zu binden. Vor dem Aufruf befinden sich 6 Token im DEFI5-Pool, darunter UNI, AAVE, COMP, SNX, CRV und MKR. Da die Marktkapitalisierung von SUSHI die Top 5 erreicht, wird SUSHI dem Pool hinzugefügt.

Schritt 2: Ausleihen aller 6 Token (UNI, AAVE, COMP, SNX, CRV und MKR), die von IndexPool über SushiSwap unterstützt werden.

Schritt 3: Tauschen von UNI durch mehrmaliges Aufrufen der Funktion swapExactAmountIn mit den geliehenen Token (am Beispiel von COMP).

Hinweis 1: Mehrmals hier aufgrund der Einschränkung von MAX_IN_RATIO, man kann höchstens die Hälfte des Token-Guthabens tauschen.

Hinweis 2: In diesem Schritt wird poolValue stark unterschätzt, da die Bilanz von UNI (als firstToken) im Pool stark abnimmt.

Schritt 4: Ändern des minimumBalance von SUSHI durch Aufrufen der Funktion updateMinimumBalance.

Beachten Sie, dass minimumBalance kleiner als der normale Wert ist, da poolValue in Schritt 3 abnormal berechnet wurde.

Schritt 5: Vorbereiten von LP-Token durch Aufrufen der Funktion joinswapExternAmountIn zur Bereitstellung von Liquidität. Wir werden sehen, dass diese LP-Token verwendet werden, um mehr SUSHI zurückzutauschen.

Hinweis: Die Funktion joinswapExternAmountIn muss aufgrund der Auswirkung von MAX_IN_RATIO mehrmals aufgerufen werden.

Schritt 6: Manipulieren des Gewichts von SUSHI im DEFI5-Pool, indem zuerst eine riesige Menge SUSHI verliehen und in den Pool transferiert und dann die Funktion gulp aufgerufen wird, um das ready von SUSHI auf true zu setzen. Dadurch wird das anfängliche Gewicht von SUSHI (denorm) zu einem hohen Wert.

Schritt 7: Tauschen von LP-Token zurück in zugrundeliegende Token (UNI, AAVE, COMP, SNX, CRV, MKR und SUSHI) durch Aufrufen der Funktion exitPool.

Hinweis: Die Funktion exitPool berücksichtigt NICHT das Gewicht jedes Tokens, folglich werden die zugrundeliegenden Token im gleichen Verhältnis zurückgegeben.

Schritt 8: Tauschen von LP-Token durch Aufrufen der Funktion joinswapExternAmountIn mit SUSHI zur Bereitstellung von Liquidität. Aufgrund des abnormalen Gewichts von SUSHI zu diesem Zeitpunkt können mehr LP-Token geerntet werden.

Beachten Sie, dass die Funktion joinswapPoolAmountIn den LP-Token basierend auf dem Gewicht des empfangenen zugrundeliegenden Tokens (in diesem Fall SUSHI) prägt.

Schritt 9: Entleeren des Pools durch Aufrufen der Funktion exitPool mit den in Schritt 8 geernteten LP-Token.

0x5. Gewinnanalyse

Unsere Untersuchung zeigt, dass das gesamte Geld (einschließlich Transaktionsgebühren), das vom Angreifer verwendet wurde, von Tornado Cash stammt.

Insgesamt gibt es zwei Angriffstransaktionen:

  • In der ersten Transaktion erzielte der Angreifer: 6.226,8 AAVE, 15 ETH, 192.358,6 UNI, 5.459,5 COMP, 721.611,3 CRV, 16.680,6 SNX, 406,5 MKR.

  • In der zweiten Transaktion sammelte der Angreifer: 109,6 MKR, 17.844 UMA, 1.002,4 COMP, 34.602,5 UNI, 131.645,4 BAT, 28.754,1 SNX, 1.273,6 AAVE, 124.194,2 CRV, 33.215,4 LINK, 5,24 YFI.

Zusätzlich hatte der Angreifer mehrere gescheiterte Versuche.

Zum Zeitpunkt der Erstellung dieses Berichts beläuft sich der vom Angreifer erzielte Gewinn auf 16 Millionen US-Dollar und wurde noch nicht übertragen.

Über BlockSec

BlockSec ist ein wegweisendes Blockchain-Sicherheitsunternehmen, das 2021 von einer Gruppe weltweit renommierter Sicherheitsexperten gegründet wurde. Das Unternehmen engagiert sich für die Verbesserung der Sicherheit und Benutzerfreundlichkeit der aufstrebenden Web3-Welt, um deren Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Dienstleistungen im Bereich der Sicherheitsprüfung von Smart Contracts und EVM-Chains, die Phalcon-Plattform für die Sicherheitsentwicklung und die proaktive Abwehr von Bedrohungen, die MetaSleuth-Plattform für die Geldverfolgung und -untersuchung sowie die MetaSuites-Erweiterung für Web3-Entwickler, um effizient im Krypto-Bereich 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 Dutzende Millionen US-Dollar erhalten.

Offizielle Website: https://blocksec.com/

Offizielles Twitter-Konto: https://twitter.com/BlockSecTeam

Sign up for the latest updates
Drift Protocol Incident: Multisig Governance Compromise via Durable Nonce Exploitation
Security Insights

Drift Protocol Incident: Multisig Governance Compromise via Durable Nonce Exploitation

On April 1, 2026 (UTC), Drift Protocol on Solana suffered a $285.3M loss after an attacker exploited Solana's durable nonce mechanism to delay the execution of phished multisig approvals, ultimately transferring administrative control of the protocol's 2-of-5 Squads governance with zero timelock. With full admin privileges, the attacker created a malicious collateral market (CVT), inflated its oracle price, relaxed withdrawal protections, and drained USDC, JLP, SOL, cbBTC, and other assets through 31 rapid withdrawals in approximately 12 minutes. This incident highlights how durable nonce-based delayed execution can decouple signer intent from on-chain execution, bypassing the temporal assumptions that multisig security implicitly relies on.

Weekly Web3 Security Incident Roundup | Mar 23 – Mar 29, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Mar 23 – Mar 29, 2026

This BlockSec weekly security report covers eight DeFi attack incidents detected between March 23 and March 29, 2026, across Ethereum and BNB Chain, with total estimated losses of approximately $1.53M. Incidents include a $679K flawed burn mechanism exploit on the BCE token, a $512K spot-price manipulation attack on Cyrus Finance's PancakeSwap V3 liquidity withdrawal, a $133.5K flash-loan-driven referral reward manipulation on a TUR staking contract, and multiple integer overflow, reentrancy, and accounting error vulnerabilities in DeFi protocols. The report provides detailed vulnerability analysis and attack transaction breakdowns for each incident.

Newsletter -  March 2026
Security Insights

Newsletter - March 2026

In March 2026, the DeFi ecosystem experienced three major security incidents. Resolv Protocol lost ~$80M due to compromised privileged infrastructure keys, BitcoinReserveOffering suffered ~$2.7M from a double-minting logic flaw, and Venus Protocol incurred ~$2.15M following a donation attack combined with market manipulation.

Best Security Auditor for Web3

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

BlockSec Audit