Back to Blog

So nutzen Sie dieselbe MetaPool-Schwachstelle auf zwei Arten aus (Nerve Bridge / Saddle Finance): Was Sie sehen, ist nicht, was Sie bekommen

Code Auditing
May 6, 2022
8 min read

Am 30. April 2022 nutzte ein Angreifer dieselbe Schwachstelle im Nerve Bridge Vorfall aus, um Saddle Finance anzugreifen. Insgesamt waren 4.900 Ether von dem Angriff betroffen. Glücklicherweise konnten 1.360 Ether davon von uns erfolgreich gerettet werden. Eine detaillierte Beschreibung dieses Vorfalls finden Sie im offiziellen Postmortem.

Obwohl dieselbe Schwachstelle ausgenutzt wurde, unterscheidet sich die Angriffsmethode von der vorherigen. Da die neue Angriffsmethode nicht so geradlinig ist, wie man vielleicht erwarten würde, glauben wir, dass eine eingehende Untersuchung mehr Aufwand verdient. In diesem Bericht werden wir zunächst kurz die Schwachstelle erläutern und dann die ursprüngliche Angriffsmethode des Nerve Bridge Vorfalls überprüfen. Danach konzentrieren wir uns auf den Saddle Finance Vorfall, indem wir den Angriffsprozess zerlegen, um die neue Angriffsmethode zu entmystifizieren.

0x1. Über die eingesetzten Verträge

Die relevanten Vertragsadressen sind die folgenden:

  • Der betroffene MetaSwap Vertrag: 0x824dcd7b044d60df2e89b1bb888e66d8bcf41491
  • Der anfällige MetaSwapUtils Vertrag: 0x88Cc4aA0dd6Cf126b00C012dDa9f6F4fd9388b17

Es ist erwähnenswert, dass der gezeigte Code des MetaSwapUtils Vertrags, der mit dem verifizierten MetaSwap Vertrag verknüpft ist, NICHT mit dem eingesetzten MetaSwapUtils Vertrag identisch ist, dessen Adresse im Settings angegeben ist, wie folgt:

Lassen Sie sich also nicht von diesen beiden MetaSwapUtils Verträgen verwirren :)

0x2. Schwachstellenanalyse

Der anfällige Vertrag gehört zu MetaPool, der bereits in dem vorherigen Blog ausführlich behandelt wurde. Kurz gesagt, MetaPool wurde ursprünglich von Curve entwickelt, um es einem einzelnen Coin zu ermöglichen, mit allen Coins in einem anderen (Basis-)Pool zusammengefasst zu werden, ohne seine Liquidität zu verwässern. Es handelt sich im Wesentlichen um einen Pool, der aus einem Stable-Coin und einem LP-Token des Basis-Pools besteht, der aus mehreren anderen Stable-Coins besteht. Es gibt eine Bedenken hinsichtlich des MetaPool-Designs, nämlich dass der MetaPool im Grunde ein Stable-Coin-Pool ist, der die Preise für Stable-Coins aufrechterhält, während der LP-Token eines Basis-Stable-Coin-Pools KEIN Stable-Coin ist.

Tatsächlich kann der Preis eines LP-Tokens eines Basis-Stable-Coin-Pools durch Aufrufen der getVirtualPrice-Funktion des Basis-Pools ermittelt werden, und sein Preis steigt stetig mit der Akkumulation von Gebühren, die vom Basis-Pool erhoben werden. Um damit umzugehen, skaliert MetaPool die Reserve des LP-Tokens nach oben, bevor der Preis berechnet wird, wie unten gezeigt.

Wenn ein Benutzer einen LP-Token gegen einen Stable-Coin tauscht, wird die Menge des LP-Tokens vor der Preisberechnung nach oben skaliert. Alternativ, wenn ein Benutzer einen Stable-Coin gegen einen LP-Token tauscht, wird die berechnete Menge des LP-Tokens vor der Übertragung und Verbuchung nach unten skaliert.

