Skip to main content

Bouncy Castle C# CVE-2026-16000

| EUVDEUVD-2026-91205 HIGH
Missing Cryptographic Step (CWE-325)
2026-10-02 bcorg GHSA-m3jv-gj9x-qwrv
8.7
CVSS 4.0 · Vendor: bcorg
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Access chosen-plaintext encryption oracle
  2. Delivery
    Collect empty-AAD ciphertexts across nonces
  3. Exploit
    Cancel nonce keystreams via XOR
  4. Execution
    Submit forged ciphertext with valid tag
  5. Impact
    Victim accepts forged authenticated message

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Cryptographic step completeness
Exploitation Conditions

Exploitation requires that the application use the DSTU 7624 (Kalyna) KCcmBlockCipher class directly AND encrypt messages with no associated data (empty AAD) - the exact condition under which the nonce-binding G1 block was skipped. The attacker must also have a chosen/known-plaintext encryption oracle to obtain ciphertext+tag pairs under at least two nonces (the PoC uses three empty-AAD queries) to cancel the nonce-dependent keystreams. Limiting factors that reduce real-world exposure: applications that always supply associated data, use other AEAD modes, or do not use DSTU 7624 are unaffected; the attack needs oracle access to chosen plaintexts; and only bc-csharp versions before 2.7.0 are vulnerable.

Impact

The vendor CVSS 4.0 score of 8.7 (AV:N/AC:L/PR:N/UI:N) with VI:H and VC:N/VA:N correctly frames this as a high-severity, integrity-only cryptographic forgery - the DSTU 7624 (Kalyna) KCcmBlockCipher fails to bind the nonce into the CBC-MAC when no associated data is supplied, letting an attacker forge valid authentication tags. There is no CISA KEV listing and no EPSS score in the provided data, so active or widespread exploitation is unconfirmed; no standalone weaponized exploit was identified at time of analysis, though the patch commit's regression test publicly contains the exact cross-nonce XOR forgery construction, which materially lowers the research barrier. The key conflict is that the CVSS vector (AV:N/AC:L/PR:N) implies trivial remote exploitation, but it does not capture the real preconditions: the attacker needs a chosen/known-plaintext encryption oracle, the application must call KCcmBlockCipher directly with empty associated data, and DSTU 7624 is a niche Ukrainian national cipher rarely used outside Ukraine-specific deployments. Net assessment: a genuine, patch-worthy integrity flaw that is critical for the small population of affected applications, but a lower real-world priority than the raw 8.7 suggests because the exploitable configuration is narrow. A fix is available (bc-csharp 2.7.0), so remediation is simply upgrading.

Exploit ScenarioDerived

An attacker who can submit chosen plaintexts to a service that encrypts them with KCcmBlockCipher and supplies no associated data collects a few ciphertext+tag pairs across different nonces, then XORs them to construct a valid ciphertext and authentication tag for a message/nonce that was never actually encrypted - e.g., forging an authenticated record or command the receiver accepts as genuine. No standalone public exploit was identified, but the patch commit's regression test publicly demonstrates the precise three-query forgery algorithm.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 02, 2026

