Superfluid - REKT



8,7 Millionen US-Dollar von Superfluid abgezogen.

Das Krypto-Streaming-Protokoll wurde am 08.02.2022 um 06:17 UTC gehackt.

Andere Projekte, die den Dienst für Zahlungen an Mitwirkende oder Treuhandverträge für Investoren nutzten, erlitten negative Preisauswirkungen, da der Angreifer ihre nativen Tokens abwarf.

Zu den betroffenen Protokollen gehörten Mai Finance (QI), Stacker Ventures (STACK), Stake DAO (SDT) und Museum of Crypto Art (MOCA).

QI war der am stärksten betroffene Token und fiel nach dem Dump zunächst um fast 80%, hat sich aber seitdem auf ~62% seines Preises vor dem Hack erholt.

Superfluid's @francescorenzia sagte gegenüber rekt.news, dass sich der Angriff nur auf die größeren Wallet-Guthaben der Plattform konzentrierte. In der Zeit, bevor die Schwachstelle gepatcht wurde, ließ der Hacker viele ETH, USDC und DAI unangetastet, vermutlich weil der Angreifer „genug hatte“.

Wie ist es dazu gekommen?

Die Adresse des Angreifers: 0x1574f7f4c9d3aca2ebce918e5d19d18ae853c090

Exploit Transaktion: 0xdee86cae2e1bab16496a49...

Erbeutetet Assets:

19.4 Millionen QI (Wert vor dem Hack: 24 Millionen US-Dollar) wurden in vier Transaktionen für insgesamt 2.300 WETH (~6,2 Millionen US-Dollar) verkauft.

24,4 WETH - (~76.000 US-Dollar)

563.000 USDC - verkauft für 173 WETH

45.000 SDT - verkauft für ~17 WETH - (~54.000 US-Dollar)

24.000 STACK - verkauft für ~6,2 WETH - (~19.000 US-Dollar)

39.000 sdam3CRV - geswapt zu am3CRV, dann zu ~44.000 amDAI

1,5 Millionen MOCA - 1 Mio. von 1,5 Mio. verkauft für 173 WETH (~500.000 US-Dollar)

11.000 MATIC - Noch nicht verkauft

Insgesamt - ~8,7 Millionen US-Dollar

~6 Stunden nach dem Angriff hat Superfluid den Fehler mit Hilfe von Mudit Gupta gepatcht.

Der Patch kann hier gefunden werden.

Der folgende Text stammt aus Superfluids eigenem Post-Mortem.

Erläuterung der Schwachstelle

Superfluid.sol, bekannt als der Host-Contract, ist der Contract, der zusammensetzbare Superfluid-Contracts (ConstantFlowAgreement, InstantDistributionAgreement) in einer einzigen Transaktion ermöglicht. Die zusammengesetzten Systeme werden oft als Super Apps bezeichnet.

Um jedoch einen vertrauenswürdigen und gemeinsam genutzten Zustand während der gesamten Transaktion zwischen verschiedenen Vertragsaufrufen zu haben, wird ein Konzept namens „ctx“ (ein serialisierter Zustand, der vom Host-Contract verwaltet wird) eingeführt.

Das „ctx“ enthält den gesamten Kontext, den eine Vereinbarungsfunktion kennen muss, insbesondere, wer der „msg.sender“ des ersten Anrufs ist.

Hier wurde eine unglückliche Sicherheitslücke ausgenutzt.

Der Angreifer war in der Lage, die calldata so zu manipulieren, dass der Prozess der Serialisierung im Host-Contract und der anschließenden De-Serialisierung im Vereinbarungs-Contract dazu führte, dass der Vereinbarungs-Contract mit einem Kontextobjekt arbeitete, das speziell für die Identifizierung anderer Konten gefälscht wurde.

Dieser Mechanismus wurde genutzt, um IDA-Indizes „im Namen“ anderer Konten zu erstellen und deren Token auf diese Weise zu übertragen.

Der Exploiter-Contract:

Der folgende Exploiter-Contract zeigt, wie die Schwachstelle genutzt werden kann, um sich als andere Konten auszugeben und deren offene Streams zu schließen.

In der eigentlichen Exploit-Transaktion verwendete der Angreifer den IDA-Contract, um mit der gleichen Technik Geld von anderen Konten abzuziehen:

