This is a locked vault whose receptionist will mail out random scraps from inside to anyone who asks
CVE-2014-0160 is the classic *Heartbleed* bug: a missing bounds check in OpenSSL's TLS/DTLS heartbeat handling lets a remote peer read up to 64 KB of process memory per request. The affected upstream range is OpenSSL 1.0.1 through 1.0.1f, fixed in 1.0.1g on 2014-04-07; older 1.0.0 and 0.9.8 branches were not affected, and many Linux vendors shipped backported fixes under distro package versions rather than 1.0.1g literally.
The vendor HIGH 7.5 baseline undersells the operational damage. This is unauthenticated, remotely reachable, trivially automatable, hard to log, and proven capable of exposing private keys, session cookies, credentials, and plaintext from memory; the only meaningful downward friction is that the vulnerable population is now mostly legacy or embedded holdouts, but for any still-exposed asset the blast radius is big enough to treat it as CRITICAL.
4 steps from start to impact.
Find a heartbeat-capable TLS service
nmap --script ssl-heartbleed and Metasploit's auxiliary/scanner/ssl/openssl_heartbleed module, both of which cheaply separate likely targets from the rest.- Reachable TLS or DTLS service
- Service is actually using vulnerable OpenSSL code, not an unaffected library or backported fixed package
- Modern fleets have mostly aged out of upstream 1.0.1-era OpenSSL
- Version-banner checks are noisy because distro backports can look 'old' while already fixed
Send malformed heartbeat probes
- No authentication required
- Heartbeat handling reachable in the target's TLS/DTLS implementation
- Some middleboxes, TLS terminators, or non-OpenSSL front ends remove exposure entirely
- If the application is behind a non-vulnerable proxy, the origin may not be directly reachable
Iterate until secrets fall out
- Sensitive material is resident in the process memory at the moment of probing
- Attacker can repeat requests without being blocked
- Private-key extraction is probabilistic, not guaranteed on the first shot
- Different daemons and memory layouts change how valuable each 64 KB leak is
Pivot from disclosure to impersonation or account compromise
- Recovered material is valid and still in use
- No immediate session invalidation or key/cert rotation occurred
- Perfect Forward Secrecy limits retrospective decryption of past sessions
- If keys were rotated and sessions invalidated quickly, downstream leverage drops sharply
The supporting signals.
| In-the-wild status | Yes. CISA lists it in KEV; NVD shows it was added on 2022-05-04 with a due date of 2022-05-25, which is CISA's shorthand for *active exploitation evidence exists*. |
|---|---|
| Public PoC / weaponization | Commodity. ssl-heartbleed in Nmap, Metasploit's auxiliary/scanner/ssl/openssl_heartbleed, and Exploit-DB references are all public. Nmap notes its detector is based on Katie Stafford's ssltest.py. |
| EPSS | 0.94464 from the supplied intel, which is an unusually strong exploitation-likelihood signal even for an old CVE. |
| CVSS vector reality check | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N is directionally right on exploitability, but the *real* impact often jumps beyond confidentiality because leaked keys and session material enable follow-on impersonation and account takeover. |
| Affected versions | Upstream affected: OpenSSL 1.0.1 through 1.0.1f inclusive. OpenSSL states versions prior to 1.0.1 were not affected. |
| Fixed versions | Upstream fixed: 1.0.1g. Example distro backports: Debian Wheezy fixed it in 1.0.1e-2+deb7u5; many enterprise distros shipped patched packages without changing the upstream-style version string to 1.0.1g. |
| Exposure footprint | At disclosure, Heartbleed hit broadly deployed internet software: heartbleed.com cites Apache and nginx combined at over 66% of active sites in Netcraft's April 2014 survey. University of Michigan's ZMap work was used to monitor vulnerable top sites and IPv4 samples at internet scale. |
| Detection coverage | Remote safe checks exist, but they only answer exposure, not whether keys were already stolen. Credentialed package checks remain necessary for hosts and appliances; network IDS can look for oversized heartbeat replies, but reliable prevention is weak. |
| Disclosure / reporting | Publicly disclosed 2014-04-07. OpenSSL credits Neel Mehta; heartbleed.com says the bug was independently discovered by Neel Mehta and the Codenomicon team (Riku, Antti, Matti). |
| Why defenders still care | This is a silent-secret-theft flaw. heartbleed.com explicitly notes exploitation can happen *without credentials* and *without leaving a trace*, which is why the downstream response historically required more than just patching. |
noisgate verdict.
The decisive amplifier is unauthenticated remote exploitation with demonstrated private-key and credential exposure, not the raw CVSS label. KEV status and the fact that exploitation is low-noise and often log-poor push this out of routine HIGH territory: if a vulnerable service is still reachable, you must assume compromise of trust material is plausible.
Why this verdict
- Upgraded for KEV and real exploitation evidence: CISA KEV inclusion is a hard signal that this was not theoretical lab-only risk.
- No-auth, remote, easy-to-automate: the attacker needs network reachability, not credentials, user clicks, or prior foothold.
- Downstream blast radius exceeds 'info leak' semantics: leaked private keys, cookies, and passwords convert a memory disclosure into impersonation, session hijack, and long-tail trust failure.
Why not higher?
It is not a universal one-shot server takeover primitive. The bug discloses memory rather than directly executing code, and the highest-impact outcomes like private-key recovery are probabilistic and memory-layout dependent, not guaranteed from a single request.
Why not lower?
The normal reasons to downgrade old CVEs do not rescue this one. Yes, the affected upstream range is ancient and population-narrow today, but any remaining exposure is exactly the kind of legacy edge or appliance estate that attackers love: internet-reachable, under-maintained, and holding long-lived credentials and certificates.
What to do — in priority order.
- Remove external reachability — Put vulnerable services behind a non-vulnerable TLS terminator, disable the affected listener, or ACL them to trusted networks only. Because this is CRITICAL and KEV-listed, do this immediately, within hours, not on a routine change cadence.
- Invalidate trust material — After the vulnerable service is contained, rotate server private keys, reissue certificates, and invalidate active sessions/cookies that may have been resident in memory. Treat this as part of mitigation because patching alone does not un-leak secrets already exposed; execute within hours for internet-facing systems.
- Force credential hygiene where applicable — If the service stored user credentials or API tokens in process memory, expire or reset them after keys/certs are rotated. Prioritize administrative, service-account, and externally federated identities first, and complete the first wave within hours on exposed systems.
- Scan for residual exposure — Run remote checks from outside your perimeter and credentialed checks inside the fleet to find stragglers, especially appliances and embedded products that bundle OpenSSL. For a CRITICAL KEV issue, complete the first enterprise-wide sweep within hours and keep rescanning until the exposed count is zero.
- WAF alone doesn't solve this; the bug lives inside the TLS stack, and many WAFs never see the malformed heartbeat in a way that reliably blocks it.
- Password resets before patching and rekeying are wasted motion; the fresh credentials can be stolen again if the service still leaks memory.
- Banner/version matching alone is insufficient because distro backports often leave package versions that look old while already fixed, or vice versa on appliances.
- MFA alone helps only for some stolen credentials; it does nothing for leaked private keys, session cookies, or plaintext already resident in memory.
Crowdsourced verification payload.
Run this from an auditor workstation with Nmap installed, aimed at the *reachable service* rather than the host package database. Invoke it as ./check-heartbleed.sh mail.example.com 443 or ./check-heartbleed.sh vpn.example.com 8443; no root is required for a basic TCP connect scan, but the script needs network reachability to the target port.
#!/usr/bin/env bash
# check-heartbleed.sh
# Remote Heartbleed exposure check using Nmap's ssl-heartbleed NSE script.
# Exit codes:
# 0 = PATCHED
# 1 = VULNERABLE
# 2 = UNKNOWN / error / inconclusive
set -u
HOST="${1:-}"
PORT="${2:-443}"
if [[ -z "$HOST" ]]; then
echo "Usage: $0 <host> [port]" >&2
echo "UNKNOWN" >&2
exit 2
fi
if ! command -v nmap >/dev/null 2>&1; then
echo "UNKNOWN"
echo "Reason: nmap is not installed or not in PATH" >&2
exit 2
fi
TMP_OUT="$(mktemp 2>/dev/null || mktemp -t hbscan)"
trap 'rm -f "$TMP_OUT"' EXIT
# Use a TCP connect scan so root is not required.
# --script-timeout prevents hangs on flaky TLS services.
if ! nmap -Pn -n -sT -p "$PORT" --script ssl-heartbleed --script-timeout 30s "$HOST" >"$TMP_OUT" 2>&1; then
echo "UNKNOWN"
echo "Reason: nmap execution failed" >&2
cat "$TMP_OUT" >&2
exit 2
fi
# Normalize output checks.
if grep -Eqi 'VULNERABLE|STATE: VULNERABLE' "$TMP_OUT"; then
echo "VULNERABLE"
exit 1
fi
if grep -Eqi 'NOT VULNERABLE|does not appear to be vulnerable|ERROR:.*not vulnerable' "$TMP_OUT"; then
echo "PATCHED"
exit 0
fi
# If the port is closed/filtered or TLS negotiation failed, report UNKNOWN.
if grep -Eqi 'filtered|closed|Failed to resolve|0 hosts up|handshake failure|ERROR:' "$TMP_OUT"; then
echo "UNKNOWN"
cat "$TMP_OUT" >&2
exit 2
fi
# Last resort: if the script ran but gave no conclusive result, stay conservative.
echo "UNKNOWN"
cat "$TMP_OUT" >&2
exit 2
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.