Der obige Codeausschnitt der swapUnderlying-Funktion wird verwendet, um zwischen dem Stable-Coin im MetaPool und den Stable-Coins im Basis-Pool zu tauschen. Wie in den beiden roten Rechtecken gezeigt, skaliert die Funktion die Menge des eingehenden LP-Tokens nach oben und die Menge des ausgetauschten LP-Tokens nach unten.

Die Implementierung der swap-Funktion ist jedoch inkonsistent mit der der swapUnderlying-Funktion. Insbesondere ist die Hauptursache der Schwachstelle die fehlerhafte Berechnung in der swap-Funktion (d.h. der _calculateSwap-Funktion), die die Menge des LP-Tokens nicht ordnungsgemäß nach unten und oben skaliert. Wie unten gezeigt, zeigt die linke Seite den anfälligen Code von MetaPool, während die rechte Seite die korrigierte Version zeigt.

Der Angreifer des Nerve Bridge Vorfalls nutzte die Inkonsistenz zwischen der swap-Funktion und der swapUnderlying-Funktion aus. (Beachten Sie, dass Nerve Bridge ein Fork-Projekt von Saddle Finance ist.) Danach hat Saddle Finance die Schwachstelle behoben und die neue Version (d.h. V2) der MetaSwapUtils Bibliothek sofort neu eingesetzt.

Leider wurde der sUSD V2 MetaPool auf Ethereum aus unbekannten Gründen immer noch mit der alten und anfälligen MetaSwapUtils Bibliothek eingesetzt. Infolgedessen wurde diese Schwachstelle am 30. April erneut erfolgreich von einem Angreifer ausgenutzt. Interessanterweise wurde, im Gegensatz zur Angriffsmethode des Nerve Bridge Vorfalls, eine andere Methode zur Ausnutzung des anfälligen MetaPools verwendet.

0x3. Die ursprüngliche Angriffsmethode des Nerve Bridge Vorfalls

Wir verwenden die folgende Abbildung (siehe den vorherigen Blog), um die ursprüngliche Angriffsmethode zu überprüfen.

Da die anfällige swap-Funktion die Menge des ausgetauschten LP-Tokens (Nerve 3-LP) nicht nach unten skaliert, ist die ausgetauschte Menge (36.959) in Schritt 3 größer als normal. Dann ruft der Angreifer die swapUnderlying-Funktion (ohne Schwachstelle) auf, um die 36.959 Nerve 3-LP (in Schritt 4 und 5) gegen 51.494 fUSDT zu verkaufen, was einen Gewinn von 1.143 fUSDT erzielt.

Der Gewinn kann folgendermaßen erklärt werden: Der Angreifer erhält in Schritt 3 mehr Nerve 3-LP und verkauft diese dann zu einem "normalen" Preis, indem er die Inkonsistenz zwischen der swap-Funktion und der swapUnderlying-Funktion ausnutzt.

0x4. Die neue Angriffsmethode des Saddle Finance Vorfalls

Der Angreifer des jüngsten Saddle Finance Vorfalls verwendete eine andere Methode, um die gleiche anfällige swap-Funktion anzugreifen, ohne die swapUnderlying-Funktion einzubeziehen. Hier nehmen wir eine Angriffstransaktion als konkretes Beispiel, um den Prozess zu veranschaulichen.

Intuitiv scheint es, dass kein Gewinn entstehen sollte, da jede Auswirkung von Schritt 3 und Schritt 4 ausgeglichen würde. Insbesondere könnte der Angreifer in Schritt 3 mehr saddleUSD tauschen, da die Menge des ausgetauschten LP-Tokens (d.h. saddleUSD) nicht nach unten skaliert wird. In Schritt 4 würde der Angreifer jedoch zwangsläufig WENIGER sUSD tauschen, da die anfällige swap-Funktion die Menge des eingehenden saddleUSD nicht nach oben skaliert, bevor der Preis berechnet wird.

Wie jedoch in der obigen Abbildung gezeigt, erzielte der Angreifer durch das Paar von Tauschvorgängen in Schritt 3 und Schritt 4 einen Gewinn von 2.059.771 sUSD. Um den Grund für den Gewinn zu ermitteln, müssen wir uns mit dem Preisbildungsmechanismus befassen und eine eingehende Untersuchung durchführen, um den Angriffsprozess zu verstehen.

