CVE-2026-54541 in core-rs-albatross
Summary
by MITRE • 09/14/2026
Nimiq is a Rust implementation of the Nimiq Proof-of-Stake protocol based on the Albatross consensus algorithm. Prior to 1.6.0, a malicious state-sync peer can crash a syncing node by sending a crafted TrieChunk proof containing two TrieProofNode values with identical keys. TrieProof::verify calls TrieProofNode::child_index in primitives/src/trie/trie_proof_node.rs, where is_prefix_of accepts equal keys and KeyNibbles::get is called at the key length, returns None, and is unconditionally unwrapped. Untrusted ResponseChunk data reaches commit_chunks, put_chunk, and proof.verify before cryptographic proof validation, so the attacker does not need a valid proof. Exploitation requires the attacker to be selected as the victim's sync peer during state sync, and the resulting panic is transient because the node restarts and resynchronizes. This issue is fixed in version 1.6.0.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.
Analysis
by VulDB Data Team • 09/19/2026
The vulnerability identified in Nimiq versions prior to 1.6.0 represents a critical denial-of-service flaw within the state synchronization mechanism of its Proof-of-Stake implementation based on the Albatross consensus algorithm. The core technical defect resides in the handling of TrieChunk proofs during the initial phase of block processing, specifically before cryptographic verification takes place. When a syncing node receives an untrusted ResponseChunk from a peer, it proceeds to commit and put the chunk into its local state database structure without first validating the accompanying proof's signature or integrity. This architectural decision allows malicious actors who are selected as sync peers during the synchronization process to inject crafted data that triggers internal logic errors within the trie implementation.
The specific technical flaw occurs when a TrieChunk contains two TrieProofNode values with identical keys. Upon processing this malformed input, the system invokes the verify function for the TrieProof, which subsequently calls child_index on the TrieProofNode objects located in primitives/src/trie/trie_proof_node.rs. The logic within is_prefix_of incorrectly accepts equal keys as valid prefixes rather than rejecting them or handling the edge case appropriately. This leads to a call to KeyNibbles::get at an index corresponding to the key length, which inherently returns None because no nibble exists beyond the end of the key sequence. Crucially, this optional value is unconditionally unwrapped without checking for nullity, causing a runtime panic that crashes the node process immediately.
From a security classification perspective, this vulnerability aligns with CWE-20 Improper Input Validation and CWE-754: Improper Check for Unusual or Exceptional Conditions within critical system functions. The attack vector is categorized under MITRE ATT&CK T1499 Endpoint Denial of Service, as the primary impact is the disruption of service availability rather than data exfiltration or privilege escalation. Although the exploitation requires a specific network position where the attacker must be chosen by the victim node to provide state sync data, this condition can often be met in public networks through peer selection algorithms that may not sufficiently filter for trustworthiness during initial synchronization phases.
The operational impact of this vulnerability is significant despite being transient. The immediate result is a complete crash of the Nimiq node process due to the unhandled panic. While modern deployment environments typically include restart mechanisms or health checks that cause the node to recover and resynchronize from other peers, these crashes introduce latency in block propagation and increase resource consumption during recovery cycles. For high-availability nodes or validators, repeated exploitation could lead to missed blocks or reduced reliability of network participation. The fact that no valid cryptographic proof is required for this crash makes it particularly dangerous as it lowers the barrier to entry for attackers who do not need private keys associated with any specific account or validator set.
Mitigation strategies primarily involve upgrading to Nimiq version 1.6.0, which addresses the root cause by implementing proper bounds checking and validation logic within the trie proof verification process. Until an upgrade is performed, network operators should consider restricting sync peer connections to known, trusted nodes if possible, although this may not be feasible in decentralized public networks. Additionally, future implementations of similar consensus algorithms should enforce cryptographic proof validation before any state mutations or complex data structure manipulations occur, ensuring that untrusted inputs cannot trigger internal logic errors regardless of their content. This principle of validating integrity prior to processing is essential for maintaining the resilience of distributed ledger systems against malformed input attacks.