NachrichtenKryptoErik Zhang veröffentlicht Neo N3 v3.10.2 und patcht eine Umgehung der Multisig-Zeugen-Verifizierung

Erik Zhang veröffentlicht Neo N3 v3.10.2 und patcht eine Umgehung der Multisig-Zeugen-Verifizierung

Autor: CryptoNewsNet·

Wichtige Erkenntnisse

  • •Neo hat am 23. Oktober Neo N3 v3.10.2 veröffentlicht – eine Sicherheitsversion, verfasst vom Mitgründer Erik Zhang, mit einer einzigen logischen Korrektur und ohne neue Funktionen.
  • •Der Patch beseitigt eine Umgehung der Zeugen-Verifizierung, die durch inkonsistente Public-Key-Validierung zwischen Multisignatur-Vertrags-Überladungen entstand und fehlerhaften Skripten zuvor erlaubte, einen Validierungspfad zu passieren, während sie an einem anderen scheiterten.
  • •Alle Validierungspfade erzwingen nun durch eine kleine Änderung an Helper.cs die vollständige kryptografische Dekodierung der öffentlichen Schlüssel, bevor ein Skript als gültiger Multisig-Vertrag eingestuft wird.
  • •Der Commit fügt zwei neue Tests hinzu und aktualisiert einen bestehenden Test, um zu bestätigen, dass Skripte mit ungültigen öffentlichen Schlüsseln von jedem Validierungspfad zurückgewiesen werden – einschließlich eines vollständigen Transaktionsfalls mit nicht übereinstimmenden Witness-Hashes.
  • •Eine bestätigte Ausnutzung auf dem Neo-N3-MainNet wurde nicht gemeldet, und der Fix greift nur auf Nodes mit der gepatchten Version – die Übernahme durch die Betreiber ist der entscheidende nächste Schritt.
Erik Zhang veröffentlicht Neo N3 v3.10.2 und patcht eine Umgehung der Multisig-Zeugen-Verifizierung

Neo hat Neo N3 v3.10.2 veröffentlicht, einen gezielten Sicherheitspatch, der eine Umgehung der Zeugen-Verifizierung schließt, die es zuvor fehlerhaften Multisignatur-Skripten ermöglichte, einen Validierungspfad zu passieren, während sie von einem anderen erkannt wurden. Für normale Nutzer beseitigt der Fix einen Weg, über den eine ungültige Transaktion für einen Teil der Node-Software als gültig erscheinen konnte.

Die Veröffentlichung, verfasst vom Neo-Mitgründer Erik Zhang, erschien am 23. Oktober. Sie enthält eine einzige logische Korrektur an der Validierungslogik für Multisignatur-Verträge von Neo N3 und keine neuen Funktionen.

Was der Fix behebt

Wenn eine Transaktion an das Neo-N3-Netzwerk übermittelt wird, prüft das Protokoll, ob die beigefügten Signaturen gültig sind und von den richtigen Parteien stammen. Diese Autorisierungsdaten – die Signaturen und die einer Transaktion beigefügten Prüfungen – bezeichnet das Protokoll als Witness (Zeugen), und genau diese Schicht härter der Patch. Bei Multisignatur-Verträgen, die eine Mindestanzahl autorisierter Unterzeichner für die Freigabe einer Transaktion erfordern und überall dort eingesetzt werden, wo mehrere Parteien die Kontrolle über dieselben Mittel teilen, umfasst diese Verifizierung auch die Prüfung, ob jeder im Vertragsskript aufgeführte öffentliche Schlüssel kryptografisch gültig ist.

Der Patch schließt eine Lücke in der Anwendung dieser Prüfung. Die Multisig-Validierungslogik von Neo N3 enthielt mehrere Codepfade zur Untersuchung eines Multisig-Skripts. Einer dieser Pfade dekodierte jeden öffentlichen Schlüssel vollständig – ein Vang, der jeden Schlüssel sofort zurückweist, der kein gültiger Punkt auf der elliptischen Kurve ist. Ein zweiter Pfad prüfte lediglich die strukturelle Form des Skripts – die korrekten Bytelängen und die korrekte Anzahl der Schlüssel – ohne die kryptografische Dekodierung durchzuführen. Ein Skript mit einem fehlerhaften öffentlichen Schlüssel konnte daher den zweiten Pfad passieren und am ersten scheitern, sodass die beiden Pfade bei der Frage, ob das Skript gültig war, zu unterschiedlichen Ergebnissen kamen. Eine solche Diskrepanz widerspricht einer Grundeigenschaft, die von der Blockchain-Validierung erwartet wird: dasselbe Skript muss unabhängig vom untersuchenden Codepfad dasselbe Ergebnis liefern.

Die Inkonsistenz war nicht unbekannt. Das Verhalten war seit 2024 in Neos eigener Testsuite dokumentiert, als Neo-SPCC-Entwicklerin Anna Shaleva neuen Witness-Verifizierungscode von NeoGo auf den C#-Referenz-Node portierte. Ein in diesem Pull Request hinzugefügter Test markierte die schlichte IsMultiSigContract-Überladung als "unlucky" („unglücklich“), weil sie die Schlüssel-Dekodierung übersprang, behandelte das Ergebnis jedoch als erwartetes Verhalten und nicht als Defekt. Die beiden dort beteiligten Implementierungen – der C#-Referenz-Node und NeoGo – verdeutlichen, warum einheitliches Verhalten wichtig ist: In einem Netzwerk, das mit mehr als einer Node-Implementierung betrieben wird, muss jede bei derselben Transaktion gleich entscheiden.

Der Fix beseitigt die Diskrepanz. Alle Pfade durch die Validierungslogik erzwingen nun die vollständige Schlüssel-Dekodierung, bevor ein Skript als gültiger Multisig-Vertrag eingestuft wird.

Fix und Testabdeckung

Die Änderung ist eine kleine Anpassung an src/Neo/SmartContract/Helper.cs. Der Fix dekodiert den Schlüssel jedes Mal, sodass jeder Pfad, der ein Multisig-Skript untersucht, nun dieselbe Prüfung durchführt.

Der Commit fügt zwei neue Tests hinzu und aktualisiert einen bestehenden Test. Der erste neue Test führt ein Multisig-Skript mit einem defekten öffentlichen Schlüssel durch alle drei Validierungspfade und bestätigt, dass jeder ihn zurückweist. Der zweite erstellt eine vollständige Transaktion mit einem defekten Multisig-Witness und bestätigt, dass das Netzwerk sie ablehnt. Dieser Test läuft zweimal – einmal mit übereinstimmender Adresse des Unterzeichners und des Witness, einmal mit einer Abweichung – und deckt damit den in den Release Notes erwähnten Fall der "mismatched witness hashes" („nicht übereinstimmende Witness-Hashes“) ab.

Der aktualisierte Test, TestIsMultiSigContract_WrongCurve, erwartete zuvor, dass der Abkürzungspfad Skripte mit ungültigen Schlüsseln akzeptiert. Er erwartet nun, dass alle drei Pfade sie zurückweisen, und verankert so das korrigierte Verhalten in der Suite gegen künftige Regressionen.

Jimmy Liao, ein Neo-Core-Entwickler und Gründer des R3E Network, beschrieb die Veröffentlichung auf X:

Neo N3 v3.10.2 — security release. Fixes a witness-verification bypass from inconsistent public-key validation between IsMultiSigContractloads. Keys are now validated before multisig classification.

Kein bekannter Exploit

Zusammen mit der Veröffentlichung wurde keine formale Sicherheitsempfehlung herausgegeben. Weder die Release Notes noch die Commit-Nachricht beschreiben eine bestätigte Ausnutzung auf dem Neo-N3-MainNet.

Node-Betreiber und Infrastrukturanbieter, die Neo N3 betreiben, sollten auf v3.10.2 aktualisieren – da es sich um einen clientseitigen Fix handelt, greift die strengere Prüfung nur auf Nodes, die tatsächlich die gepatchte Version ausführen; die Übernahme durch die Betreiber ist daher der praktisch nächste Schritt, den es zu beobachten gilt. Die vollständige Veröffentlichung ist auf GitHub verfügbar.