0x4.1 Der Preisbildungsmechanismus

Der MetaPool von Saddle Finance übernimmt die Preisformel von Curve:

Der Graph der Funktion (wenn n gleich 2 ist) ist als blaue Kurve in der folgenden Abbildung dargestellt. (Das Design der Formel finden Sie im Curve StableSwap Whitepaper.)

Hier stellt sich die Frage: Wie berechnet der MetaPool den Preis für jeden Tausch unter Verwendung dieser Formel?

Nehmen wir an, n ist 2 und ein Benutzer tauscht dx0 Token0 gegen dx1 Token1. Wir können den Berechnungsprozess für dx1 simulieren. Bei jedem Tausch kann A als Konstante behandelt werden, und D ist die einzige Variable, die die Preiskurve beeinflussen kann. Tatsächlich wird D mit der Akkumulation der vom Pool erhobenen Gebühren erhöht. Der Berechnungsprozess kann speziell in den folgenden drei Schritten zusammengefasst werden:

  • Schritt I: Setzen Sie die aktuellen Reserven des Pools (x0 und x1) in die Formel ein, um das aktuelle D zu berechnen, das die aktuelle Preiskurve bestimmt.
  • Schritt II: Erhöhen Sie x0 um dx0 und setzen Sie das aktuelle D und x0 in die Formel ein, um das neue x1 zu berechnen.
  • Schritt III: Dann ist dx1 die Differenz zwischen dem neuen x1 und dem alten x1.

Wenn Token0 der LP-Token eines Basis-Pools ist, wird Schritt II wie folgt modifiziert:

Hier ist baseVirtualPrice/1e18 während des Angriffs etwa 1,0033. Alternativ, wenn das Token der LP-Token eines Basis-Pools ist, wird Schritt III wie folgt modifiziert:

Um zu verstehen, wie D die Preiskurve beeinflusst, beschreiben wir dies auch anhand eines Beispiels. Nehmen wir an, ein Benutzer tauscht zuerst dx0 Token0 gegen dx1 Token1 und dann dx1 Token1 gegen dx0' Token0.

Wie in der obigen Abbildung gezeigt, erhöht sich aufgrund der Gebühren, die in Schritt ② für den ersten Tausch erhoben werden, D, um die Preiskurve nach oben zu verschieben (von der schwarzen Kurve zur blauen). Darüber hinaus beschreibt die Abbildung deutlich den Grund, warum dx0' kleiner als dx0 ist.

0x4.2 Analyse des Angriffs

Um den Grund für den Gewinn zu analysieren, haben wir die anfälligen und behobenen MetaSwapUtils-Bibliotheken lokal eingesetzt und den Zustand des betroffenen Pools zu diesem Zeitpunkt verwendet, um den Angriff zu simulieren. Darüber hinaus haben wir während dieser Simulation einige Werte aufgezeichnet, die zum Verständnis des Angriffsprozesses beitragen können: A ist 10.000, x_sUSD ist 8.130.463, x_saddleUSD ist 9.688.608 und D ist zu diesem Zeitpunkt 17.818.392.

Die obige Abbildung beschreibt den Prozess des profitablen Tauschpaares:

  • Tausch-I: tausche 14.800.272 sUSD gegen 9.657.586 saddleUSD
  • Tausch-II: tausche 9.657.586 saddleUSD gegen 16.860.043 sUSD

Konkret kann Tausch-I in die folgenden zwei Schritte unterteilt werden:

  • ①: Tausche 14.800.272 sUSD gegen 9.625.654 saddleUSD. Jetzt erhöht sich D auf 17.931.435 (aufgrund der erhobenen Gebühren).
  • ②: Da der anfällige MetaPool die Menge des ausgetauschten saddleUSD nicht nach unten skaliert, verliert der Pool 31.932 saddleUSD. Die Verluste verringern D auf 15.736.195, was die Preiskurve weiter nach unten verschiebt (von der schwarzen Kurve zur grauen).

