CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-33471

CVE-2026-33471: Consensus Quorum Bypass via Integer Truncation in Nimiq core-rs-albatross

Alon Barad
Alon Barad
Software Engineer

Apr 22, 2026·6 min read·36 visits

Executive Summary (TL;DR)

A critical flaw in core-rs-albatross prior to v1.3.0 permits integer truncation during multi-signature aggregation. Attackers with a single validator slot can use high-value indices that truncate to their valid slot, falsely inflating the signer count to bypass the consensus quorum.

An integer truncation vulnerability in the Nimiq Albatross Proof-of-Stake implementation allows a malicious validator to bypass the 2f+1 consensus quorum requirement. By crafting a BitSet with out-of-bounds indices that alias to the same 16-bit validator slot, an attacker can forge valid multi-signatures to finalize arbitrary blocks or manipulate chain liveness.

Vulnerability Overview

The Nimiq Albatross protocol utilizes a Proof-of-Stake consensus algorithm requiring a strict supermajority to finalize state transitions. The core-rs-albatross component manages this consensus logic, handling cryptographic proofs such as SkipBlockProof, TendermintProof, and DoubleVoteProof. These proofs rely on multi-signatures aggregated from a defined validator set.

To represent participating signers, the implementation uses a BitSet where each set bit corresponds to a validator's slot index. The protocol verifies that the number of participants meets the required quorum before cryptographic verification occurs. This structural separation between quorum validation and cryptographic aggregation exposes a critical attack surface.

CVE-2026-33471 represents an improper input validation and integer truncation flaw in this verification pipeline. The bug during the signer aggregation phase allows an attacker to desynchronize the internal state between the quorum counter and the public key aggregator. This flaw breaks the fundamental safety and liveness guarantees of the Nimiq consensus mechanism.

Root Cause Analysis

The vulnerability originates from an architectural disconnect between how the signer count is evaluated and how validator public keys are retrieved. When processing a proof, the software first evaluates self.sig.signers.len() to ensure the number of provided signatures meets the Policy::TWO_F_PLUS_ONE threshold. This check evaluates the raw number of elements in the BitSet.

The underlying BitSet implementation stores indices as usize values. On a standard 64-bit architecture, a usize can hold values up to $2^{64}-1$. However, the maximum number of legitimate validator slots is strictly bounded by a 16-bit integer limit, typically defined by the Policy::SLOTS constant.

During the public key aggregation phase, the application iterates over the BitSet indices to fetch corresponding validator keys. The vulnerable logic unconditionally casts the usize index to a u16 using the as u16 operator. This truncation effectively applies a modulo $65536$ operation to the index. Consequently, a usize index of $X$, $X + 65536$, and $X + 131072$ will all truncate to the exact same u16 value $X$.

An attacker populates the BitSet with multiple artificially large indices that alias to the same valid validator slot. The initial quorum check validates these entries as distinct signers, incrementing the participant count. The aggregation loop then truncates these indices, fetching and aggregating the identical public key multiple times.

Code Analysis

The vulnerable implementation executes the quorum check and public key aggregation sequentially without bounds validation on the elements. The fold operation directly processes the unvalidated usize values from the BitSet.

// Vulnerable logic in core-rs-albatross
if self.sig.signers.len() < Policy::TWO_F_PLUS_ONE as usize {
    return false; // Quorum validation passes based on unvalidated length
}
 
let agg_pk = self.sig.signers.iter().fold(AggregatePublicKey::new(), |mut aggregate, slot| {
    // Unsafe cast from usize to u16 leads to integer truncation
    let pk = validators.get_validator_by_slot_number(slot as u16).voting_key;
    aggregate.aggregate(pk);
    aggregate
});

The mitigation introduced in commit d02059053181ed8ddad6b59a0adfd661ef5cd823 centralizes the validation logic into a new helper function named checked_signer_slots. This function enforces strict boundary checks before any type casting or aggregation occurs.

