---
id: "CVE-2026-33471"
kind: "vulnerability"
aliases: ["CVE-2026-33471", "GHSA-6973-8887-87ff"]
title: "nimiq-block has skip block quorum bypass via out-of-range BitSet indices & u16 truncation"
severity: "critical"
cvss: 9.6
epss: 0.00217
exploited: false
status: "open"
category: "package"
products: [{"name": "nimiq-block", "fixed": ["1.7.2"], "affected": "< 1.3.0", "ecosystem": "cargo"}, {"name": "nimiq proof-of-stake", "fixed": ["1.3.0"], "affected": "< 1.3.0", "ecosystem": "vendor"}]
ecosystems: ["cargo", "vendor"]
tags: ["blockchain", "cargo", "cwe-1284", "cwe-190", "cwe-20", "cwe-345", "nimiq", "package", "rust", "self-hosted"]
not_affected_if: ["no-nimiq-usage", "not-verifying-skip-block-proofs"]
published_at: "2026-04-22T19:13:47+00:00"
first_seen_at: "2026-10-30T15:37:53+00:00"
updated_at: "2026-10-30T16:02:14+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-6973-8887-87ff", "first_seen_at": "2026-10-30T15:37:53+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-33471", "first_seen_at": "2026-10-30T16:02:14+00:00"}]
---

# nimiq-block has skip block quorum bypass via out-of-range BitSet indices & u16 truncation

The nimiq-block Rust crate's skip block proof verification counts signers using an index length but truncates indices to 16 bits, so out-of-range indices collide with real slots. A malicious validator with far fewer than the required signers can get a forged skip block proof accepted by repeating one BLS signature.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- cargo:nimiq-block affected < 1.3.0 fixed 1.7.2
- vendor:nimiq proof-of-stake affected < 1.3.0 fixed 1.3.0

## How to check

- Check whether the project depends on `nimiq-block` in its `Cargo.lock` and note the locked version.
- Confirm the version is below `1.7.2` (the advisory's product range also lists `1.3.0` as the first patched release in its patch notes; the affected range is recorded as below `1.3.0`).
- Only nodes that verify skip block proofs from the Nimiq chain are relevant.

## Fix

- `nimiq-block`: move to `1.7.2` (fixed version per the advisory's product range); the patch is also included in `v1.3.0` per the maintainer's patch notes.

## Timeline

- 2026-10-30T15:37:53+00:00 ghsa https://github.com/advisories/GHSA-6973-8887-87ff
- 2026-10-30T16:02:14+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-33471

## Documents

- [advisory] Maintainer's advisory: api.github.com https://api.github.com/repos/nimiq/core-rs-albatross/security-advisories/GHSA-6973-8887-87ff
- [advisory] Maintainer's advisory: github.com https://github.com/nimiq/core-rs-albatross/security/advisories/GHSA-6973-8887-87ff
- [fix] Patch: github.com https://github.com/nimiq/core-rs-albatross/pull/3657
- [fix] Patch: github.com https://github.com/nimiq/core-rs-albatross/commit/d02059053181ed8ddad6b59a0adfd661ef5cd823
- [fix] Release: github.com https://github.com/nimiq/core-rs-albatross/releases/tag/v1.3.0

## From the sources

### Impact
`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.

### Patches
[The patch for this vulnerability](https://github.com/nimiq/core-rs-albatross/pull/3657) is included as part of [v1.3.0](https://github.com/nimiq/core-rs-albatross/releases/tag/v1.3.0).

### Workarounds
No known workarounds.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