Kette von Funktionsaufrufen

deleteAnyFlowBad

Die Konvention für callAgreement ist die Verwendung des Platzhalters ctx, so dass späterer agreement solidity Code diesen direkt als Argument „ctx“ lesen kann.

Um mehr über dieses Konzept zu erfahren, siehe About-Placeholder-Ctx.

Hier ist es dem Angreifer gelungen, ein gefälschtes „ctx“ zu injizieren, in dem ein beliebiger Absender gesetzt werden konnte.

Superfluid.callAgreement

Im Normalfall erstellt Superfluid.callAgreement das ctx und versieht es mit einem Stempel (speichert seinen Hash in einer Zustandsvariablen), so dass es mit Superfluid.isCtxValid validiert werden kann.

ConstantFlowAgreementV1.createFlow

Die Vereinbarung verwendet dann AgreementLibrary.authorizeTokenAccess, um zu überprüfen, ob der aufrufende Host-Contract berechtigt ist, zustandsändernde Aufrufe des Token-Contracts durchzuführen.

AgreementLibrary.authorizeTokenAccess

Sobald der aufrufende Host authentifiziert ist, würde die Vereinbarung transitorisch auch dem übergebenen ctx vertrauen und es in eine Speicherstruktur dekodieren (de-serialisieren).

Aber Fake Ctx!

Das Problem war, dass man, wie bei der Exploit-Funktion deleteAnyFlowBad, eine gefälschte ctx einschleusen kann.

Nach dem Zusammenführen in ein Byte-Objekt durch Superfluid.replacePlaceholderCtx (der Host macht keine Annahmen über vertragsspezifische Daten), enthält das resultierende dataWithCtx nun 2 ctx-Varianten, die legitime und die injizierte.

Wenn der Vereinbarungs-Contract diese Daten dekodiert, nimmt der abi-Decoder die erste (injizierte) Variante und ignoriert die restlichen Daten, die das legitime ctx enthalten.

Um dieses Problem zu lösen, fügte Superfluid einen Überprüfungsschritt in den Contract ein:

ISuperfluid.isCtxValid. Damit wird die dekodierte ctx überprüft, indem ihr im Host-Contract gespeicherter Stempel (Hash) verglichen wird.

Diese Prüfung war bereits für die Behandlung von ctx-Daten vorhanden, die von SuperApp-Callbacks bereitgestellt wurden, aber nicht für Daten, die vom vertrauenswürdigen Host-Contract übergeben wurden.

Superfluid hat sich mit dem Angreifer on-Chain in Verbindung gesetzt, und laut dem Post-Mortem liegt ein Kopfgeld von 1 Million US-Dollar auf dem Tisch, wenn er das gestohlene Geld zurückgibt.

Das Team gibt außerdem an, dass die meisten der betroffenen Konten bereits erstattet wurden, während die größeren QI- und MOCA-Verluste nach und nach ausgeglichen werden.

Obwohl es sich nicht um den größten Exploit handelte (Platz 42 auf unserer Rangliste) und keine Gelder der Nutzer verloren gingen, ist er aufgrund der Art und Weise, wie er andere Protokolle betraf, bemerkenswert.

Der wachsende Bereich der DAO-Infrastruktur bietet für die anonymen Angreifer, die in DeFi weit verbreitet sind, immer mehr Ziele.

Das gestohlene Geld befindet sich noch immer in der Wallet des Angreifers.

Werden sie die Prämie annehmen oder Superfluid sitzen lassen?


share this article

REKT serves as a public platform for anonymous authors, we take no responsibility for the views or content hosted on REKT.

donate (ETH / ERC20): 0x3C5c2F4bCeC51a36494682f91Dbc6cA7c63B514C

disclaimer:

REKT is not responsible or liable in any manner for any Content posted on our Website or in connection with our Services, whether posted or caused by ANON Author of our Website, or by REKT. Although we provide rules for Anon Author conduct and postings, we do not control and are not responsible for what Anon Author post, transmit or share on our Website or Services, and are not responsible for any offensive, inappropriate, obscene, unlawful or otherwise objectionable content you may encounter on our Website or Services. REKT is not responsible for the conduct, whether online or offline, of any user of our Website or Services.