Es scheint, dass ein Team namens Zellic zwei Sicherheitslücken in verschiedenen Forks des Gains Network-Protokolls entdeckt hat. Die erste Schwachstelle ermöglichte es einem Angreifer, eine Prüfung zu umgehen, die die Eröffnung von Geschäften zu extrem hohen Preisen verhinderte, was möglicherweise zu erheblichen Gewinnen für den Angreifer führte. Diese Schwachstelle wurde in einem bestimmten Fork und nicht in der aktuellen Version von Gains Network gefunden.


Ein am 19. April veröffentlichter Bericht des Blockchain-Sicherheitsunternehmens Zellic enthüllte, dass zwei verschiedene Schwachstellen in einem bestimmten Zweig des Gains Network-Handelsprotokolls es Händlern ermöglicht haben könnten, bei jedem Handel astronomische Gewinne von bis zu 900 % zu erzielen, unabhängig vom Preis des Tokens . Einer dieser Fehler wurde in einer früheren Version von Gains identifiziert und seitdem behoben. Die zweite Schwachstelle betraf jedoch nur diesen bestimmten Zweig des Protokolls.

Basierend auf Zellics Ankündigung wurden die Entwickler von Gambit Trade, Holdstation Exchange und Krav Trade von Zellics Team auf eine Schwachstelle in ihren jeweiligen Forks von Gains aufmerksam gemacht. Diese Teams haben seitdem Schritte unternommen, um das Problem zu beheben und sicherzustellen, dass ihre Protokolle frei von diesen besonderen Mängeln sind. Zellic warnte jedoch davor, dass andere Versionen der Gains-Forks weiterhin gefährdet sein könnten.

Basierend auf seiner eigenen Website stellt Gains Network ein dezentrales Finanzsystem (DeFi) dar, das verschiedene Produkte auf Polygon und Arbitrum anbietet. Der Name der Leveraged-Trading-Anwendung lautet „gTrade“. Seit seiner Einführung im Mai 2023 hat es ein Derivatehandelsvolumen von mehr als 25 Milliarden US-Dollar verzeichnet, wie DefiLlama, eine Blockchain-Analyseplattform, berichtet.

Fehler in der Gains Network-Fork ließen Händler bei jedem Trade 900 % profitieren: Bericht

Zellic behauptete, dass zahlreiche weit verbreitete Handelsanwendungen für dezentrale Finanzen (DeFi) auf der grundlegenden Codebasis von Gains Network aufbauen. Dazu gehören Gambit Trade und Holdstation sowie verschiedene andere Protokolle. Bei der Untersuchung eines bestimmten Forks entdeckten sie einen Exploit, entschieden sich jedoch dazu, nicht offenzulegen, um welchen Fork es sich handelte.

Basierend auf den Ergebnissen des Berichts haben Benutzer des Gains Network die Möglichkeit, drei verschiedene Arten von Aufträgen für Handelsaktiva zu erteilen: Markt-, Umkehr- und Momentum-Aufträge. Eine Marktorder wird sofort zum aktuellen Marktpreis ausgeführt, wobei etwaige Preisschwankungen unberücksichtigt bleiben.

Wenn ich als Krypto-Investor einen Momentum- oder Umkehrhandel über den Smart Contract platziere, wird eine „Order“ mit Details zum gewünschten Handelspreis erfasst. Sobald dieser Preis auf dem Markt erreicht ist, hat jeder Benutzer die Möglichkeit, die Order durch Auslösen der Funktion „executeLimitOrder“ zu aktivieren. Es ist wichtig zu beachten, dass der Benutzer, der die Ausführung initiiert, nicht unbedingt derjenige sein muss, der die Bestellung ursprünglich aufgegeben hat. Als Gegenleistung für seine Rolle bei der Ausführung des Handels erhält der Benutzer eine kleine „Ausführungsgebühr“.

Benutzer haben die Möglichkeit, Limit- und Stop-Limit-Orders wie an einer herkömmlichen Börse festzulegen, ohne jedoch auf einen zentralen Vermittler für die Orderausführung angewiesen zu sein.

Als Krypto-Investor kann ich die Funktion nutzen, mit der ich bestimmte Preise für die Schließung meiner Trades automatisch ermitteln kann. Durch die Festlegung eines Take-Profit-Preises möchte ich Gewinne sichern, wenn ein Trade dieses Niveau erreicht, während ein Stop-Loss-Preis potenzielle Verluste begrenzen soll, wenn sich der Markt gegen mich entwickelt. Der Zweck dieser Aufträge besteht darin, eine automatisierte Ausstiegsstrategie basierend auf vordefinierten Bedingungen bereitzustellen.

Ein Fehler in der Gains-Fork ermöglichte einen Gewinn von 900 % bei Kaufaufträgen

