Back to Blog

#3 Balancer V2 Vorfall: Rundungsfehler zerstört Invariante und breitet sich über Ketten aus

Code Auditing
February 10, 2026
5 min read

#3 Balancer V2 Vorfall: Eine Rundungsinkonsistenz bricht die Invariante und breitet sich über Ketten aus

Am 3. November 2025 erlitten die Composable Stable Pools von Balancer V2 sowie mehrere davon abgeleitete Projekte auf verschiedenen Ketten einen koordinierten Exploit, der zu Gesamtverlusten von über 125 Millionen US-Dollar führte, wobei Berichten zufolge etwa 45 Millionen US-Dollar zurückgewonnen wurden. Die Grundursache war eine Preismanipulation, die durch Präzisionsverlust bei der Invariantenberechnung ermöglicht wurde, herrührend aus inkonsistenter Rundung zwischen den Aufskalierungs- und Abskalierungsoperationen, was letztendlich die BPT (Balancer Pool Token) Preislogik verzerrte.

Dieser Vorfall sticht nicht nur aufgrund des Ausmaßes der Verluste, sondern auch aufgrund der Subtilität des zugrunde liegenden Fehlers als einer der zehn bedeutendsten Sicherheitsvorfälle des Jahres 2025 hervor. Darüber hinaus breitete sich der Exploit schnell über mehrere Ketten aus und betraf sowohl Balancer als auch seine Forks, was hervorhebt, wie gemeinsame Codebasen und komponierbare DeFi-Infrastrukturen systemische Risiken erheblich verstärken können.

Wir haben einen ausführlichen Bericht veröffentlicht: "Detaillierte Analyse: Der Balancer V2 Exploit" [1], der eine detaillierte technische Aufschlüsselung liefert. Nachfolgend präsentieren wir eine prägnante Illustration des Vorfalls.

Hintergrund

Balancer V2 Composable Stable Pool

Die betroffene Komponente dieses Angriffs war der Composable Stable Pool [2] des Balancer V2 Protokolls. Diese Pools sind für Vermögenswerte konzipiert, die voraussichtlich nahe einer 1:1-Parität bleiben (oder zu einem bekannten Wechselkurs gehandelt werden) und ermöglichen große Swaps mit minimalen Preisimpact, wodurch die Kapitaleffizienz zwischen gleichartigen oder korrelierten Vermögenswerten erheblich verbessert wird. Jeder Pool hat seinen eigenen Balancer Pool Token (BPT), der den Anteil des Liquiditätsanbieters am Pool repräsentiert, zusammen mit den entsprechenden zugrunde liegenden Vermögenswerten.

  • Dieser Pool verwendet Stable Math (basierend auf Curves StableSwap Modell), wobei die Invariante D den virtuellen Gesamtwert des Pools darstellt.

  • Der BPT-Preis kann approximativ berechnet werden als:

Preis(BPT)DtotalSupplyPreis(BPT) \approx \frac{D}{totalSupply}

Aus der obigen Formel ergibt sich, dass, wenn D auf dem Papier kleiner gemacht werden kann (auch ohne tatsächlichen Verlust von Geldern), der BPT-Preis billiger erscheint.

batchSwap() und onSwap()

Balancer V2 stellt die Funktion batchSwap() bereit, die Multi-Hop-Swaps innerhalb des Vaults [3] ermöglicht. Es gibt zwei Arten von Swaps, die durch einen Parameter bestimmt werden, der an diese Funktion übergeben wird:

  • GIVEN_IN ("Gegeben Ein"): Der Aufrufer gibt den genauen Betrag des Eingabetokens an, und der Pool berechnet den entsprechenden Ausgabebetrag.
  • GIVEN_OUT ("Gegeben Aus"): Der Aufrufer gibt den gewünschten Ausgabebetrag an, und der Pool berechnet den erforderlichen Eingabebetrag.