// Patched logic in core-rs-albatross v1.3.0
pub(crate) fn checked_signer_slots(signers: &BitSet) -> Option<Vec<u16>> {
    let mut slots = Vec::with_capacity(signers.len());
    for slot in signers.iter() {
        // Enforce Policy::SLOTS limit and prevent u16 overflow
        if slot >= Policy::SLOTS as usize || slot > u16::MAX as usize {
            return None;
        }
        slots.push(slot as u16);
    }
    Some(slots)
}

By returning an Option<Vec<u16>>, the protocol dictates that any proof containing out-of-bounds indices will fail verification entirely. The subsequent quorum check and aggregation logic are updated to consume this pre-validated vector, ensuring the validation count perfectly aligns with the parsed identities.

Exploitation Methodology

Exploitation requires the attacker to control at least one valid validator slot within the current consensus epoch. The attacker leverages this single slot to synthesize a multi-signature that falsely satisfies the network's supermajority requirement.

The attacker constructs a malicious BitSet containing their legitimate slot index $X$ alongside multiple aliased indices such as $X + 65536$ and $X + 131072$ up to the required quorum threshold. To the BitSet::len() function, this appears as a sufficient quantity of distinct signers. To the aggregation loop, this appears as multiple instances of the attacker's public key.

To produce a valid BLS multi-signature corresponding to this aggregated key, the attacker takes their valid individual signature and multiplies it by the number of aliases used. BLS signatures support linear aggregation, meaning $Sig(X) \times N$ perfectly authenticates against the aggregated public key $PK(X) \times N$. The verifier accepts the proof as a legitimate network supermajority.

Impact Assessment

The successful exploitation of this vulnerability results in a total compromise of the Nimiq Albatross consensus mechanism. An attacker with minimal actual network stake can assert unilateral control over network state transitions.

The primary consequence is the ability to finalize invalid blocks. By forging TendermintProof objects, the malicious validator can append arbitrary data to the blockchain ledger, execute double-spend attacks, or halt the processing of legitimate transactions entirely. The attacker bypasses the Byzantine Fault Tolerance guarantees that underpin the protocol's safety.

The attacker can also forge SkipBlockProof messages to manipulate the validator scheduling mechanism. This allows the adversary to force specific epochs or disrupt liveness by continuously advancing the chain without processing standard blocks. Equivocation proofs can similarly be bypassed, preventing the network from penalizing the attacker's malicious behavior.

Remediation and Mitigation

The sole effective remediation for CVE-2026-33471 is upgrading all consensus nodes to core-rs-albatross version 1.3.0 or later. This upgrade modifies the cryptographic verification pipeline to reject malformed multi-signature bitsets natively.

Operators must coordinate the update across the network to prevent consensus forks. Nodes running the unpatched software will accept maliciously crafted blocks that patched nodes reject, causing network divergence. No backward-compatible configuration workaround exists because the vulnerability resides in fundamental message parsing and cryptographic aggregation algorithms.

Network defenders can deploy monitoring logic to retroactively identify exploitation attempts. Security systems should inspect serialized consensus messages and flag any BitSet indices exceeding the Policy::SLOTS threshold or the u16::MAX boundary. Detecting such indices provides a high-confidence indicator of active exploitation attempts against the validator network.

Official Patches

NimiqOfficial v1.3.0 Release

Fix Analysis (1)

Technical Appendix

CVSS Score
9.6/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H

Affected Systems

Nimiq Proof-of-Stake ValidatorsSystems utilizing core-rs-albatross prior to v1.3.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
core-rs-albatross
Nimiq
< 1.3.01.3.0
AttributeDetail
CWE IDCWE-190, CWE-20, CWE-1284
Attack VectorNetwork
CVSS v3.19.6 (Critical)
ImpactConsensus Bypass, Remote Code Execution (State Transition Logic)
Exploit StatusProof of Concept Available
CISA KEVNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1203Exploitation for Client Execution
Execution
CWE-190
Integer Overflow or Wraparound

