Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAccess chosen-plaintext encryption oracle
-
DeliveryCollect empty-AAD ciphertexts across nonces
-
ExploitCancel nonce keystreams via XOR
-
ExecutionSubmit forged ciphertext with valid tag
-
ImpactVictim 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (bcorg).
CVSS VectorVendor: bcorg
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
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.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Crafted small-order or out-of-range Diffie-Hellman values passed to DHAgreement.CalculateAgreement in Bouncy Castle C# (
Memory exhaustion in Bouncy Castle C# (bc-csharp) before 2.7.0 allows a remote, unauthenticated attacker to cause a deni
Memory-exhaustion denial of service in the C# DTLS implementation of Bouncy Castle (bc-csharp) before 2.7.0 lets a remot
Denial of service in Legion of the Bouncy Castle's C# cryptography library (bc-csharp) before 2.7.0 lets an unauthentica
Uncontrolled recursion in Bouncy Castle C# (bc-csharp) before 2.7.0 allows unauthenticated remote attackers to crash or
Denial of service in Legion of the Bouncy Castle Inc. bc-csharp before 2.7.0 allows unauthenticated remote attackers to
Denial of service in the Legion of the Bouncy Castle C# library (bc-csharp) affects all versions before 2.7.0, where qua
Forged X.509 attribute certificates are accepted as valid by Legion of the Bouncy Castle Inc. bc-csharp versions before
Observable padding discrepancy in the IES/ECIES decryption path of Bouncy Castle C# (bc-csharp) before 2.7.0 lets an una
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
Information disclosure in Bouncy Castle C# (bc-csharp) versions before 2.7.0 allows unauthenticated remote attackers to
Certificates that should be rejected by PKIX name constraints are accepted by Legion of the Bouncy Castle Inc. bc-csharp
EUVD-2026-91205
GHSA-m3jv-gj9x-qwrv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB