← Back to Feed CACHED · 2026-08-26 10:19:20 · CACHE_KEY CVE-2026-63072
CVE-2026-63072 · CWE-787 · Disclosed 2026-08-25

Issue summary: OpenSSL CMS decryption sizes the key-unwrap output buffer based on querying the unwrapped…

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Someone left a measuring cup too small next to the industrial mixer, and now the overflow ruins the batch — but only for bakeries that make one specific cake

CVE-2026-63072 is a heap buffer overflow in OpenSSL's CMS (Cryptographic Message Syntax) decryption path. When CMS_decrypt() processes an AES-WRAP-PAD wrapped key, it allocates an output buffer sized by querying the expected unwrapped key length. But the AES-WRAP-PAD unwrap primitive, especially on integrity-failure paths, can write and then zero up to 8 bytes past that allocation. An attacker flips a single OID byte in a legitimate CMS-encrypted message to select the padded variant, and the victim's call to CMS_decrypt() triggers a deterministic 8-byte out-of-bounds heap write. Affected versions span virtually every supported OpenSSL branch: 4.0.0–4.0.1, 3.6.0–3.6.3, 3.5.0–3.5.7, 3.4.0–3.4.6, 3.0.0–3.0.21, and 1.1.1 through 1.1.1zh.

The NVD slapped a HIGH 7.5 on this, but OpenSSL's own project severity is Moderate, and reality sides with OpenSSL. The CVSS vector (AV:N/AC:L/PR:N/UI:N) is technically valid *if* the target application passes attacker-controlled CMS blobs to CMS_decrypt() — but the overwhelming majority of OpenSSL deployments use it for TLS, not S/MIME or CMS envelope processing. The write is fixed-size (8 bytes) and fixed-value (zeros), which OpenSSL explicitly notes makes RCE implausible; the realistic outcome is heap corruption → crash → denial of service. The NVD HIGH feels like a CVSS-by-vector-math exercise that ignores the narrow reachable population.

"8-byte zero-write DoS in a CMS code path most OpenSSL consumers never call."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Obtain or forge a CMS-encrypted message

The attacker needs a CMS EnvelopedData structure targeting the victim's public key. They can intercept a legitimate S/MIME message or construct one from scratch using the victim's certificate. The key-wrap algorithm OID in the message is then modified — a single byte change — to select AES-WRAP-PAD instead of plain AES-WRAP.
Conditions required:
  • Victim application accepts and decrypts CMS/S/MIME content
  • Attacker has access to the victim's public certificate (typically public)
Where this breaks in practice:
  • Most OpenSSL consumers never call CMS_decrypt() — the attack surface is limited to S/MIME email gateways, document-signing verification, and specific PKI tooling
  • Applications using higher-level S/MIME libraries (e.g., Thunderbird, Evolution) may use their own CMS implementations, not raw OpenSSL CMS API
Detection/coverage: Nessus plugin 339518 detects via version check. No network-level signature exists since the trigger is inside an encrypted CMS structure.
STEP 02

Deliver crafted CMS blob to victim

The attacker sends the modified CMS message to the victim through whatever channel the application consumes — email (S/MIME), file upload, API endpoint, or message queue. The message must reach code that calls CMS_decrypt() with the recipient's private key. No authentication is required at the OpenSSL layer, but the delivery channel may impose its own access controls.
Conditions required:
  • Network path or submission channel to the CMS-processing application
  • Application does not validate or reject unexpected key-wrap algorithm OIDs before calling CMS_decrypt()
Where this breaks in practice:
  • Email gateways often quarantine or reject malformed S/MIME before it reaches decryption
  • Custom applications may deserialize and validate CMS structures before passing them to OpenSSL
STEP 03

Trigger heap corruption via CMS_decrypt()

When the victim application calls CMS_decrypt(), the internal cms_kek_cipher() function allocates a buffer sized by outlen (the expected unwrapped key size). The AES-WRAP-PAD unwrap writes up to inlen bytes, which can exceed outlen by up to 8 bytes. The integrity check fails (the OID was flipped), and during cleanup the code zeroes the full written region — including 8 bytes past the allocation boundary.
Conditions required:
  • Victim calls CMS_decrypt() on the crafted message
  • OpenSSL version is in the affected range
Where this breaks in practice:
  • The 8-byte zero write corrupts heap metadata but is extremely constrained for further exploitation
  • Modern allocators (glibc tcache, jemalloc) may or may not crash depending on heap state — impact is probabilistic DoS rather than guaranteed
Detection/coverage: AddressSanitizer (ASan) builds will catch this immediately. Production builds will manifest as crashes in subsequent allocations.
STEP 04

Denial of service achieved

The heap corruption typically causes the process to crash on the next malloc() or free() call. For a server processing multiple CMS messages, this kills the process. Depending on service supervision (systemd restart, container orchestration), the attacker may need to send repeated messages to maintain the outage. No data exfiltration or code execution results from this chain.
Conditions required:
  • Process does not gracefully handle heap corruption (virtually none do)