Typischerweise besteht ein batchSwap() aus mehreren Token-zu-Token-Swaps, die über die onSwap() Funktion ausgeführt werden. Dieser Prozess beinhaltet unweigerlich Mengenberechnungen, die an die Invariante D [1] gebunden sind.

Skalierung und Rundung

Um die Berechnungen über verschiedene Token-Salden hinweg zu normalisieren, führt Balancer die folgenden beiden Operationen durch:

  • Aufskalierung: Skaliert Salden und Mengen auf eine einheitliche interne Präzision hoch, bevor Berechnungen durchgeführt werden.
  • Abskalierung: Konvertiert die Ergebnisse zurück in ihre native Präzision und wendet eine gerichtete Rundung an (z. B. Eingabemengen werden normalerweise aufgerundet, um sicherzustellen, dass der Pool nicht zu wenig berechnet, während Ausgabemengen oft abgerundet werden).

Aufskalierung und Abskalierung sind theoretisch gepaarte Operationen: Multiplikation bzw. Division. Es besteht jedoch eine Inkonsistenz in der Implementierung dieser beiden Operationen. Insbesondere hat die Abskalierungsoperation zwei Varianten oder Richtungen: divUp und divDown. Im Gegensatz dazu hat die Aufskalierungsoperation nur eine Richtung, nämlich mulDown.

Schwachstellenanalyse

Das zugrunde liegende Problem ergibt sich aus der Abrundung, die bei der Aufskalierung in der Funktion BaseGeneralPool._swapGivenOut() durchgeführt wird. Insbesondere rundet _swapGivenOut() swapRequest.amount durch die Funktion _upscale() falsch ab. Der resultierende abgerundete Wert wird anschließend als amountOut bei der Berechnung von amountIn über _onSwapGivenOut() verwendet. Dieses Verhalten widerspricht der gängigen Praxis, dass Rundungen so erfolgen sollten, dass sie dem Protokoll zugutekommen.

Daher unterschätzt der berechnete amountIn für einen gegebenen Pool (wstETH/rETH/cbETH) die tatsächlich erforderliche Eingabe. Dies ermöglicht es einem Benutzer, eine geringere Menge eines zugrunde liegenden Vermögenswerts (z. B. wstETH) gegen einen anderen (z. B. cbETH) auszutauschen, wodurch die Invariante D aufgrund der reduzierten effektiven Liquidität verringert wird. Infolgedessen wird der Preis des entsprechenden BPT (wstETH/rETH/cbETH) künstlich verbilligt, da BPT-Preis = D / totalSupply ist.

Angriffsübersicht

Der Angreifer führte einen zweistufigen Angriff durch, wahrscheinlich um das Entdeckungsrisiko zu minimieren:

  • In der ersten Stufe wurde der Kern-Exploit innerhalb einer einzigen Transaktion durchgeführt, ohne sofortigen Gewinn zu erzielen.
  • In der zweiten Stufe erzielte der Angreifer Gewinne, indem er Vermögenswerte in einer separaten Transaktion zurückzog.

Die erste Stufe kann weiter in zwei Phasen unterteilt werden: Parameterberechnung und Batch-Swap. Nachfolgend illustrieren wir diese Phasen anhand einer Beispiel-Angriffstransaktion (TX) auf Arbitrum.

Die Parameterberechnungsphase

In dieser Phase kombinierte der Angreifer Off-Chain-Berechnungen mit On-Chain-Simulationen, um die Parameter jedes Hops in der nächsten (Batch-Swap-)Phase präzise abzustimmen, basierend auf dem aktuellen Zustand des Composable Stable Pools (einschließlich Skalierungsfaktoren, Verstärkungskoeffizient, BPT-Rate, Swap-Gebühren und anderer Parameter). Der Angreifer setzte auch einen Hilfskontrakt ein, um bei diesen Berechnungen zu helfen, der möglicherweise dazu diente, die Exposition gegenüber Front-Running zu reduzieren. Weitere Einzelheiten finden Sie in [1].

Die Batch-Swap-Phase

Dann kann die batchSwap()-Operation in drei Schritte unterteilt werden:

Schritt 1: Der Angreifer tauscht BPT (wstETH/rETH/cbETH) gegen zugrunde liegende Vermögenswerte, um den Saldo eines Tokens (cbETH) präzise an den Rand einer Rundungsgrenze (Betrag = 9) anzupassen. Dies schafft die Bedingungen für Präzisionsverlust im nächsten Schritt.

Schritt 2: Der Angreifer tauscht dann zwischen einem anderen zugrunde liegenden Vermögenswert (wstETH) und cbETH unter Verwendung eines konstruierten Betrags (= 8). Aufgrund der Abrundung beim Skalieren von Token-Beträgen wird der berechnete Δx geringfügig kleiner (8,918 auf 8), was zu einem unterschätzten Δy und somit zu einer kleineren Invariante (D aus Curves StableSwap-Modell) führt. Da BPT-Preis = D / totalSupply ist, wird der BPT-Preis künstlich verbilligt.

Schritt 3: Der Angreifer tauscht die zugrunde liegenden Vermögenswerte um und wandelt sie zurück in BPT, stellt das Gleichgewicht wieder her und profitiert gleichzeitig vom verbilligten BPT-Preis.

Zusammenfassung

Dieser Vorfall umfasste eine koordinierte Reihe von Exploit-Transaktionen, die auf die Composable Stable Pools von Balancer V2 und mehrere abgeleitete Implementierungen auf verschiedenen Ketten abzielten und zu erheblichen Verlusten führten. Nach dem ersten Exploit tauchten schnell Nachahmer-Transaktionen auf, die zeigten, wie schnell sich ein Angriffsmuster verbreiten kann, sobald es bekannt wird.

Schlüsselerkenntnisse:

  • Rundungs- und Präzisionsbehandlung: Jede Skalierungs- und Präzisionsoperation bei Token-Beträgen sollte in der Richtung runden, die dem Protokoll zugutekommt. Eine einzige Inkonsistenz zwischen _upscale() (nur Abrundung) und den Abskalierungsoperationen (gerichtete Rundung) reichte aus, um eine ausnutzbare Preisverzerrung zu erzeugen.
  • Wettrüsten bei der Sicherheit: Der Angreifer teilte Manipulation und Gewinnentnahme auf separate Transaktionen auf, um der Entdeckung zu entgehen. Erkennungssysteme sollten verwandte Transaktionen korrelieren und nicht nur einzelne kennzeichnen.
  • Betriebssicherheit: Sobald das Exploit-Muster öffentlich bekannt war, replizierten Nachahmer es innerhalb von Minuten über verschiedene Ketten hinweg. Protokolle, die eine Codebasis teilen, benötigen eine koordinierte Überwachung und schnelle Cross-Chain-Pause-Fähigkeiten.

Referenz

  1. https://blocksec.com/blog/in-depth-analysis-the-balancer-v2-exploit

  2. https://docs-v2.balancer.fi/concepts/pools/composable-stable.html

  3. https://docs-v2.balancer.fi/reference/swaps/batch-swaps.html


Über BlockSec

BlockSec ist ein Full-Stack-Anbieter für Blockchain-Sicherheit und Krypto-Compliance. Wir entwickeln Produkte und Dienstleistungen, die Kunden dabei helfen, Code-Audits (einschließlich Smart Contracts, Blockchain und Wallets) durchzuführen, Angriffe in Echtzeit abzufangen, Vorfälle zu analysieren, illegale Gelder zu verfolgen und AML/CFT-Verpflichtungen über den gesamten Lebenszyklus von Protokollen und Plattformen zu erfüllen.

BlockSec hat zahlreiche Blockchain-Sicherheitsarbeiten auf renommierten Konferenzen veröffentlicht, mehrere Zero-Day-Angriffe auf DeFi-Anwendungen gemeldet, mehrere Hacks blockiert, um mehr als 20 Millionen Dollar zu retten, und Kryptowährungen im Wert von Milliarden gesichert.

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