Integer Overflow or Wraparound (specifically truncation from usize to u16)

Vulnerability Timeline

Fix commit d020590 merged into the repository
2026-03-27
CVE-2026-33471 published
2026-04-22
Nimiq Albatross v1.3.0 released with the patch
2026-04-22

References & Sources

  • [1]GitHub Security Advisory GHSA-6973-8887-87ff
  • [2]Fix Commit d020590
  • [3]Nimiq core-rs-albatross v1.3.0 Release Notes
  • [4]CVE-2026-33471 Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•28 minutes ago•CVE-2026-72792
6.9

CVE-2026-72792: Information Disclosure via Tag API Endpoint in SiYuan

SiYuan before version v3.7.4 is affected by an information disclosure vulnerability in the `/api/tag/getTag` endpoint. Under publish mode, this endpoint returns tag labels and occurrence counts from password-protected documents to unauthenticated readers, allowing them to enumerate protected vocabulary and internal metadata without providing the document's publish password.

Amit Schendel
Amit Schendel
1 views•5 min read
•about 1 hour ago•CVE-2026-71486
4.3

CVE-2026-71486: Uncontrolled Resource Consumption in vLLM Derender Endpoints

CVE-2026-71486 (GHSA-8737-qx52-hjff) is an uncontrolled resource consumption vulnerability in vLLM's derender endpoints before version 0.26.0. An authenticated attacker can supply crafted, deeply nested token structures to exhaust CPU and memory resources, resulting in server denial of service (DoS) or Out of Memory (OOM) crashes. This vulnerability stems from missing input-bounds validation before passing user-supplied structures to computationally intensive decoding routines.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 2 hours ago•CVE-2026-73555
5.3

CVE-2026-73555: Environment and Information Disclosure via Exception Handling in vLLM

An information disclosure vulnerability in vLLM prior to version 0.26.0 allows unauthenticated remote attackers to trigger validation errors that expose highly sensitive host machine metadata, absolute paths, environment structures, and usernames. This flaw stems from improper serialization of Pydantic exceptions and an inadequate fallback sanitization function.

Alon Barad
Alon Barad
3 views•5 min read
•about 3 hours ago•CVE-2026-73556
5.3

CVE-2026-73556: Regular Expression Denial of Service (ReDoS) in vLLM lm-format-enforcer Backend

CVE-2026-73556 is a Regular Expression Denial of Service (ReDoS) vulnerability in the vLLM inference engine's lm-format-enforcer structured-output backend. Prior to version 0.26.0, lack of compilation timeouts or complexity validation for user-supplied regular expressions in the structured_outputs.regex parameter allowed unauthenticated remote attackers to trigger CPU exhaustion and block the core execution loop.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 4 hours ago•CVE-2026-73557
6.3

CVE-2026-73557: Race Condition in PyTorch Tensor Invariant Checks within vLLM Engine

CVE-2026-73557 details a race condition vulnerability in the vLLM serving framework, arising from the thread-unsafe usage of PyTorch's process-global sparse tensor invariant check manager. When processing concurrent requests with custom prompt or multimodal embeddings, concurrent thread execution can disable global tensor integrity checks. An unauthenticated attacker can leverage this timing window to submit malformed sparse coordinate (COO) tensors containing out-of-bounds indices, causing memory corruption and process crashes (Denial of Service).

Alon Barad
Alon Barad
4 views•5 min read
•about 5 hours ago•CVE-2026-73842
9.0

CVE-2026-73842: Missing Authentication and Authorization on Internal Management Listener in OpenChoreo cluster-gateway

A critical-severity missing authentication and privilege management vulnerability was identified in the OpenChoreo cluster-gateway component. The gateway exposed internal management endpoints, including arbitrary Kubernetes proxying and execution interfaces, on an unauthenticated port. An adjacent attacker within the control-plane network can bypass RBAC controls entirely and gain administrative control over all connected data planes.

Alon Barad
Alon Barad
5 views•6 min read