{"id":"CVE-2026-33471","kind":"vulnerability","aliases":["CVE-2026-33471","GHSA-6973-8887-87ff"],"related":[],"title":"nimiq-block has skip block quorum bypass via out-of-range BitSet indices & u16 truncation","description":"### Impact\n`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.\n\nThis 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.\n\n### Patches\n[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).\n\n### Workarounds\nNo known workarounds.","summary":"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.","severity":"critical","cvss":9.6,"epss":0.00217,"exploited":false,"exploited_at":null,"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"],"how_to_check":"- Check whether the project depends on `nimiq-block` in its `Cargo.lock` and note the locked version.\n- 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`).\n- 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.","status":"open","published_at":"2026-04-22T19:13:47+00:00","first_seen_at":"2026-10-30T15:37:53+00:00","triaged_at":"2026-10-30T15:39:21+00:00","updated_at":"2026-10-30T16:02:14+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-30T15:39:21Z","model":"claude-haiku-5-5","output":{"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.","reach":"network","title":"nimiq-block: forged skip block proof passes quorum check via index collision","impact":"high","summary":"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.","audience":"developers","category":"package","nicknames":[],"who_cares":["nimiq","rust","cargo","blockchain","self-hosted"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"forged chain proof accepted; validator quorum bypassed on the chain","analyst_note":"Confirm the affected and fixed version ranges against the GHSA page and the patch PR #3657, since the sources list both 1.3.0 and 1.7.2.","how_to_check":"- Check whether the project depends on `nimiq-block` in its `Cargo.lock` and note the locked version.\n- 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`).\n- Only nodes that verify skip block proofs from the Nimiq chain are relevant.","plain_action":"","needs_analyst":true,"not_affected_if":["no-nimiq-usage","not-verifying-skip-block-proofs"],"who_is_affected":"Teams running Nimiq node or light-client software, or other Rust code that calls `SkipBlockProof::verify` from the `nimiq-block` crate, are exposed because forged proofs would be accepted as valid. Code that does not use Nimiq's blockchain proof verification can skip it.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"critical"},"cost_usd":0.000806,"input_tokens":4494,"output_tokens":713,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'+1':183C '-1284':40B '-190':42B '-20':44B '-2026':19A,27A '-33471':20A,28A '-345':46B '-6973':22A '-87':24A '-8887':23A '/nimiq/core-rs-albatross/pull/3657)':211C '/nimiq/core-rs-albatross/releases/tag/v1.3.0).':220C '16':74B '2f':182C '65536':153C 'accept':103B 'aggreg':169C 'attack':137C 'bit':75B 'bitset':14A,120C 'bitset.len':117C 'block':3A,6A,31A,56B,61B,101B,190C 'blockchain':37B 'bls':107B,197C 'bypass':8A 'cargo':38B 'cast':123C 'check':115C 'collid':82B,159C 'comput':112C 'contain':145C 'count':64B 'crate':58B 'cve':18A,26A 'cwe':39B,41B,43B,45B 'factor':202C 'far':90B,179C 'fewer':91B,180C 'ff':25A 'forg':99B 'get':97B,139C 'ghsa':21A 'github.com':210C,219C 'github.com/nimiq/core-rs-albatross/pull/3657)':209C 'github.com/nimiq/core-rs-albatross/releases/tag/v1.3.0).':218C 'host':52B 'impact':109C 'in-rang':163C 'includ':213C 'index':68B,126C 'indic':15A,72B,81B,121C,150C,155C 'inflat':156C 'iter':119C 'known':223C 'len':157C 'length':69B 'lookup':134C 'make':171C 'malici':87B,176C 'multipli':194C 'multisignature.signers':144C 'nimiq':2A,30A,32A,47B,55B 'nimiq-block':1A,29A,54B 'of':35A 'one':106B 'onto':160C 'out-of-rang':10A,77B,146C 'packag':48B 'part':215C 'pass':188C 'patch':203C,205C 'possibl':173C 'proof':34A,62B,102B,191C 'proof-of-stake':33A 'quorum':7A,114C 'rang':13A,80B,149C,165C 'real':84B,184C 'repeat':105B 'requir':94B 'rust':49B,57B 'self':51B 'self-host':50B 'signatur':108B,198C 'signer':65B,95B,185C 'singl':196C 'skip':5A,60B,100B,189C 'skipblockproof':110C,141C 'slot':85B,129C,133C,167C,186C 'space':151C 'stake':36A 'truncat':17A,71B 'u16':16A,128C,131C,166C 'use':66B,116C 'usiz':125C 'v1.3.0':217C 'valid':88B,177C 'verif':63B,192C 'verifi':111C,142C 'via':9A 'vulner':208C 'workaround':221C,224C","nicknames":[],"mitigations":[],"who_affected":"Teams running Nimiq node or light-client software, or other Rust code that calls `SkipBlockProof::verify` from the `nimiq-block` crate, are exposed because forged proofs would be accepted as valid. Code that does not use Nimiq's blockchain proof verification can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-04-22T19:13:47+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-6973-8887-87ff","url":"https://github.com/advisories/GHSA-6973-8887-87ff","severity":"critical","published_at":"2026-04-22T19:13:47+00:00","modified_at":"2026-10-30T15:35:33+00:00","first_seen_at":"2026-10-30T15:37:53+00:00","fetched_at":"2026-10-30T15:37:53+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-33471","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33471","severity":null,"published_at":"2026-04-22T20:16:40+00:00","modified_at":"2026-10-26T21:10:00+00:00","first_seen_at":"2026-10-30T16:02:14+00:00","fetched_at":"2026-10-30T16:02:14+00:00","note":null}],"documents":[{"id":24343,"url":"https://api.github.com/repos/nimiq/core-rs-albatross/security-advisories/GHSA-6973-8887-87ff","title":"Maintainer's advisory: api.github.com","kind":"vendor","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's advisory: api.github.com"},{"id":24344,"url":"https://github.com/nimiq/core-rs-albatross/security/advisories/GHSA-6973-8887-87ff","title":"Maintainer's advisory: github.com","kind":"vendor","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's advisory: github.com"},{"id":24345,"url":"https://github.com/nimiq/core-rs-albatross/pull/3657","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":24346,"url":"https://github.com/nimiq/core-rs-albatross/commit/d02059053181ed8ddad6b59a0adfd661ef5cd823","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":24347,"url":"https://github.com/nimiq/core-rs-albatross/releases/tag/v1.3.0","title":"Release: github.com","kind":"release","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release: github.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}