Zum Inhalt springen
Gegr. MMXXVIBd. VI · № 273RSS
Blockchain Breaches

Ein Archiv von Sicherheitsvorfällen im Kryptobereich — Hacks, Exploits, Bridge-Ausfälle und Rug Pulls, dokumentiert mit On-Chain-Belegen.

Dossier № 201Smart-Contract-Bug

LI.FI Facet Approval-Drain

11,6 Mio. $ aus Nutzern mit Infinite Approvals an LI.FI abgezogen: Eine frisch deployte Facet übersprang Validierung und ließ beliebige Aufrufe zu.

Datum
Opfer
LI.FI
Status
Teilweise zurückerlangt

Am 16. Juli 2024 wurde das Cross-Chain-Liquiditäts-Protokoll LI.FI um rund 11,6 Millionen $ exploitet. Der Bug war ein einziger fehlender Validierungs-Check in einer frisch deployten Facet von LI.FIs Diamond-Proxy-Contract — ein Check, den der Deployer schlicht vergessen hatte einzufügen.

Was geschah

LI.FIs Smart Contracts nutzen das Diamond-Proxy-Pattern: Eine einzige nutzer-orientierte Contract-Adresse routet zu einem Satz pluggable Implementierungs-Contracts („Facets"), die spezifische Funktionalität abwickeln (Bridging, Swapping, Fee-Collection etc.). Nutzer, die mit LI.FI interagieren, erteilen Token-Approvals an den Diamond-Proxy, oft mit Infinite Allowances — ein verbreitetes DeFi-UX-Muster.

LI.FIs LibSwap-Library, genutzt von vielen Facets, erlaubt dem Protokoll, beliebige Aufrufe an beliebige Contracts während eines Swaps zu machen — nötig für Routing durch unbekannte DEXs, Fee-Collectors und Bridges. Die Library ist absichtlich permissiv; Sicherheit hängt davon ab, dass die Facets, die sie aufrufen, Swap-Ziele und Calldata validieren, bevor die Library aufgerufen wird.

Eine neue Facet, die am 16. Juli shippte, enthielt diese Validierung nicht. Jeder Aufrufer konnte:

  1. Eine Wallet mit Infinite Approval an das LI.FI-Diamond identifizieren.
  2. Einen „Swap" konstruieren, dessen Underlying-Calldata transferFrom() auf der Allowance des Opfers aufruft.
  3. Den Swap einreichen; LI.FIs Facet rief LibSwap auf; LibSwap dispatched den beliebigen Aufruf; die Tokens des Opfers wurden an den Angreifer transferiert.

Der Angreifer fegte 11,6 Mio. $ in ETH, USDC, USDT und DAI aus Wallets, die jemals Infinite Approvals an LI.FI erteilt hatten. Die Anzahl betroffener Wallets war klein (das Team schätzte „eine sehr kleine Zahl von Nutzern"), aber diese Nutzer hatten hohe Salden.

Folgen

  • LI.FI pausierte das Diamond binnen Stunden der ersten bösartigen Transaktion und fügte On-Chain-Warnungen an den betroffenen Adressen hinzu.
  • Das Team veröffentlichte ein detailliertes Post-Mortem und verpflichtete sich zu voller Erstattung betroffener Nutzer mit Rückhalt von Investoren.
  • Der Exploit war der zweite LI.FI-Sicherheitsvorfall — ein kleinerer Bug 2022 hatte rund 600.000 $ durch ein verwandtes Approval-Handling-Muster gekostet.

Warum es wichtig ist

LI.FI ist ein starker Fall für zwei verwandte Lektionen:

  1. Infinite Approvals sind Infinite Trust: Jeder Contract, dem ein Nutzer jemals unbegrenzte Approval erteilt hat, kann seine Tokens für immer drainen, auch durch Bugs, die in zukünftigem Code eingeführt werden, der zur Approval-Zeit nicht existierte. Die Revoke-UX — Revoke.cash et al. — ist eine Teilantwort; die bessere Antwort sind begrenzte Approvals mit Ablauf, die die meisten Wallets nun standardmäßig für das EIP-2612-Permit-Muster anbieten.
  2. Permissive Primitives brauchen Defense-in-Depth: Wenn eine Library beliebige Aufrufe erlauben soll, ist jeder Aufrufer dieser Library verantwortlich für die Validierung ihrer Inputs. Ein einzelnes vergessliches Facet-Deployment brach LI.FIs gesamtes Trust-Modell.

Quellen & On-Chain-Belege

  1. [01]li.fihttps://li.fi/knowledge-hub/incident-report-16th-july/
  2. [02]coindesk.comhttps://www.coindesk.com/business/2024/07/16/defi-protocol-lifi-struck-by-8m-exploit
  3. [03]unchainedcrypto.comhttps://unchainedcrypto.com/li-fi-drained-of-more-than-10-million-via-wallets-with-infinite-approval-settings/

Verwandte Einträge