Authentication-tag forgery in Legion of the Bouncy Castle Inc. bc-csharp (Bouncy Castle C#) before 2.7.0 lets a remote, unauthenticated attacker who can obtain ciphertext-and-tag pairs for known or chosen plaintexts under at least two nonces forge a ciphertext that passes tag verification under a nonce that was never queried, because the DSTU 7624 (Kalyna) CCM implementation (KCcmBlockCipher) skipped the nonce-binding G1 block whenever a message carried no associated data. Only applications that call KCcmBlockCipher directly with empty AAD are affected, and the impact is integrity-only (VI:H, VC:N, VA:N), consistent with the vendor's CVSS 4.0 score of 8.7 and our independent CVSS 3.1 assessment of AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N. No public exploit was identified at time of analysis and the issue is not in CISA KEV, but the upstream fix commit publicly includes a regression test that assembles exactly such a cross-nonce forgery using three empty-AAD encryption queries, so the attack technique is documented; practical exposure is narrowed by the requirement for an encryption oracle and for empty-AAD usage of this specific mode.

RemediationAI

Vendor-released patch: upgrade bc-csharp to 2.7.0 or later, which is the fixed release identified by the advisory's 'before 2.7.0' affected range and corresponds to upstream commit b01e9e6c0e231b90867fbaf03bf148bde6f9ccfb (advisory: https://github.com/bcgit/bc-csharp/wiki/CVE-2026-16000); the change makes G1 nonce binding unconditional, so tags computed on the old empty-AAD code path will no longer verify and any such stored ciphertexts should be decrypted/re-encrypted (and affected keys rekeyed) as part of the upgrade. If an immediate upgrade is not possible, the most effective compensating control is to stop using empty AAD: ensure every KCcmBlockCipher operation supplies at least one full engine block of associated data (16 bytes for the 128-bit DSTU 7624 variant, 32 or 64 bytes for the 256-/512-bit variants), since the vulnerable code did process G1 whenever associated text length was a non-zero multiple of the block size - the trade-offs are that this changes the MAC/wire format and must be coordinated with every peer, and it is only a valid mitigation if empty-AAD messages are rejected at the application layer. Additional interim controls: refuse to decrypt or accept any DSTU 7624 CCM message that arrives with no associated data, switch to a different AEAD mode or a different DSTU 7624 implementation until the upgrade is deployed, and tightly restrict or rate-limit any service or API that exposes a chosen/known-plaintext encryption oracle under attacker-selected nonces, since the attack depends on collecting ciphertext+tag pairs across multiple nonces; note that exploitation leaves no authentication failure on the receiving side, so undetectable forgeries may already exist for keys used with empty AAD and those keys should be rotated.

Affected VersionsENISA

bc-csharp 0 <2.7.0

Affected Packages

euvd bc_csharp fix: 2.7.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

DSTU 7624 (Kalyna) is a Ukrainian national block cipher supported by Bouncy Castle's C

library (bc-csharp); the affected code is the KCcmBlockCipher class, which implements the CCM AEAD mode (counter-mode encryption combined with a CBC-MAC authentication tag) on top of a Dstu7624Engine configured with 128-, 256- or 512-bit blocks. In DSTU 7624 CCM the MAC computation begins with a G1 block that folds the nonce, the message length and the parameter/MAC-size flags into the CBC-MAC chain, and the ciphertext tag is then masked with a nonce-dependent keystream; the associated-data-present indicator is carried as a flag bit inside G1 rather than acting as a gate on whether G1 is computed. The vulnerable code in bc-csharp before 2.7.0 called ProcessAAD (and therefore processed G1) only when associated text was present, so for empty-AAD messages the tag degenerated into a CBC-MAC over the plaintext alone that was completely independent of the nonce - a classic CWE-325 Missing Cryptographic Step. The upstream fix (commit b01e9e6c0e231b90867fbaf03bf148bde6f9ccfb) makes ProcessAAD process G1 unconditionally, sets the flag via getFlag(hasAssocText, macSize), returns early only after G1 has been folded in, and unconditionally invokes ProcessAAD from ProcessPacket even when the associated-text length is zero. Because the tag was nonce-independent, an attacker holding three empty-AAD encryption-oracle outputs (encryption of zeros under nonce1, of zeros under nonce2, and of a chosen plaintext under nonce2) can XOR the nonce-2 counter keystream and the E_K(0) terms out of the tag to produce a forged ciphertext+tag that verifies under nonce1, which the newly added CcmModeNonceBindingTest regression test demonstrates and requires the decryptor to reject.

Know when Bc Csharp gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (bcorg) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Network-reachable crypto API with no privileges or UI, deterministic forgery once a chosen-plaintext oracle is available; integrity-only (tag forgery), no confidentiality or availability impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (bcorg).

CVSS VectorVendor: bcorg

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Missing cryptographic step in the DSTU 7624 CCM mode implementation (KCcmBlockCipher) in Legion of the Bouncy Castle Inc. bc-csharp before 2.7.0 allows an attacker who can observe encrypted messages of known or chosen content to forge ciphertexts with valid authentication tags, via messages encrypted without associated data. The cause is that the G1 block, which binds the nonce, the message length and the parameter flags into the CBC-MAC, was processed only when associated data was present. Without associated data the tag was a CBC-MAC of the plaintext alone, independent of the nonce. Only applications that use KCcmBlockCipher directly and supply no associated data are affected.

Executive ViewAI

Why It Matters

CVE-2026-16000 is a high-severity integrity flaw in Bouncy Castle C

(bc-csharp) before 2.7.0 affecting applications that use the Kalyna CCM cipher directly with empty associated data. Publicly available exploit code exists, but the issue is not in CISA KEV; an unauthenticated remote attacker could forge ciphertext that passes tag verification, causing affected systems to trust tampered data. Leadership should prioritize patching to 2.7.0 and verifying whether this specific cryptographic mode is in use across the application portfolio.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 85% exploitable
Prevalence
High
widely deployed .NET crypto library, though DSTU 7624 path is niche
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0
CVE-2026-63569 CRITICAL
9.1 Oct 02

Crafted small-order or out-of-range Diffie-Hellman values passed to DHAgreement.CalculateAgreement in Bouncy Castle C# (

CVE-2026-103603 HIGH
8.7 Oct 02

Memory exhaustion in Bouncy Castle C# (bc-csharp) before 2.7.0 allows a remote, unauthenticated attacker to cause a deni

CVE-2026-63566 HIGH
8.7 Oct 02

Memory-exhaustion denial of service in the C# DTLS implementation of Bouncy Castle (bc-csharp) before 2.7.0 lets a remot

CVE-2026-63568 HIGH
8.7 Oct 02

Denial of service in Legion of the Bouncy Castle's C# cryptography library (bc-csharp) before 2.7.0 lets an unauthentica

CVE-2026-103600 HIGH
8.7 Oct 02

Uncontrolled recursion in Bouncy Castle C# (bc-csharp) before 2.7.0 allows unauthenticated remote attackers to crash or

CVE-2026-63574 HIGH
8.7 Oct 02

Denial of service in Legion of the Bouncy Castle Inc. bc-csharp before 2.7.0 allows unauthenticated remote attackers to

CVE-2026-103604 HIGH
8.7 Oct 02

Denial of service in the Legion of the Bouncy Castle C# library (bc-csharp) affects all versions before 2.7.0, where qua

CVE-2026-63571 HIGH
8.7 Oct 02

Forged X.509 attribute certificates are accepted as valid by Legion of the Bouncy Castle Inc. bc-csharp versions before

CVE-2026-63567 HIGH
8.2 Oct 02

Observable padding discrepancy in the IES/ECIES decryption path of Bouncy Castle C# (bc-csharp) before 2.7.0 lets an una

CVE-2026-63573 HIGH
8.2 Oct 02

RSA PKCS#1 v1.5 key transport in the Bouncy Castle C# (bc-csharp) CMS implementation before 2.7.0 is vulnerable to a Ble

CVE-2026-103601 HIGH
8.2 Oct 02

Information disclosure in Bouncy Castle C# (bc-csharp) versions before 2.7.0 allows unauthenticated remote attackers to

CVE-2026-103602 HIGH
8.2 Oct 02

Certificates that should be rejected by PKIX name constraints are accepted by Legion of the Bouncy Castle Inc. bc-csharp

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy