NewsCryptoErik Zhang Releases Neo N3 v3.10.2, Patching Multisig Witness Verification Bypass

Erik Zhang Releases Neo N3 v3.10.2, Patching Multisig Witness Verification Bypass

Author: CryptoNewsNet·

Key Takeaways

  • •Neo published Neo N3 v3.10.2 on Oct. 23, a security release written by co-founder Erik Zhang that contains a single logical fix and no new features.
  • •The patch eliminates a witness-verification bypass caused by inconsistent public-key validation between multisignature contract overloads, which previously let malformed scripts pass one validation path while failing another.
  • •All validation code paths now force full cryptographic decoding of public keys before classifying a script as a valid multisig contract, through a small edit to Helper.cs.
  • •The commit adds two new tests and updates one existing test to confirm that scripts with invalid public keys are rejected by every validation path, including a full-transaction case with mismatched witness hashes.
  • •No confirmed exploitation on Neo N3 MainNet has been reported, and the fix only takes effect on nodes running the patched release, making operator adoption the key next step.
Erik Zhang Releases Neo N3 v3.10.2, Patching Multisig Witness Verification Bypass

Neo has released Neo N3 v3.10.2, a targeted security patch that closes a witness-verification bypass that previously allowed malformed multisignature scripts to pass one validation path while being caught by another. For everyday users, the fix eliminates a route through which an invalid transaction could appear valid to part of the node software.

The release, authored by Neo co-founder Erik Zhang, was published on Oct. 23. It contains a single logical fix to Neo N3's multisignature contract validation logic, and no new features.

What the fix addresses

When a transaction is submitted to the Neo N3 network, the protocol verifies that the attached signatures are valid and come from the correct parties. That authorization data — the signatures and the checks attached to a transaction — is what the protocol calls its witness, and it is the layer this patch hardens. For multisignature contracts, which require a minimum number of authorized signers to approve a transaction and are commonly used wherever several parties share control of the same funds, that verification includes checking that every public key listed in the contract script is cryptographically valid.

The patch closes a gap in how that check was applied. Neo N3's multisig validation logic included multiple code paths for inspecting a multisig script. One of those paths fully decoded each public key, a process that would immediately reject any key that was not a valid point on the elliptic curve. A second path checked only the script's structural shape — the correct byte lengths and the correct number of keys — without performing the cryptographic decode. A script containing a malformed public key could therefore pass the second path and fail the first, leaving the two paths in disagreement about whether the script was valid. That kind of disagreement cuts against a baseline property blockchain validation is expected to have: the same script should yield the same verdict no matter which code path inspects it.

The inconsistency was not unknown. The behavior had been documented in Neo's own test suite since 2024, when Neo SPCC developer Anna Shaleva ported new witness verification code from NeoGo to the C# reference node. A test added in that pull request flagged the bare IsMultiSigContract overload as "unlucky" for skipping key decoding, but treated the result as expected behavior rather than a defect. The two implementations in play there — the C# reference node and NeoGo — underline why uniform behavior matters: on a network maintained in more than one node implementation, each has to rule the same way on the same transaction.

The fix resolves the discrepancy. All paths through the validation logic now force full key decoding before classifying a script as a valid multisig contract.

Fix and test coverage

The change is a small edit to src/Neo/SmartContract/Helper.cs. The fix decodes the key every time, so every path that inspects a multis script now runs the same check.

The commit adds two new tests and updates one existing test. The first new test feeds a multisig script with a broken public key to all three validation paths and confirms that each one rejects it. The second builds a full transaction with a broken multisig witness and confirms that the network refuses it. That test runs twice — once with the signer's address matching the witness and once with a mismatch — covering the "mismatched witness hashes" case noted in the release notes.

The updated test, TestIsMultiSigContract_WrongCurve, previously expected the shortcut path to accept scripts with invalid keys. It now expects all three paths to reject them, pinning the corrected behavior in the suite against future regressions.

Jimmy Liao, a Neo core developer and founder of R3E Network, described the release on X:

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

No known exploit

No formal security advisory was published alongside the release. Neither the release notes nor the commit message describe any confirmed exploitation on Neo N3 MainNet.

Node operators and infrastructure providers running Neo N3 should update to v3.10.2 — as a client-side fix, its stricter check only takes effect on nodes actually running the patched release, which makes operator adoption the practical next step to watch. The full release is available on GitHub.