Where this breaks in practice:
  • Service managers will restart the process, limiting outage duration
  • Rate limiting on the delivery channel constrains sustained DoS
Detection/coverage: Process crash monitoring, core dump analysis showing corruption in CMS code path.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. No reports from threat intelligence feeds, CISA KEV, or vendor advisories indicate active exploitation as of 2026-08-26.
Proof-of-conceptNo public PoC. The commit at openssl/openssl@9ec2f6d describes the fix clearly enough that a PoC could be constructed by anyone familiar with CMS internals, but none has been published.
EPSS scoreNot yet scored — CVE disclosed 2026-08-25, EPSS data typically lags 48–72 hours. Expected to be low given the narrow attack surface (CMS-only).
KEV statusNot listed. No CISA KEV entry.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — Network-accessible, no auth, no user interaction, availability-only impact. The vector is accurate for a CMS-processing server but overstates risk for the general OpenSSL population.
Affected versionsOpenSSL 4.0.0–4.0.1, 3.6.0–3.6.3, 3.5.0–3.5.7, 3.4.0–3.4.6, 3.0.0–3.0.21, 1.1.1–1.1.1zh — effectively every supported branch.
Fixed versions4.0.2, 3.6.4, 3.5.8, 3.4.7, 3.0.22, 1.1.1zi. Ubuntu backports: 3.5.5-1ubuntu3.4 (26.04), 3.0.13-0ubuntu3.15 (24.04), 3.0.2-0ubuntu1.29 (22.04).
Scanning/exposureTenable Nessus plugin 339518 provides version-based detection. No Shodan/GreyNoise/Censys scanning activity observed — the vulnerability is not remotely fingerprint-able without sending a crafted CMS blob.
Disclosure date2026-08-25, coordinated disclosure via OpenSSL security advisory.
ReporterNot publicly credited in the OpenSSL advisory at time of review.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.3/10)

The single most decisive factor is the narrow reachable attack surface: the vulnerable code path (CMS_decrypt() with AES-WRAP-PAD) is exercised only by applications that process S/MIME or CMS envelopes, which represents a small fraction of the total OpenSSL installed base. Combined with the fixed-size, fixed-value (zero) write that limits impact to DoS with no credible RCE path, the NVD HIGH 7.5 overstates real-world risk for the vast majority of OpenSSL consumers.

HIGH Vulnerability mechanics and affected versions
HIGH Impact limited to denial of service
MEDIUM Population of CMS_decrypt() callers in enterprise environments
LOW EPSS and exploitation trend (too early)

Why this verdict

  • Narrow code path reachability: The bug lives in CMS_decrypt()cms_kek_cipher(), not in the TLS handshake or certificate verification. The overwhelming majority of OpenSSL consumers — web servers, load balancers, CLI tools, language runtimes — never call this function. This alone eliminates >90% of the installed base from meaningful exposure.
  • Fixed-size zero write limits impact to DoS: The overflow is exactly 8 bytes of zeros. OpenSSL explicitly states no evidence of RCE feasibility. For heap exploitation, you need control over the written value and some heap feng-shui — an 8-byte zero clobber of heap metadata crashes the process but doesn't give you a shell.
  • No exploitation activity or PoC: Disclosed <48 hours ago, no PoC published, no KEV listing, no threat intel reports. The trivial-to-describe-but-narrow-to-reach nature of the bug makes mass exploitation unlikely.
  • Role multiplier: For *email gateways* and *S/MIME processing servers* that call CMS_decrypt(), this is a legitimate availability risk — a single crafted email can crash the gateway. However, even in that high-value role, the blast radius is process crash (restart in seconds) → transient DoS, not data breach or lateral movement. This keeps the floor at MEDIUM, not HIGH.
  • OpenSSL's own assessment agrees: The OpenSSL project rated this Moderate, not High. OpenSSL's security team historically under-rates rather than over-rates, making their Moderate assessment a strong signal.

Why not higher?

To warrant HIGH, the bug would need either a credible RCE path or broad reachability across the OpenSSL installed base. It has neither — the write is fixed-value zeros (no RCE), and the code path is CMS-specific (narrow population). Even for email gateways in the high-value role, the outcome is a restartable crash, not persistent compromise. No exploitation in the wild further undercuts urgency.

Why not lower?

Despite the narrow attack surface, the bug *is* trivially triggerable (single-byte OID flip) for any application that does call CMS_decrypt(), requires no authentication, and produces reliable heap corruption. S/MIME email gateways are a real deployment pattern, and crashing one is a meaningful availability event. The breadth of affected versions (every supported OpenSSL branch including 1.1.1) also prevents a LOW rating.

05 · Compensating Control

