AI Security Summit: Join Figma, Perplexity & Wiz. [Register]

CVE-2026-54541
Rust vulnerability analysis and mitigation

Overview

CVE-2026-54541 is a denial-of-service vulnerability in the Nimiq core-rs-albatross blockchain node implementation, specifically in the nimiq-primitives crate's TrieProof::verify() function. A malicious peer acting as a state-sync source can crash a syncing node by sending a crafted TrieChunk containing two TrieProofNodes with identical keys, triggering an uncaught Rust panic. All versions of core-rs-albatross up to and including 1.5.1 are affected. The vulnerability was first published on June 5, 2026, and carries a CVSS v3.1 base score of 3.7 (Low) (GitHub Advisory, Nimiq Advisory).

Technical details

The root cause is an uncaught exception (CWE-248) in TrieProofNode::child_index() located at primitives/src/trie/trie_proof_node.rs:94. The function calls KeyNibbles::get(self.key.len()).unwrap() without guarding against the case where the child prefix key has the same length as the node key. Because is_prefix_of returns true for two equal-length identical keys, execution reaches get(len), which returns None, and the unconditional unwrap() causes a Rust panic. The vulnerable code path is reachable from untrusted network input via ResponseChunk → commit_chunks → put_chunk → proof.verify() before any cryptographic proof verification, meaning an attacker does not need to supply a cryptographically valid proof — only a malformed TrieChunk with duplicate TrieProofNode keys (GitHub Advisory, Fix Commit).

Impact

Successful exploitation causes the targeted Nimiq node to crash (panic) during state synchronization, resulting in a transient availability impact — the node automatically restarts and re-syncs. There is no impact on confidentiality or data integrity, and the crash does not persist beyond the restart cycle. The scope is limited to the individual node being synced; no lateral movement or data exfiltration is possible through this vulnerability (GitHub Advisory).

Exploitability

No public exploit code or in-the-wild exploitation has been reported for CVE-2026-54541. Exploitation requires a specific precondition: the attacker must be selected as the victim node's sync peer during an active state-sync operation, which introduces meaningful attack complexity (reflected in the CVSS AC:H rating). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog, and no EPSS score data is currently available (GitHub Advisory, Nimiq Advisory).

Exploitation steps

  1. Identify a syncing target: Locate a Nimiq node running core-rs-albatross version ≤ 1.5.1 that is actively performing state synchronization (e.g., a newly bootstrapping node).
  2. Position as sync peer: Arrange to be selected as the victim node's state-sync source peer, either by operating a malicious Nimiq node on the network or by exploiting peer selection mechanisms.
  3. Craft malicious TrieChunk: Construct a ResponseChunk message containing a TrieChunk whose TrieProof includes two TrieProofNode entries with identical KeyNibbles keys. No valid cryptographic proof is required.
  4. Send the crafted message: Transmit the malformed TrieChunk to the victim node during the state-sync phase. The message is processed via commit_chunks → put_chunk → proof.verify().
  5. Trigger panic: TrieProof::verify() calls child_index(), which invokes KeyNibbles::get(self.key.len()).unwrap() on the duplicate-key node, returns None, and panics — crashing the node process (GitHub Advisory, Fix Commit).

Indicators of compromise

  • Logs: Rust panic messages in node logs referencing TrieProofNode::child_index, trie_proof_node.rs, or unwrap() failures during state-sync operations; unexpected node restart events logged around state-sync activity.
  • Network: Repeated or anomalous ResponseChunk/TrieChunk messages received from a specific peer IP during state synchronization; the node crashing and reconnecting to the same peer repeatedly.
  • Process: Unexpected termination and restart of the core-rs-albatross node process coinciding with state-sync phases, particularly when syncing from a previously unknown peer.

Mitigation and workarounds

Upgrade nimiq-primitives (part of core-rs-albatross) to version 1.6.0, which fixes the vulnerability by modifying child_index() to explicitly reject equal-length keys and return MerkleRadixTrieError::WrongPrefix instead of calling unwrap() (Fix Commit, v1.6.0 Release). The only available workaround for operators unable to upgrade immediately is to configure nodes to sync exclusively from trusted peers, which eliminates the attacker's ability to act as a malicious sync source (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-61544HIGH8.2
  • Rust logoRust
  • libp2p-quic
NoYesSep 15, 2026
CVE-2026-55093MEDIUM6.1
  • Rust logoRust
  • ascan
NoYesSep 14, 2026
CVE-2026-55832MEDIUM6.1
  • Rust logoRust
  • ascan
NoYesSep 14, 2026
CVE-2026-54542LOW3.7
  • Rust logoRust
  • nimiq-primitives
NoYesSep 14, 2026
CVE-2026-54541LOW3.7
  • Rust logoRust
  • nimiq-primitives
NoYesSep 14, 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