SkipBlockProof::verify computes its quorum check using BitSet.len(), then iterates BitSet indices and casts each usize index to u16 (slot as u16) for slot lookup. If an attacker can get a SkipBlockProof verified where MultiSignature.signers contains out-of-range indices spaced by 65536, these indices inflate len() but collide onto the same in-range u16 slot during aggregation.
This makes it possible for a malicious validator with far fewer than 2f+1 real signer slots to pass skip block proof verification by multiplying a single BLS signature by the same factor.
The patch for this vulnerability is included as part of v1.3.0.
No known workarounds.
| Score | Percentile |
|---|---|
| 0.03% | 8.62% |
| Base score | Version | Severity | Vector |
|---|---|---|---|
| 9.6 | 3.1 | — |
|
| Type | Value |
|---|---|
| GHSA | GHSA-6973-8887-87ff ↗ |
| CVE | CVE-2026-33471 ↗ |
Vulnerable version ranges and first patched releases as published by GitHub.
| Ecosystem | Package | Vulnerable range | First patched | Vulnerable functions |
|---|---|---|---|---|
| rust | nimiq-block | <= 0.2.0 | — | — |