What to do — in priority order.

  1. Audit your estate for CMS_decrypt() callers — Before patching 10,000 hosts, identify which applications actually use OpenSSL's CMS API. Run grep -r 'CMS_decrypt\|cms_decrypt' /opt /usr/local or check linked symbols with nm -D /path/to/binary | grep CMS_decrypt. Focus patching effort on those hosts first. No mitigation SLA applies for MEDIUM — go straight to the 365-day remediation window.
  2. Validate S/MIME algorithm OIDs before decryption — If you control the application code, reject CMS messages with unexpected key-wrap algorithm OIDs (specifically AES-WRAP-PAD variants: OID 2.16.840.1.101.3.4.1.8/28/48) before passing them to CMS_decrypt(). This blocks the single-byte-flip attack entirely.
  3. Enable process restart supervision — Ensure S/MIME-processing services are supervised by systemd, Docker restart policies, or Kubernetes liveness probes with aggressive restart thresholds. This limits DoS window to seconds per crash.
  4. Rate-limit inbound S/MIME at the mail gateway — Apply rate limiting on S/MIME-encrypted messages at the MTA layer (Postfix smtpd_client_message_rate_limit, Exchange transport rules) to prevent an attacker from sustaining a crash loop.
What doesn't work
  • WAF/IDS signatures — The malicious payload is inside an encrypted CMS envelope; network inspection cannot see the flipped OID byte without the recipient's private key.
  • TLS configuration hardening — This bug is not in the TLS code path. Disabling weak ciphers, enforcing TLS 1.3, or tuning TLS parameters has zero effect.
  • FIPS mode — OpenSSL confirmed the CMS code is outside the FIPS module boundary, so FIPS-mode restrictions do not prevent this vulnerability.
06 · Verification

Crowdsourced verification payload.

Run on each target host as any user. Example: bash check_cve_2026_63072.sh — no root required. The script checks the installed OpenSSL library version against the known-fixed versions.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# CVE-2026-63072 checker — OpenSSL CMS AES-WRAP-PAD heap overflow
# Run on target host. No privileges required.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

get_openssl_version() {
  if command -v openssl >/dev/null 2>&1; then
    openssl version 2>/dev/null | awk '{print $2}'
  else
    echo ""
  fi
}

VER=$(get_openssl_version)
if [ -z "$VER" ]; then
  echo "UNKNOWN — openssl binary not found in PATH"
  exit 2
fi

echo "Detected OpenSSL version: $VER"

# Compare versions using sort -V
version_gte() {
  [ "$(printf '%s\n%s' "$1" "$2" | sort -V | head -n1)" = "$2" ]
}

VULN=0

case "$VER" in
  4.0.*)
    version_gte "$VER" "4.0.2" || VULN=1
    ;;
  3.6.*)
    version_gte "$VER" "3.6.4" || VULN=1
    ;;
  3.5.*)
    version_gte "$VER" "3.5.8" || VULN=1
    ;;
  3.4.*)
    version_gte "$VER" "3.4.7" || VULN=1
    ;;
  3.3.*|3.2.*|3.1.*)
    # These branches are EOL and do not receive fixes
    echo "WARNING — EOL branch $VER, no fix available"
    VULN=1
    ;;
  3.0.*)
    version_gte "$VER" "3.0.22" || VULN=1
    ;;
  1.1.1z[i-z]*)
    # 1.1.1zi or later is patched
    echo "PATCHED — $VER (1.1.1zi+ detected)"
    exit 0
    ;;
  1.1.1*)
    # 1.1.1 before 1.1.1zi
    VULN=1
    ;;
  1.0.*|0.*)
    echo "UNKNOWN — ancient OpenSSL $VER, likely vulnerable but EOL"
    exit 2
    ;;
  *)
    echo "UNKNOWN — unrecognized version $VER"
    exit 2
    ;;
esac

if [ "$VULN" -eq 1 ]; then
  echo "VULNERABLE — OpenSSL $VER is affected by CVE-2026-63072"
  exit 1
else
  echo "PATCHED — OpenSSL $VER is not affected by CVE-2026-63072"
  exit 0
fi
07 · Bottom Line

If you remember one thing.

TL;DR
This is a MEDIUM by noisgate reassessment — no mitigation SLA applies, so go straight to the 365-day noisgate remediation SLA. Monday morning: (1) Run the version-check script fleet-wide to identify affected hosts. (2) Prioritize patching on any hosts running S/MIME gateways, CMS-processing APIs, or document-signing services that call CMS_decrypt() — these are your only actually-exposed systems. (3) For the rest of your OpenSSL fleet (web servers, load balancers, TLS-only consumers), roll this into your next scheduled OpenSSL update cycle. There is no active exploitation, no public PoC, and no KEV listing. The NVD HIGH label will generate noise in your scanner queues — suppress or deprioritize those findings for non-CMS hosts and focus your team's energy on CVEs with broader blast radius.

Sources

  1. OpenSSL Security Advisories
  2. OpenSSL commit: Fix heap buffer overflow in AES-WRAP-PAD unwrap
  3. CybersecurityNews: Multiple OpenSSL Flaws
  4. Ubuntu USN-8678-1
  5. Tenable Nessus Plugin 339518
  6. GBHackers: OpenSSL Flaws Allow Remote Attackers to Crash Servers
  7. OpenCVE: CVE-2026-63072
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.