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·18 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

•about 11 hours ago•GHSA-G72G-R7M4-9X4G
6.3

GHSA-G72G-R7M4-9X4G: Insufficient Session Expiration of OAuth Tokens in NocoDB

NocoDB is subject to an insufficient session expiration vulnerability where OAuth access and refresh tokens are not invalidated or revoked during security-sensitive actions such as password changes, forgot-password requests, or password resets. This allows an attacker possessing an active OAuth token to maintain unauthorized persistence.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 14 hours ago•GHSA-FGMC-2HQJ-86V4
6.9

GHSA-FGMC-2HQJ-86V4: Default Administrative Credentials in vantage6-server

A vulnerability in the vantage6 federated learning framework allows unauthenticated remote attackers to gain administrative control of the server via hardcoded default credentials (root/root) when deployed under default configurations in versions 4.2.3 and below.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 15 hours ago•GHSA-X9F6-9RVM-MMRG
6.9

GHSA-X9F6-9RVM-MMRG: Improper Access Control and Volume Mount Isolation Bypass in vantage6 Node

An improper access control vulnerability in the vantage6 node component allows concurrently running algorithm containers to read and modify sensitive input and output files of other tasks. The lack of strict workspace directory isolation exposes a significant attack surface in multi-tenant or federated environments where untrusted algorithms are executed.

Amit Schendel
Amit Schendel
3 views•4 min read
•about 18 hours ago•CVE-2026-47760
8.7

CVE-2026-47760: Cross-Site Scripting (XSS) via SVG Namespace Sanitizer Bypass in TinyMCE

TinyMCE versions 6.8.0 through 7.0.1 contain a high-severity Cross-Site Scripting (XSS) vulnerability. The flaw exists in the custom HTML parser and sanitizer module, which incorrectly manages SVG namespace scopes when parsing nested elements. A low-privileged or unauthenticated attacker can submit a crafted HTML payload containing nested SVG structures to bypass sanitization filters, leading to arbitrary JavaScript execution in the context of the victim's browser session.

Alon Barad
Alon Barad
12 views•7 min read
•about 19 hours ago•CVE-2026-47759
8.7

CVE-2026-47759: Stored Cross-Site Scripting (XSS) via Unsanitized data-mce-* Serialization Bypass in TinyMCE

CVE-2026-47759 is a critical stored Cross-Site Scripting (XSS) vulnerability affecting multiple active branches of the TinyMCE rich text editor. The flaw resides in the editor's handling of user-controlled, prefixed internal attributes, such as data-mce-href, data-mce-src, and data-mce-style. When processing raw HTML inputs, TinyMCE's internal validation schema neglects to inspect these custom prefixed attributes. During HTML serialization, the editor's engine extracts these unsanitized values and copies them back into standard executable attributes, overwriting any previously sanitized standard values and leading to execution of arbitrary code.

Amit Schendel
Amit Schendel
8 views•7 min read
•about 20 hours ago•CVE-2026-47762
8.7

CVE-2026-47762: Stored Cross-Site Scripting (XSS) in TinyMCE Protect Pattern Restoration

A high-severity stored Cross-Site Scripting (XSS) vulnerability was identified in the TinyMCE rich text editor. The flaw exists in the handling of the 'protect' configuration option, where forged placeholder comments containing malicious payloads bypass the editor's sanitization routines and execute arbitrary JavaScript during serialization and content restoration.

Amit Schendel
Amit Schendel
7 views•8 min read