CVE-2025-48946
Executive Summary
CVE-2025-48946 is a theoretical design flaw in the HQC (Hamming Quasi-Cyclic) post-quantum cryptographic algorithm as implemented in the liboqs library. The vulnerability stems from a structural weakness in HQC that causes a large number of malformed ciphertexts to share the same implicit rejection value. While no concrete exploit has been demonstrated, this flaw undermines the security guarantees of HQC, particularly in protocols that rely on key derivation from shared secrets. The liboqs project has responded by disabling HQC by default in version 0.13.0, but no patch for the underlying algorithm is available. The CVSS score is 3.7 (Low), reflecting the theoretical nature of the risk and the lack of a known attack vector.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
liboqs is a C-language cryptographic library that provides implementations of post-quantum cryptography algorithms. It is used in various open-source projects and research initiatives. The HQC algorithm is a candidate in the NIST post-quantum cryptography standardization process. The vulnerability affects any application or system that uses liboqs with HQC enabled, particularly in protocols that derive keys from shared secrets. Since no patch exists, the supply chain risk is elevated for any project that has not updated to liboqs 0.13.0 or later, where HQC is disabled by default.
CVSS Breakdown & Threat Level
- CVSS Score: 3.7 (Low)
- Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
- Attack Vector: Network (AV:N) – The vulnerability can be triggered remotely.
- Attack Complexity: High (AC:H) – Exploitation requires specific conditions and knowledge of the protocol.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – The vulnerability does not affect other components.
- Confidentiality Impact: Low (C:L) – Potential for limited information disclosure.
- Integrity Impact: None (I:N) – No data integrity risk.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Low. The vulnerability is theoretical with no known exploit. However, it is critical for any system using HQC in key derivation protocols.
Deep Dive & Mechanics
The HQC algorithm is a code-based post-quantum key encapsulation mechanism (KEM). Its security relies on the difficulty of decoding random linear codes. The design flaw identified in CVE-2025-48946 relates to the implicit rejection mechanism used when a ciphertext is malformed. In HQC, when a ciphertext fails validation, the algorithm outputs a deterministic shared secret derived from the ciphertext and the private key. The flaw causes a large number of distinct malformed ciphertexts to produce the same implicit rejection value. This reduces the entropy of the shared secret in failure cases, potentially allowing an attacker to predict or influence the derived key.
The issue is not a direct attack on the HQC algorithm's core security, but rather a protocol-level weakness. In protocols that use the KEM output directly for key derivation (e.g., TLS 1.3), an attacker who can force repeated decryption failures could observe the same derived key multiple times, potentially leaking information about the private key or enabling a partitioning attack. The HQC team is working on an updated algorithm specification to address this flaw.
Vulnerable vs. Patched Code
Vulnerable Code (liboqs < 0.13.0): The HQC implementation in liboqs prior to version 0.13.0 includes the flawed implicit rejection logic. The specific code is in the HQC decapsulation function, where malformed ciphertexts are handled.
// Vulnerable: Implicit rejection produces deterministic shared secret
void hqc_decaps(const uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *private_key) {
// ... decryption logic ...
if (ciphertext_is_malformed) {
// Flaw: Many malformed ciphertexts produce the same shared secret
derive_shared_secret(ciphertext, private_key, shared_secret);
}
}
Patched Code (liboqs >= 0.13.0): No patch exists for the HQC algorithm itself. Instead, HQC is disabled by default in liboqs 0.13.0. Users must explicitly enable it and accept the risk.
// Patched: HQC is disabled by default
// In liboqs 0.13.0, HQC is not included in the default algorithm list
// Users must call OQS_KEM_new("HQC-128") explicitly
Exploitation & Lab Setup
Red Team
Objective: Demonstrate the theoretical weakness by forcing repeated implicit rejection values.
Prerequisites:
- A system running liboqs < 0.13.0 with HQC enabled.
- Ability to send malformed ciphertexts to the decapsulation function.
Steps:
- Set up a test environment with liboqs 0.12.0 or earlier.
- Generate a key pair for HQC-128.
- Create a script that sends a large number of malformed ciphertexts to the decapsulation function.
- Observe that many distinct malformed ciphertexts produce the same shared secret.
- Document the collision rate to demonstrate the reduced entropy.
Example Python script (conceptual):
import liboqs
kem = liboqs.KeyEncapsulation('HQC-128')
public_key = kem.generate_keypair()
private_key = kem.export_secret_key()
# Send malformed ciphertexts
for i in range(1000):
malformed_ct = b'\x00' * 32 # Example malformed ciphertext
shared_secret = kem.decapsulate_secret(malformed_ct)
print(f"Ciphertext {i}: {shared_secret.hex()}")
Blue Team
Objective: Detect and prevent exploitation of the HQC flaw.
Detection:
- Monitor for repeated use of the same shared secret in key derivation protocols.
- Log all HQC decapsulation failures and analyze for patterns.
- Use network monitoring to detect unusual ciphertext patterns.
Prevention:
- Upgrade to liboqs 0.13.0 or later, where HQC is disabled by default.
- If HQC is required, implement additional entropy sources in key derivation.
- Use alternative KEMs like Kyber or ML-KEM.
Indicators of Compromise (IOCs)
- Network: Unusual number of HQC decapsulation failures from the same source.
- Logs: Repeated identical shared secrets in key derivation logs.
- File: Presence of liboqs versions < 0.13.0 with HQC enabled.
- Behavior: High rate of malformed ciphertexts targeting HQC endpoints.
Detection Engineering
YARA Rule
rule CVE_2025_48946_HQC_Flaw {
meta:
description = "Detects liboqs versions vulnerable to HQC implicit rejection flaw"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-48946"
strings:
$hqc_init = "hqc_init" ascii wide nocase
$hqc_decaps = "hqc_decaps" ascii wide nocase
$implicit_reject = "implicit_rejection" ascii wide nocase
condition:
all of them
}
Sigma Rule
title: Detection of HQC Implicit Rejection Flaw Exploitation
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects repeated HQC decapsulation failures indicating exploitation of CVE-2025-48946
author: Valters IT
date: 2025-04-10
logsource:
category: application
product: liboqs
detection:
selection:
EventID: 1001 # Example: HQC decapsulation failure event
Count: >= 100 # Threshold for repeated failures
condition: selection
falsepositives:
- Legitimate testing of HQC
level: medium
Suricata Rule
alert tcp any any -> any any (msg:"CVE-2025-48946 HQC Implicit Rejection Flaw"; flow:to_server; content:"|48 51 43|"; offset:0; depth:3; content:"|00 00 00 00|"; within:4; reference:cve,2025-48946; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade to liboqs 0.13.0 or later, where HQC is disabled by default.
- If HQC is required, implement additional entropy sources in key derivation (e.g., use a hash function to combine the shared secret with a random nonce).
- Switch to alternative KEMs like Kyber or ML-KEM for new deployments.
Long-term:
- Monitor the HQC team's updates for a patched algorithm specification.
- Conduct a security review of any protocol using HQC for key derivation.
- Consider deprecating HQC in favor of more robust post-quantum algorithms.
Valters IT Signature This report was generated by Valters IT Cyber Threat Intelligence Division. For questions, contact cti@valters-it.com.