CVE-2026-28402
HighSummary
In versions prior to 1.2.2, the nimiq/core-rs-albatross library has a vulnerability that allows a malicious or compromised validator to publish a macro block proposal with a mismatched `header.body_root`. This can lead to validator crashes due to verification mismatches.
Risk Assessment
This vulnerability only affects validator nodes, which may lead to their crashes and disrupt the operation of the Nimiq network. If exploited, a malicious validator could destabilize the system.
Recommendation
It is recommended to upgrade to version 1.2.2 or later to patch this vulnerability by adding `body_root` verification in proposals. No known workarounds are available.
Other vulnerabilities in nimiq/core-rs-albatross
See all- CVE-2026-34061Medium
nimiq/core-rs-albatross prior to version 1.3.0 contains a vulnerability where an elected validator proposer can send an election macro block whose header.interlink does not match the canonical next interlink. Honest validators accept the proposal because verify_macro_block_proposal() does not check the interlink binding for election blocks. The same finalized block is later rejected by verify_block() with InvalidInterlink, but this happens after Tendermint decides, potentially causing consensus issues.
- CVE-2026-33184High
In nimiq/core-rs-albatross (a Rust implementation of the Nimiq Proof-of-Stake protocol) prior to version 1.3.0, the handshake handler accepts a peer-supplied limit of 0 and stores it unchanged. In the HandshakeAck path, limit 0 returns zero contacts, appearing benign. Later, in the Established state, computing self.peer_list_limit.unwrap() as usize - 1 with limit 0 wraps to usize::MAX, causing a panic when attempting memory allocation.
Original NVD description (English source)
nimiq/core-rs-albatross is a Rust implementation of the Nimiq Proof-of-Stake protocol based on the Albatross consensus algorithm. Prior to version 1.2.2, a malicious or compromised validator that is elected as proposer can publish a macro block proposal where `header.body_root` does not match the actual macro body hash. The proposal can pass proposal verification because the macro proposal verification path validates the header but does not validate the binding `body_root == hash(body)`; later code expects this binding and may panic on mismatch, crashing validators. Note that the impact is only for validator nodes. The patch for this vulnerability is formally released as part of v1.2.2. The patch adds the corresponding body root verification in the proposal checks. No known workarounds are available.