Als Forscher untersuchte ich das Gains-Fork-Handelssystem und stieß auf eine interessante Entdeckung bezüglich der Handhabung von Stop-Loss-Orders. Beim Auslösen einer Order wird der Stop-Loss-Preis in der Variablen „currentPrice“ gespeichert, die zur Berechnung von Gewinnen und Verlusten verwendet wird. Wenn es einem Händler also gelingt, seinen Stop-Loss-Preis über dem Eröffnungspreis festzulegen, sichert er sich automatisch Gewinne aus allen nachfolgenden Preisbewegungen.

Als Finanzanalyst würde ich es so umformulieren: Wenn der Preis von Bitcoin (BTC) bei 63.000 $ lag und Sie Ihre offene Position auf 62.000 $ mit einem Stop-Loss bei 64.000 $ setzten und der Preis auf 62.000 $ fiele, würde Ihre Order ausgeführt . Da der Preis nun jedoch direkt unter Ihrem festgelegten Stop-Loss liegt, wird ein automatischer Ausstieg eingeleitet.

Darüber hinaus würde der vom Benutzer festgelegte Stop-Loss-Preis als aktueller Marktwert protokolliert. Folglich würde der Benutzer einen Gewinn von 2.000 US-Dollar einstecken, obwohl der tatsächliche Gewinn bei etwa 0 US-Dollar hätte liegen müssen. Diese Schwachstelle könnte es einem Angreifer möglicherweise ermöglichen, bei jedem Handel Gewinne zu erzielen und letztendlich die Mittel des Protokolls zu vernichten.

Als Forscher, der potenzielle Schwachstellen in Handelsprotokollen untersucht, würde ich die Implementierung einer Schutzmaßnahme empfehlen, um zu verhindern, dass Benutzer bei einer Kauforder einen Stop-Loss-Preis festlegen, der über ihrem ursprünglichen Kaufpreis liegt. Um dies zu erreichen, sollte das Protokoll einen Überprüfungsmechanismus enthalten, der auf Inkonsistenzen prüft und eine Fehlermeldung mit der Bezeichnung „wrong_sl“ ausgibt, wenn der Benutzer einen solchen Versuch unternimmt.

Fehler in der Gains Network-Fork ließen Händler bei jedem Trade 900 % profitieren: Bericht

Allerdings stellten die Ermittler fest, dass diese Kontrolle unter bestimmten Umständen umgangen werden konnte.

Wenn ein Benutzer zum ersten Mal eine Bestellung auslöst, gibt er den gewünschten Einstiegspreis an, der in der Variable „openPrice“ gespeichert wird. In dieser Phase wird eine Prüfung durchgeführt. Dennoch ändert die für die Auftragsabwicklung zuständige Funktion die Variable „openPrice“ so, dass sie „a.Price“ zuzüglich etwaiger Preisauswirkungen des neu initiierten Handels entspricht. Einfacher ausgedrückt: Wenn ein Benutzer eine Bestellung aufgibt, legt er zunächst den Einstiegspreis fest, der aufgezeichnet wird. Anschließend erfolgt eine Kontrolle. Bei Ausführung der Order wird dieser anfängliche Einstiegspreis jedoch durch den aktuellen Marktpreis zuzüglich etwaiger zusätzlicher Kosten aufgrund der Ordergröße (Preisauswirkungen) ersetzt.

Wenn ein Benutzer einen ungewöhnlich hohen Eröffnungspreis eingibt, ermöglicht das System einem Ausführenden, die Order zu bearbeiten, ohne die Preisprüfung auszulösen, was dazu führt, dass die Order zu einem niedrigeren Eröffnungspreis ausgeführt wird.

Zellic dachte beispielsweise über ein hypothetisches Szenario nach, in dem ein Gegner einen Token zum Preis von einer Billiarde Dollar (100.000e10 US-Dollar) kaufen möchte und einen Stop-Loss auf fast denselben Wert festlegt, nämlich auf 999,9999999999998 Billionen US-Dollar. Nach der Erteilung dieser Order führt der Gegner seine eigene Transaktion durch, was zu einer Änderung von openPrice führt, um den neuen Preis nach der Preisanpassung des Handels widerzuspiegeln.

Sobald der Handel abgeschlossen und aktiv ist und der anschließende Eröffnungspreis unter das ursprünglich festgelegte Stop-Loss-Niveau fällt, kann diese Position durch Auslösen der Stop-Loss-Order beendet werden. Wenn ein Gegner seine Stop-Loss-Transaktion durchführt, erzielt er Gewinne aus der Lücke zwischen dem endgültigen Preis und dem Preis, zu dem sein Stop-Loss platziert wurde.

Der Handel hätte dem Angreifer einen Gewinn von 900 % eingebracht, behauptete Zellic.