Ähnlich kann Tausch-II ebenfalls in zwei Schritte unterteilt werden:

  • ③: Da die Preiskurve nach unten verschoben ist, können die gleichen 9.625.654 saddleUSD 16.891.906 sUSD tauschen, was weit mehr ist als die Kosten von 14.800.272 sUSD.
  • ④: Da der anfällige MetaPool die Menge des eingehenden saddleUSD vor der Preisberechnung nicht nach oben skaliert, verbleiben 31.863 sUSD im MetaPool, was die Preiskurve nach oben verschiebt (von der grauen Kurve zur blauen). Dennoch erzielt das Tauschpaar immer noch einen Gewinn von 2.059.771 sUSD.

Offensichtlich erläutert die obige Analyse klar, warum der Angreifer mit der neuen Angriffsmethode den Gewinn erzielen konnte. Außerdem scheint die ursprüngliche Angriffsmethode aufgrund der in Tausch-II verbleibenden sUSD im MetaPool effizienter zu sein als die neue. Natürlich könnte der Angreifer mehrere Angriffe starten, um den Pool zu leeren, was bereits in der Praxis beobachtet wurde.

0x5. Einige Erkenntnisse

Die Untersuchung deutet darauf hin, dass die Hauptursache für die Gewinne bei den beiden Vorfällen dieselbe ist. Insbesondere reduziert der erste Tausch (der den LP-Token tauscht) das D des anfälligen MetaPools, was seine Preiskurve weiter nach unten verschiebt. Diese Verschiebung beeinflusst die nachfolgende Preisbildung stark und ist der Hauptgrund für den anschließenden Gewinn.

Über BlockSec

BlockSec ist ein führendes Blockchain-Sicherheitsunternehmen, das 2021 von einer Gruppe weltweit anerkannter Sicherheitsexperten gegründet wurde. Das Unternehmen engagiert sich für die Verbesserung der Sicherheit und Benutzerfreundlichkeit für die aufstrebende Web3-Welt, um ihre Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Auditing-Dienste für Smart Contracts und EVM-Ketten, die Phalcon-Plattform für die sichere Entwicklung und proaktive Bedrohungsabwehr, die MetaSleuth-Plattform für die Nachverfolgung und Untersuchung von Geldern 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 zweistellige Millionenbeträge erhalten.

Offizielle Website: https://blocksec.com/ Offizielles Twitter-Konto: https://twitter.com/BlockSecTeam

Sign up for the latest updates
The Decentralization Dilemma: Cascading Risk and Emergency Power in the KelpDAO Crisis
Security Insights

The Decentralization Dilemma: Cascading Risk and Emergency Power in the KelpDAO Crisis

This BlockSec deep-dive analyzes the KelpDAO $290M rsETH cross-chain bridge exploit (April 18, 2026), attributed to the Lazarus Group, tracing a causal chain across three layers: how a single-point DVN dependency enabled the attack, how DeFi composability cascaded the damage through Aave V3 lending markets to freeze WETH liquidity exceeding $6.7B across Ethereum, Arbitrum, Base, Mantle, and Linea, and how the crisis forced decentralized governance to exercise centralized emergency powers. The article examines three parameters that shaped the cascade's severity (LTV, pool depth, and cross-chain deployment count) and provides an exclusive technical breakdown of Arbitrum Security Council's forced state transition, an atomic contract upgrade that moved 30,766 ETH without the holder's signature.

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.

Weekly Web3 Security Incident Roundup | Apr 6 – Apr 12, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Apr 6 – Apr 12, 2026

This BlockSec weekly security report covers four DeFi attack incidents detected between April 6 and April 12, 2026, across Linea, BNB Chain, Arbitrum, Optimism, Avalanche, and Base, with total estimated losses of approximately $928.6K. Notable incidents include a $517K approval-related exploit where a user mistakenly approved a permissionless SquidMulticall contract enabling arbitrary external calls, a $193K business logic flaw in the HB token's reward-settlement logic that allowed direct AMM reserve manipulation, a $165.6K exploit in Denaria's perpetual DEX caused by a rounding asymmetry compounded with an unsafe cast, and a $53K access control issue in XBITVault caused by an initialization-dependent check that failed open. The report provides detailed vulnerability analysis and attack transaction breakdowns for each incident.

Best Security Auditor for Web3

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

BlockSec Audit