Erik Zhang brengt Neo N3 v3.10.2 uit, verhelpt bypass in multisig-witnessverificatie
Belangrijkste punten
- •Neo publiceerde op 23 oktober Neo N3 v3.10.2, een beveiligingsrelease geschreven door medeoprichter Erik Zhang die één logische fix bevat en geen nieuwe functies.
- •De patch verhelpt een bypass in de witnessverificatie die werd veroorzaakt door inconsistente publieke-sleutelvalidatie tussen multisignature-contractoverloads, waardoor misvormde scripts eerder door het ene validatiepad konden terwijl een ander pad ze afwees.
- •Alle validatiecodepaden dwingen nu volledige cryptografische decodering van publieke sleutels af voordat een script als geldig multisig-contract wordt geclassificeerd, via een kleine bewerking in Helper.cs.
- •De commit voegt twee nieuwe tests toe en werkt één bestaande test bij om te bevestigen dat scripts met ongeldige publieke sleutels door elk validatiepad worden afgewezen, inclusief een volledig-transactiegeval met mismatchende witness-hashes.
- •Er is geen bevestigde exploitatie op Neo N3 MainNet gemeld, en de fix wordt alleen actief op nodes die de gepatchte release draaien, waardoor adoptie door operators de belangrijkste volgende stap is.

Neo heeft Neo N3 v3.10.2 uitgebracht, een gerichte beveiligingspatch die een bypass in de witnessverificatie verhelpt. Die bypass stond eerder toe dat misvormde multisignature-scripts door het ene validatiepad kwamen terwijl een ander pad ze onderschepte. Voor gewone gebruikers verwijdert de fix een route waarmee een ongeldige transactie geldig kon lijken voor een deel van de node-software.
De release, geschreven door Neo-medeoprichter Erik Zhang, werd op 23 oktober gepubliceerd. Hij bevat één logische fix in de validatielogica van het multisignature-contract van Neo N3, en geen nieuwe functies.
Wat de fix aanpakt
Wanneer een transactie naar het Neo N3-netwerk wordt verzonden, controleert het protocol of de bijgevoegde handtekeningen geldig zijn en van de juiste partijen afkomstig zijn. Die autorisatiegegevens — de handtekeningen en de controles die aan een transactie zijn gekoppeld — noemt het protocol de witness, en dat is precies de laag die deze patch versterkt. Voor multisignature-contracten, die een minimumaantal geautoriseerde ondertekenaars vereisen om een transactie goed te keuren en veelvuldig worden gebruikt waar meerdere partijen gezamenlijk controle over dezelfde middelen hebben, omvat die verificatie ook de controle of elke publieke sleutel in het contractscript cryptografisch geldig is.
De patch sluit een gat in de manier waarop die controle werd toegepast. De multisig-validatielogica van Neo N3 bevatte meerdere codepaden om een multisig-script te inspecteren. Eén van die paden decodeerde elke publieke sleutel volledig, een proces dat elke sleutel die geen geldig punt op elliptische curve was, onmiddellijk afwees. Een tweede pad controleerde alleen de structurele vorm van het script — de juiste bytelengtes en het juiste aantal sleutels — zonder de cryptografische decodering uit te voeren. Een script met een misvormde publieke sleutel kon daardoor door het tweede pad komen en door het eerste worden afgewezen, waardoor de twee paden het oneens waren over de geldigheid van het script. Dat soort meningsverschil raakt aan een basiskenmerk dat van blockchainvalidatie verwacht wordt: hetzelfde script zou hetzelfde oordeel moeten krijgen, ongeacht welk codepad het inspecteert.
De inconsistentie was niet onbekend. Het gedrag was al sinds 2024 gedocumenteerd in Neo's eigen testsuite, toen Neo SPCC-ontwikkelaar Anna Shaleva nieuwe witness-verificatiecode van NeoGo naar de C#-referentienode portte. Een test die in die pull request werd toegevoegd, bestempelde de kale IsMultiSigContract-overload als "unlucky" omdat deze de sleuteldecodering oversloeg, maar behandelde het resultaat als verwacht gedrag in plaats van een defect. De twee implementaties die daar een rol speelden — de C#-referentienode en NeoGo — onderstrepen waarom uniform gedrag belangrijk is: op een netwerk dat in meer dan één node-implementatie wordt onderhouden, moet elke implementatie op dezelfde manier over dezelfde transactie oordelen.
De fix lost de discrepantie op. Alle paden door de validatielogica dwingen nu volledige sleuteldecodering af voordat een script als geldig multisig-contract wordt geclassificeerd.
Fix en testdekking
De wijziging is een kleine bewerking in src/Neo/SmartContract/Helper.cs. De fix decodeert de sleutel nu elke keer, zodat elk pad dat een multisig-script inspecteert dezelfde controle uitvoert.
De commit voegt twee nieuwe tests toe en werkt één bestaande test bij. De eerste nieuwe test voert een multisig-script met een defecte publieke sleutel door alle drie de validatiepaden en bevestigt dat elk pad het afwijst. De tweede bouwt een volledige transactie met een defecte multisig-witness en bevestigt dat het netwerk deze weigert. Die test wordt twee keer uitgevoerd — eenmaal met het adres van de ondertekenaar passend bij de witness en eenmaal met een mismatch — waarmee het geval van "mismatched witness hashes" uit de release-opmerkingen wordt gedekt.
De bijgewerkte test, TestIsMultiSigContract_WrongCurve, verwachtte eerder dat het shortcut-pad scripts met ongeldige sleutels accepteerde. Nu verwacht hij dat alle drie de paden ze afwijzen, waarmee het gecorrigeerde gedrag in de suite wordt vastgelegd tegen toekomstige regressies.
Jimmy Liao, een Neo-core-ontwikkelaar en oprichter van R3E Network, beschreef de release op X:
Neo N3 v3.10.2 — security release. Fixes a witness-verification bypass from inconsistent public-key validation between
IsMultiSigContractoverloads. Keys are now validated before multisig classification.
Geen bekende exploit
Er is geen formele security advisory samen met de release gepubliceerd. Noch de release-opmerkingen, noch de commit-bericht beschrijft een bevestig exploitatie op Neo N3 MainNet.
Node-operators en infrastructuuraanbieders die Neo N3 draaien wordt geadviseerd te updaten naar v3.10.2 — aangezien het een client-side fix betreft, wordt de strengere controle alleen actief op nodes die daadwerkelijk de gepatchte release draaien, waardoor adoptie door operators de praktische volgende stap is om in de gaten te houden. De volledige release is beschikbaar op GitHub.