This is a rusty side door that only opens if the attacker is already standing in the hallway
This finding means the target TLS service will still negotiate RSA_EXPORT / export-grade RSA cipher suites, letting a man-in-the-middle try to downgrade a connection to 512-bit RSA and then factor the temporary key. The classic client-side FREAK bug is tracked as CVE-2015-0204 in OpenSSL before 0.9.8zd, 1.0.0p, and 1.0.1k, but this Tenable plugin is really flagging the *server-side prerequisite*: any HTTPS/TLS endpoint whose cipher config still permits export RSA.
Tenable calling this MEDIUM is generous for most modern enterprise environments. There is no direct server takeover, no pre-auth RCE, and no standalone exploit path; the attacker needs an active on-path position *and* a client stack that still mishandles the downgrade. That combination is rare in 2026 on managed endpoints, so this is better treated as LOW-severity crypto hygiene unless you run public-facing legacy portals for unmanaged clients or old TLS interception gear.
3 steps from start to impact.
Get in the middle with bettercap / Ettercap
- Attacker can intercept or tamper with traffic in transit
- Victim initiates a TLS session through the attacker-controlled path
- Requires on-path access, which already implies a meaningful foothold or rogue network position
- Modern enterprise networks with WPA2-Enterprise, NAC, segmentation, and switch protections reduce practical MITM options
Force RSA_EXPORT during handshake
- Server negotiates
EXPORT_RSA - Client stack remains vulnerable or is mediated by vulnerable TLS interception software
- Most modern browsers and TLS libraries have been fixed for years
- TLS 1.2/1.3-only configurations and hardened cipher lists break this step immediately
sslyze, and nmap --script ssl-enum-ciphers all detect the server-side condition well; they do not prove an exploitable client is present.Factor the 512-bit key with CADO-NFS / Msieve
- Export RSA handshake succeeded
- Attacker can capture enough handshake material and complete factoring fast enough to matter
- The attack is operationally noisy and more expensive than commodity web exploitation
- Blast radius is limited to intercepted sessions rather than whole-host compromise
The supporting signals.
| In-the-wild status | No current evidence this CVE is in the CISA KEV catalog; public reporting focuses on the 2015 disclosure wave, not ongoing enterprise exploitation. |
|---|---|
| Proof-of-concept availability | Yes. The original researchers published freakattack.com with test tools and attack explanation; exploitation components are well understood, but they require MITM plus a downgrade-vulnerable client. |
| EPSS | 0.91945 from FIRST data as mirrored by Tenable; third-party mirrors currently place it around the 99.7th percentile. High EPSS here reflects broad historic attention to the CVE, not automatic server-side exploitability. |
| KEV status | Not listed in the current CISA Known Exploited Vulnerabilities Catalog. |
| CVSS vector | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N (5.3 / Medium) for CVE-2015-0204. Important caveat: NVD notes this CVE covers client code based on OpenSSL, not every server that still offers export RSA. |
| Affected scope | Any TLS service that still accepts RSA_EXPORT suites is exposed to the *server-side prerequisite*. The OpenSSL client bug affects versions before 0.9.8zd, 1.0.0p, and 1.0.1k. |
| Fixed versions | For OpenSSL clients: 0.9.8zd, 1.0.0p, 1.0.1k and later. For servers, the real fix is removing export cipher suites from the TLS config; distro backports may already carry the client fix without changing the package major version. |
| Exposure data | At disclosure, the researchers' Internet-wide scans found more than a third of trusted-cert HTTPS servers at risk, later dropping sharply as admins removed export suites. That historical number shows how common bad TLS defaults were, not what your 2026 exposure looks like. |
| Disclosure timeline | CVE published 2015-01-09; the broader FREAK attack campaign and public tracking site went live in early March 2015. |
| Researchers | Reported by the FREAK researchers behind freakattack.com; OpenSSL later acknowledged it had initially underestimated real-world impact and reclassified the issue. |
noisgate verdict.
The single decisive factor is the attacker position requirement: this is not remotely self-exploiting and needs an active man-in-the-middle before anything interesting happens. Even then, the attack usually dies unless the victim still uses a downgrade-vulnerable client or TLS interception stack, which sharply limits the reachable population in modern enterprises.
Why this verdict
- Requires MITM first: the attacker must already control the network path, which is major downward pressure compared with ordinary internet-reachable flaws.
- Needs a second vulnerable component: export-cipher support on the server is only half the chain; the client side also has to mishandle the downgrade.
- No host compromise: even successful exploitation targets session confidentiality/integrity, not direct server code execution or privilege gain.
Why not higher?
It is not an unauthenticated RCE, not a server takeover, and not broadly wormable. The attack chain compounds friction at every step: on-path access, downgrade-capable tooling, export-cipher support, and a susceptible client stack. That is too much real-world narrowing to justify MEDIUM or HIGH for most patch queues.
Why not lower?
This is still a real cryptographic exposure, not pure scanner trivia. Public-facing services that accept export RSA are needlessly weak, and legacy clients, embedded systems, or brittle TLS interception appliances can still make the chain viable. So it belongs above IGNORE even if it should not outrank materially exploitable edge flaws.
What to do — in priority order.
- Disable export ciphers — Remove
EXPORT,RSA_EXPORT, and other obsolete suites from every TLS profile on load balancers, web servers, mail gateways, and appliances. For a LOW verdict there is no mandated mitigation SLA, so treat this as backlog hygiene and complete it in the next normal crypto-baseline change window. - Enforce modern TLS policy — Standardize on hardened TLS 1.2/1.3 configurations from a central baseline so weak suites do not reappear during certificate renewals, appliance migrations, or vendor rollbacks. For LOW, fold this into routine platform engineering rather than emergency change control.
- Hunt legacy TLS stacks — Inventory old proxies, SSL inspection products, Java runtimes, embedded systems, and unmanaged browsers that might still be downgrade-vulnerable. Prioritize the exceptions list rather than blanket-panic patching; the real risk only exists where both sides of the chain still line up.
MFAdoes nothing here because the attack targets the TLS session setup, not account authentication.EDR alonewill not fix or reliably surface a weak negotiated cipher on a network device or appliance.Patching only the clientis incomplete if your servers still advertise export suites; you are still offering broken crypto to anything legacy on the path.
Crowdsourced verification payload.
Run this from an auditor workstation or jump host that can reach the target TLS service; no local admin privileges are required. Invoke it as ./check_freak.sh example.com 443 or bash check_freak.sh mail.example.com 993 and it will report VULNERABLE, PATCHED, or UNKNOWN based on whether an export-grade cipher can actually be negotiated.
#!/usr/bin/env bash
# check_freak.sh
# Verify whether a remote TLS service still negotiates export-grade RSA ciphers
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN/ERROR
set -u
HOST="${1:-}"
PORT="${2:-443}"
TIMEOUT_BIN=""
if [[ -z "$HOST" ]]; then
echo "Usage: $0 <host> [port]" >&2
exit 2
fi
if command -v timeout >/dev/null 2>&1; then
TIMEOUT_BIN="timeout 12"
fi
if ! command -v openssl >/dev/null 2>&1; then
echo "UNKNOWN - openssl binary not found"
exit 2
fi
# OpenSSL syntax differs by version; try a few common export-cipher selectors.
CANDIDATES=("EXP" "EXPORT" "RSA+EXP")
for CIPHER in "${CANDIDATES[@]}"; do
OUTPUT=$(echo | ${TIMEOUT_BIN} openssl s_client -connect "${HOST}:${PORT}" -servername "$HOST" -cipher "$CIPHER" 2>&1)
RC=$?
# If the local OpenSSL build has no export ciphers compiled in, try next selector.
if echo "$OUTPUT" | grep -qiE 'no cipher match|Error with command|Unknown cipher'; then
continue
fi
# Successful handshake with an export cipher means vulnerable.
if [[ $RC -eq 0 ]] && echo "$OUTPUT" | grep -qiE 'Cipher is|Cipher :'; then
NEGOTIATED=$(echo "$OUTPUT" | awk -F': ' '/Cipher :/ {print $2}' | tail -n1)
if [[ -z "$NEGOTIATED" ]]; then
NEGOTIATED=$(echo "$OUTPUT" | awk '/Cipher is/ {print $3}' | tail -n1)
fi
echo "VULNERABLE - negotiated export cipher ${NEGOTIATED:-unknown} on ${HOST}:${PORT}"
exit 1
fi
# Expected failure when server refuses export ciphers.
if echo "$OUTPUT" | grep -qiE 'handshake failure|no shared cipher|sslv3 alert handshake failure|alert handshake failure'; then
echo "PATCHED - server refused export-grade cipher negotiation on ${HOST}:${PORT}"
exit 0
fi
done
# Fallback: enumerate supported ciphers if nmap is available.
if command -v nmap >/dev/null 2>&1; then
NMAP_OUT=$(${TIMEOUT_BIN} nmap --script ssl-enum-ciphers -Pn -p "$PORT" "$HOST" 2>/dev/null)
if echo "$NMAP_OUT" | grep -qi 'EXP'; then
echo "VULNERABLE - nmap ssl-enum-ciphers found export-grade cipher support on ${HOST}:${PORT}"
exit 1
fi
if echo "$NMAP_OUT" | grep -qi 'ssl-enum-ciphers'; then
echo "PATCHED - nmap did not find export-grade cipher support on ${HOST}:${PORT}"
exit 0
fi
fi
echo "UNKNOWN - could not conclusively test ${HOST}:${PORT}; local OpenSSL may lack export ciphers and nmap fallback was unavailable"
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.