☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-48946

CVE-2025-48946 Supply Chain Attack in Liboqs
📅 PUBLISHED: 2025-05-30 19:21 UTC 🔄 UPDATED: 2026-09-23 20:36 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.24%
👁️
0.24% probability
6.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
3.7
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

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.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
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:

  1. Set up a test environment with liboqs 0.12.0 or earlier.
  2. Generate a key pair for HQC-128.
  3. Create a script that sends a large number of malformed ciphertexts to the decapsulation function.
  4. Observe that many distinct malformed ciphertexts produce the same shared secret.
  5. 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:

  1. Upgrade to liboqs 0.13.0 or later, where HQC is disabled by default.
  2. 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).
  3. 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.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-48946/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.