en
Back to the list

neox-rs closes 11 audit findings, Neo Decompiler ships security-hardened release

source-logo  neonewstoday.com 15 m
image

R3E Network has resolved all 11 findings from a systematic audit of neox-rs, the Rust-based Neo X full-node client, including four classified at P1 severity. Separately, R3E shipped a security-focused release for the Neo Decompiler, hardening its parsing, output sanitisation, and release pipeline.

Both releases reflect a security-first development approach across R3E’s Neo tooling, with neox-rs v2.5.2 targeting consensus and cryptographic correctness while the decompiler update addresses input handling and supply-chain integrity.

neox-rs v2.5.2: audit remediation

The v2.5.2 release closes all findings from a Sept. 5 audit review, with fixes spanning consensus, Anti-MEV transaction handling, and cryptographic operations. The client, built on Paradigm’s Reth framework, was first released in July as the first alternative full-node client for Neo X and reached its first stable release shortly after.

Among the P1-severity fixes, the dBFT ChangeView tally has been aligned with the nspcc-dbft v0.3.2 reference implementation. The previous tally logic contained a duplicate detection issue that could affect view-change progression. The fix introduces cumulative per-request tallying and restores the recovery path for future views with cumulative contribution rules.

A second P1 fix addresses Anti-MEV reconstruction pool admission. The pool now uses parent-state per-sender tracking for nonce and cost validation, matching the behavior of the Geth reference client. This ensures that enveloped transactions entering the reconstruction pool are validated against consistent state rather than potentially stale sender data.

The third P1 finding concerns PKCS#7 decryption handling. neox-rs now implements a Pkcs7Strict hardfork with an optional neoXPkcs7StrictBlock genesis field for versioned activation. The release introduces dual-mode decryption: strict mode enforces RFC 5652 compliance, while legacy mode preserves pre-fork replay compatibility. A corresponding Geth patch is included in the release with SHA-256 verification.

Validator safety and test coverage

Beyond the audit findings, the release introduces a durable validator signing-duty journal stored in neox-dbft-duties.jsonl. The journal is fsync-backed and restart-safe, providing equivocation protection by refusing to sign a different payload for the same duty after a restart. Torn crash recovery uses hash-shape validation to ensure journal integrity.

The release also adds reconstruction retry with exponential backoff and an offline envelope census scanner for historical PKCS#7 validation.

All 418 tests in the Neo X Rust suite pass with zero failures. Five cross-implementation test suites validate compatibility against Geth reference client vectors covering threshold encryption, decryption, padding, reshare, and ciphertext admission. The release maintains strict clippy compliance and nightly rustfmt formatting.

Binaries are available for Linux x86_64, Linux aarch64, and macOS Apple Silicon. The client supports Neo X MainNet (chain ID 47763) and T4 TestNet (chain ID 12227332).

Neo Decompiler v0.14.0

The Neo Decompiler, which converts NEF bytecode and manifest metadata into readable C# source, received a security-audited release across three separately versioned deliverables: the Rust crate at v0.14.0, the JavaScript package at v2.1.0, and the web package at v0.14.0.

Jimmy Liao, R3E Network founder, described the update:

“NEF + manifest -> readable C#. This update fixes Rust branch/loop analysis, preserves JS call order & side effects, and hardens parsing. 103/103 pinned devpack contracts compile with Roslyn.”

CALLT and method-token hardening

The release caps NEF method-token arity at the Neo VM stack limit of 2048, preventing oversize inputs from causing unexpected behavior. Unresolved method-token calls now receive deterministic index-derived labels, and same-named method tokens are resolved by token index rather than method name. Restricted or hostile token names are no longer used as executable identifiers in decompiled output.

Argument rendering for CALLT expressions has been corrected to preserve evaluation order and side effects. High-level and C# rendering paths no longer substitute placeholders for missing values.

Output sanitisation and pipeline hardening

All generated source and CLI output now escapes control characters, bidirectional formatting characters, and line separators. Schema input, diagnostics, and error counts are capped, and oversize files are rejected before buffer allocation.

The release pipeline itself has been hardened. GitHub Actions revisions are pinned, packaging and publishing jobs are separated with SHA-256 verification between stages, and npm archive creation uses fail-closed scripts. Ambiguous tar encodings and unsafe archive layouts are rejected during packaging.

Additional improvements include corrected immediate dominator computation for deep merge cases in SSA construction, aligned WebAssembly report shapes with the TypeScript API, and a new Criterion benchmark suite for deterministic performance tracking.

The release notes can be found at the links below:
https://github.com/r3e-network/neox-rs/releases/tag/neox-v2.5.2
https://github.com/r3e-network/neo-decompiler/releases/tag/v0.14.0

neonewstoday.com