GitHub Advisoryadvisory · crates.io
GHSA-46wq-28cx-mhw4 nimiq-primitives: Panic in TrieProof::verify via child_index unwrap on equal-length keys
LOW
Official page ↗
- Aliases
- CVE-2026-54541
- Ecosystem
- crates.io
- Packages
- nimiq-primitives
- Severity
- Low
- CVSS vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
- Weaknesses
- CWE-248
- Reviewed
- 2026-07-16
Affected packages
• crates.io nimiq-primitives: < 1.6.0 → fixed in 1.6.0
Description
Impact
A malicious peer acting as a state-sync source can crash a syncing node by sending a crafted `TrieChunk` whose proof contains two `TrieProofNode`s with identical keys. `TrieProof::verify()` calls `TrieProofNode::child_index()` (`primitives/src/trie/trie_proof_node.rs:94`), which unconditionally unwraps `KeyNibbles::get(self.key.len())`. Because `is_prefix_of` returns `true` for two equal keys, execution reaches `get(len)`, which returns `None`, and the `unwrap()` panics.
The panic is reached from untrusted network input (`ResponseChunk` → `commit_chunks` → `put_chunk` → `proof.verify()`) before any cryptographic proof verification, so the attacker does not need to produce a valid proof. Exploitation requires the attacker to be selected as the victim's sync peer while the victim is performing state sync, and the resulting crash is transient (the node restarts and re-syncs).
Affected: core-rs-albatross <= 1.5.1 (`nimiq-primitives`).
Patches
Fixed in 1.6.0 via https://github.com/nimiq/core-rs-albatross/pull/3789 (commit `41d35ace`). `child_index` now rejects equal-length keys and returns `MerkleRadixTrieError::WrongPrefix` instead of unwrapping.
Workarounds
None other than syncing only from trusted peers. Upgrade to 1.6.0.
Related
Alias · CVE (1)
- CVE-2026-54541 Nimiq is a Rust implementation of the Nimiq Proof-of-Stake protocol based on the Albatross consensus algorithm. vulnerability
Weakness · CWE (1)
- CWE-248 Uncaught Exception weakness
References
- https://github.com/nimiq/core-rs-albatross/security/advisories/GHSA-46wq-28cx-mhw4 web
- https://github.com/nimiq/core-rs-albatross/pull/3789 web
- https://github.com/nimiq/core-rs-albatross/commit/41d35acee1b5cf3bc34ec3ddc1abbc03604e791e web
- https://github.com/nimiq/core-rs-albatross package
- https://github.com/nimiq/core-rs-albatross/releases/tag/v1.6.0 web