CVE-2026-33471 Overview
A critical integer truncation vulnerability exists in the nimiq-block crate used in Nimiq's Rust implementation. The vulnerability is located in the SkipBlockProof::verify function, which computes its quorum check using BitSet.len() and then iterates BitSet indices while casting each usize index to u16 (slot as u16) for slot lookup. This improper type conversion allows attackers to bypass consensus quorum requirements through integer overflow manipulation.
Critical Impact
A malicious validator with fewer than the required 2f+1 signer slots can pass skip block proof verification by exploiting integer truncation to inflate quorum counts, potentially compromising blockchain consensus integrity.
Affected Products
- nimiq-block (Rust crate) prior to version 1.3.0
- Nimiq core-rs-albatross prior to v1.3.0
Discovery Timeline
- April 22, 2026 - CVE-2026-33471 published to NVD
- April 22, 2026 - Last updated in NVD database
Technical Details for CVE-2026-33471
Vulnerability Analysis
This vulnerability stems from improper handling of integer type conversions during cryptographic signature verification in a blockchain consensus mechanism. The SkipBlockProof::verify function uses BitSet.len() to count the number of signers for quorum validation, but subsequently casts usize indices to u16 for slot lookups. When an attacker crafts a SkipBlockProof where the MultiSignature.signers BitSet contains out-of-range indices spaced by 65536 (2^16), these indices artificially inflate the len() count while colliding onto the same in-range u16 slot during aggregation due to integer truncation.
This creates a scenario where a single BLS signature can be multiplied by the same factor as the colliding indices, allowing a malicious validator to satisfy quorum requirements without actually having the requisite number of unique signer slots.
Root Cause
The root cause is improper input validation (CWE-20) combined with unsafe integer truncation. The code fails to validate that BitSet indices are within the valid range for u16 values before performing the type cast. The usize to u16 conversion silently truncates values, causing indices like 65536, 131072, and 196608 to all map to slot 0, while the original len() calculation counts each as a distinct signer.
Attack Vector
The attack is network-based and requires low privileges (validator status). An attacker must be able to submit a crafted SkipBlockProof to the network. The exploitation process involves:
- Constructing a SkipBlockProof with a MultiSignature.signers BitSet containing carefully chosen indices
- Spacing indices by 65536 to ensure they map to the same u16 slot after truncation
- Using a single valid BLS signature that corresponds to the target slot
- Submitting the proof to pass quorum verification with far fewer actual signers than required
The vulnerability enables bypass of the Byzantine fault tolerance threshold (2f+1), potentially allowing consensus manipulation without controlling the required number of validator slots.
Detection Methods for CVE-2026-33471
Indicators of Compromise
- Unexpected skip block proofs accepted with abnormally high signer counts that don't match actual validator participation
- BitSet indices in MultiSignature.signers exceeding 65535 (maximum u16 value)
- Anomalous BLS signature aggregation patterns where multiple indices resolve to identical slots
- Skip blocks being produced without corresponding validator participation evidence
Detection Strategies
- Monitor skip block proof submissions for BitSet indices exceeding the valid u16 range (0-65535)
- Implement additional validation layers that cross-check BitSet.len() against actual unique slot counts after u16 casting
- Deploy network monitoring to detect unusual patterns in skip block proof frequency or validator participation metrics
- Audit validator node logs for signature verification anomalies
Monitoring Recommendations
- Enable verbose logging for SkipBlockProof::verify operations to capture BitSet contents
- Set up alerts for skip block proofs where the claimed signer count differs significantly from active validator participation
- Monitor blockchain state for unexpected skip blocks that lack corresponding validator attestations
- Track validator reputation metrics for anomalous behavior patterns
How to Mitigate CVE-2026-33471
Immediate Actions Required
- Upgrade to nimiq-block version 1.3.0 or later immediately
- Review blockchain state for any potentially exploited skip block proofs prior to the upgrade
- Temporarily increase monitoring on skip block proof submissions if immediate upgrade is not possible
- Coordinate with network operators to ensure consistent patch deployment across validator nodes
Patch Information
The vulnerability has been addressed in nimiq-block version 1.3.0. The fix is available in the GitHub Commit Details. The patched version includes proper bounds checking to ensure BitSet indices are within valid u16 range before quorum calculation and slot lookup operations.
Upgrade instructions and release notes are available in the GitHub Release v1.3.0. For additional details on the vulnerability and remediation, refer to the GitHub Security Advisory GHSA-6973.
Workarounds
- No official workarounds are available for this vulnerability
- Upgrading to version 1.3.0 is the only recommended remediation
- Network operators may consider implementing additional proof validation at the network layer as a temporary measure
- Increased monitoring and manual review of skip block proofs can help detect exploitation attempts until patching is complete
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

