CVE-2026-34067
Rust vulnerability analysis and mitigation

Overview

CVE-2026-34067 is a reachable assertion (panic) vulnerability in the nimiq-transaction Rust crate used by the Nimiq proof-of-stake blockchain node (core-rs-albatross). The flaw exists in HistoryTreeProof::verify, which panics when a malformed inclusion proof is received where history.len() != positions.len() due to an unchecked assert_eq! macro. All versions of nimiq-transaction up to and including v0.2.0 (and nimiq_proof-of-stake prior to v1.3.0) are affected. The vulnerability was published on April 22, 2026, with a patch released the same day as part of v1.3.0. The CVSS v3.1 base score is 3.1 (Low) per the GitHub Advisory, though Feedly's NVD-sourced data assigns a higher score of 6.5 (Medium) (Github Advisory, Nimiq Advisory).

Technical details

The root cause is classified as CWE-617 (Reachable Assertion) and CWE-20 (Improper Input Validation). In primitives/transaction/src/history_proof.rs, the HistoryTreeProof::verify function used assert_eq!(self.history.len(), self.positions.len()) to enforce a length invariant; because Rust's assert_eq! panics on failure rather than returning an error, a length mismatch causes the entire node process to crash. The proof object originates from untrusted peer-to-peer network responses (ResponseTransactionsProof.proof) and is attacker-controlled at the network boundary before any validation occurs. The fix replaces the assertion with a graceful guard (if self.history.len() != self.positions.len() { return None; }), consistent with the method's documented error-returning contract (Nimiq Commit, Nimiq PR).

Impact

Successful exploitation results in a denial-of-service condition: a malicious peer on the Nimiq p2p network can crash any vulnerable node by sending a single crafted ResponseTransactionsProof message containing a HistoryTreeProof with mismatched history and positions array lengths. There is no impact on confidentiality or integrity — the vulnerability is purely an availability issue. Repeated exploitation could prevent affected nodes from participating in the network, disrupting blockchain synchronization and transaction processing (Github Advisory, Nimiq Advisory).

Exploitability

No public proof-of-concept exploit code is known to exist, and there is no evidence of in-the-wild exploitation at this time. The EPSS score is approximately 0.011% (2nd percentile), indicating a very low probability of exploitation in the near term. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. No threat actor attribution has been reported (Github Advisory).

Exploitation steps

  1. Reconnaissance: Identify Nimiq proof-of-stake nodes running nimiq-transaction versions ≤ 0.2.0 or nimiq_proof-of-stake < 1.3.0 by connecting to the Nimiq p2p network and observing peer version announcements.
  2. Establish peer connection: Connect to a target node as a legitimate-appearing peer on the Nimiq p2p network.
  3. Craft malformed proof: Construct a ResponseTransactionsProof message containing a HistoryTreeProof where the history and positions arrays have deliberately mismatched lengths (e.g., history.len() = 5, positions.len() = 3).
  4. Trigger the panic: Send the crafted response to the target node when it requests transaction proofs during history synchronization. The node's HistoryTreeProof::verify function will hit the assert_eq! and panic, crashing the node process.
  5. Repeat for sustained DoS: Re-establish a peer connection and repeat the attack to prevent the node from staying online (Nimiq Advisory, Nimiq PR).

Indicators of compromise

  • Logs: Rust panic messages in node logs referencing assert_eq!(history.len(), positions.len()) in primitives/transaction/src/history_proof.rs; repeated unexpected node process exits or restarts.
  • Network: Unexpected or repeated ResponseTransactionsProof messages from a single peer IP containing malformed proof structures; peers that repeatedly reconnect and trigger node crashes.
  • Process: Sudden termination of the Nimiq node process (nimiq-node or equivalent) without a graceful shutdown signal, particularly during history synchronization phases.

Mitigation and workarounds

Upgrade the nimiq-transaction crate and nimiq_proof-of-stake to version 1.3.0 or later, which replaces the panicking assert_eq! with a safe None-returning guard. No configuration-based workarounds are available. Node operators should prioritize this update, as the attack is network-accessible and requires no authentication (Nimiq Release, Nimiq Advisory).

Additional resources


SourceThis report was generated using AI

Related Rust vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-46369HIGH7.5
  • Rust logoRust
  • nimiq-blockchain
NoYesAug 12, 2026
GHSA-8rw6-p7m8-63jpMEDIUM6.5
  • Rust logoRust
  • surrealdb
NoYesAug 14, 2026
CVE-2026-73430MEDIUM5.3
  • Rust logoRust
  • russh
NoYesAug 12, 2026
CVE-2026-73429MEDIUM5.3
  • Rust logoRust
  • yazi
NoYesAug 12, 2026
CVE-2026-73489MEDIUM4.3
  • Rust logoRust
  • russh
NoYesAug 13, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management