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

The release, authored by Neo co-founder Erik Zhang, was published Oct. 23. It contains a single logical fix to Neo N3’s multisignature contract validation logic. No new features were included.

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. For multisignature contracts, which require a minimum number of authorized signers to approve a transaction, 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 to inspect 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 (i.e., 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.

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 PR flagged the bare IsMultiSigContract overload as “unlucky” for skipping key decoding, but treated the result as expected behavior rather than a defect.

The fix resolves it. Now, all paths through the validation logic 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 multisig 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 each one rejects it.

The second builds a full transaction with a broken multisig witness and confirms 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 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.

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. Additionally, 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.

The full release can be found at the link below:
https://github.com/neo-project/neo/releases/tag/v3.10.2