Programmierfehler verursachte die Sicherheitslücke
Die Schwachstelle wurde durch ein Versäumnis der Entwickler in Bezug auf so genannte "Special Variables" in Smart Contracts verursacht, die allgemeine Daten über die Funktionen der Blockchain enthalten, wie den Zeitstempel des aktuellen Blocks.
ZenGo stellte fest, dass diese Variablen bei Simulationen keine genauen Werte aufwiesen, was sie zu dem Schluss führte, dass die Entwickler eine "Abkürzung" genommen und ihnen einen Zufallswert zugewiesen hatten. Als Beispiel nannten sie Coinbase:
Die Anweisung "COINBASE" enthält die Adresse des aktuellen Block-Miners. Da es während der Simulation keinen echten Block und somit auch keinen Miner gibt, setzen einige Implementierungen die Adresse einfach auf Null - eine Adresse mit lauter Nullen.
Die Entwickler zeigten, wie diese Schwachstelle eine Smart-Contract-Simulation auf einer bestimmten Blockchain kompromittieren könnte, bei der Nutzer aufgefordert werden, native Token im Austausch gegen andere Vermögenswerte zu senden.
Wenn man die Transaktion auf der Blockchain durchführt, wird die entsprechende Krypto-Wallet mit der Nicht-Null-Adresse des aktuellen Miners gefüllt. Der intelligente Vertrag nimmt nur die gesendeten Token entgegen.
Die Lösung
ZenGo schlug eine einfache Lösung vor: die Zuweisung sinnvoller statt zufälliger Werte für die anfälligen Variablen.
Coinbase belohnte ZenGo für die Vermeidung potenzieller Probleme, wovon das Unternehmen geschwärzte Screenshots zeigte. Außerdem erhielt ZenGo von der Ethereum Foundation einen Zuschuss in Höhe von 50.000 US-Dollar für seine Forschung zu Transaktionssimulationen.