Fehler in der Gains Network-Fork ließen Händler bei jedem Trade 900 % profitieren: Bericht

Der erste Fehler, den wir entdeckten, war nicht Teil des ursprünglichen Gains Network, als das Zellic-Team ihn identifizierte. Stattdessen tauchte es in der von uns untersuchten gespaltenen Variante auf. Bei unserer Untersuchung dieser Angelegenheit sind wir jedoch auf ein zweites Problem gestoßen, das in einer früheren Version von Gains selbst vorhanden war.

Der zweite Fehler ermöglichte einen Gewinn von 900 % bei Verkaufsaufträgen

Der zweite Fehler ermöglichte es Händlern, unabhängig von der Preisentwicklung 900 % von Verkaufsaufträgen zu profitieren.

Wenn im Gains-Fork ein Handel abgeschlossen wird, wandelt die Plattform das vom Benutzer angegebene Stop-Loss- oder Take-Profit-Level in eine Variable mit dem Namen „int“ um. Diese Variable wird dann verwendet, um den Gewinn in Prozent zu ermitteln. Wenn ein Benutzer jedoch einen Stop-Loss- oder Take-Profit-Wert von 2^256-1 festlegt, würden die nachfolgenden Berechnungen zu einem negativen Wert für „int“ führen.

In Ethereum wird der Maximalwert für positive Zahlen durch 2^256-1 dargestellt. Wenn Sie in der Programmiersprache Solidity versuchen, einen Wert oberhalb dieser Grenze zur Gesamtsumme hinzuzufügen, führt die Berechnung zu einem „Überlauf“, der dazu führt, dass sie stattdessen bei Null neu beginnt. Dieser Wert wird auch als „type(uint256).max“ bezeichnet.

Den Erkenntnissen von Zellic zufolge hätte ein Angreifer, wenn er eine Hebelwirkung von mehr als dem Neunfachen der ursprünglichen Investition einsetzte, möglicherweise eine Rendite von über 900 %.

„Betrachten wir einen Verkaufsauftrag mit currentPrice als Typ(uint256).max. Der resultierende Wert von diff wäre openPrice + 1 (int(type(uint256).max) = -1 ), und daher wäre der Gewinnprozentsatz nahezu gleich 100 * Leverage. Wenn der Hebel also größer als 9 ist, gibt die Funktion einen Gewinn von 900 % zurück.“

Als Forscher, der Vertragsklauseln im Finanzhandel untersuchte, stieß ich auf eine Bestimmung, die darauf abzielte, die Eingabe von 2^256-1 als Take-Profit-Niveau zu verhindern. Diese Prüfung wurde so konzipiert, dass sie bei der ersten Bestellung durchgeführt wird. Allerdings habe ich eine Lücke entdeckt: Wenn ein Benutzer seine Take-Profit-Einstellung nach der Eröffnung der Order änderte, konnte er diese Einschränkung umgehen und 2^256-1 als gewünschtes Gewinnniveau eingeben. Dieses Versehen ermöglichte es den Benutzern, bei jedem Handel automatisch einen Gewinn von etwa 900 % zu erzielen.

In einer früheren Version von Gains gab es ein Problem mit dem zweiten Fehler, der durch ein Update behoben wurde. Die überarbeitete Version vermeidet nun dieses Problem, da sie nicht nur bei der Anpassung von Take-Profit und Stop-Loss, sondern auch bei deren Ersteinrichtung einen Verifizierungsprozess durchführt.

Zellic soll Informationen über die beiden identifizierten Sicherheitslücken an alle genannten Forks weitergegeben und sich an die Crypto Security Alliance gewandt haben, um andere potenziell betroffene Protokolle zu untersuchen. Es wurde jedoch ein Warnhinweis herausgegeben, da einige Gains-Fork-Versionen möglicherweise immer noch diese Fehler enthalten, wodurch die Gelder der Benutzer möglicherweise Risiken ausgesetzt werden, die aufgebraucht sind.

Als Krypto-Investor habe ich mich an CryptoMoon gewandt, um mich über ihre Versuche zu erkundigen, Gains Network, Gambit Trade, Holdstation Exchange und Krav Trade um Kommentare zu bitten. Zum Zeitpunkt der Veröffentlichung dieses Artikels habe ich jedoch keine Antworten von diesen Börsen erhalten.

Laut Gains Network liefern sie den authentischen Marktpreis für börsennotierte Vermögenswerte und nicht die ihrer Meinung nach weniger präzisen Zahlen, die aus unbefristeten Verträgen abgeleitet werden. Darüber hinaus rühmen sie sich damit, über bessere Devisenhandelsfähigkeiten zu verfügen als ihre Konkurrenten.

Weiterlesen

2024-05-09 23:40