This is a side door with an old lock, not a blown-open front gate
Tenable plugin 84470 fires when a remote service will still negotiate TLS 1.0. This is a protocol-level finding, not a software-specific CVE: any web server, mail service, load balancer, appliance, or internal application endpoint that accepts TLS 1.0 can match. The affected range is therefore any deployment where the listener's minimum protocol is TLS 1.0 or lower, regardless of product version.
Tenable's HIGH / 8.2 score is too aggressive for most enterprises because the practical attack path usually requires a man-in-the-middle, downgrade opportunity, or legacy client actually using TLS 1.0. That is materially different from unauthenticated RCE. The risk is still meaningful for internet-facing, sensitive, or PCI-scoped systems because TLS 1.0 is deprecated by IETF, disallowed by PCI as a security control except narrow exceptions, and increasingly disabled by platform vendors.
4 steps from start to impact.
Enumerate a listener that still offers TLS 1.0
openssl s_client -tls1, nmap --script ssl-enum-ciphers, or testssl.sh to confirm the target will negotiate TLS 1.0. Tenable's plugin does essentially this at scale. This step proves protocol support, not exploitable impact by itself.- Network reachability to the target service
- A service that still permits TLS 1.0 negotiation
- Many enterprises already disable TLS 1.0 at edge load balancers even if backend systems are older
- Internal-only listeners shrink attacker reach to post-compromise actors
- Modern SaaS and browser-facing services often refuse TLS 1.0 by default
nmap ssl-enum-ciphers, testssl.sh, and many ASM platforms detect this reliably.Force or inherit a TLS 1.0 session
bettercap, sslsplit, or custom downgrade proxies can interfere with negotiation when client, network, and application behavior allow it. In modern stacks this is where most real attacks die.- Attacker can sit on-path or otherwise influence the client-server connection
- Client stack still supports TLS 1.0 or downgrade behavior
- No strict application control forcing TLS 1.2+
- Requires attacker position beyond mere internet reachability
- Modern clients prefer TLS 1.2/1.3 and many reject TLS 1.0 entirely
- TLS_FALLBACK_SCSV, hardened libraries, and managed browsers reduce downgrade success
- VPN, segmentation, and proxy architectures often deny practical MITM placement
Exploit legacy TLS cryptographic weaknesses
- Successful TLS 1.0 negotiation
- Compatible weak cipher suites or exploitable application traffic patterns
- Sustained on-path visibility or manipulation
- Impact depends heavily on negotiated ciphers and client behavior
- Not every TLS 1.0 session is trivially decryptable in practice
- No direct code execution or privilege gain follows from protocol support alone
Harvest data from the affected session
- Sensitive traffic traverses the affected connection
- Client and server actually complete a vulnerable session
- Scope is per application flow rather than whole-host compromise
- Mutual TLS, application-layer encryption, or tokenization can reduce value of captured traffic
- Many internal services carry low-sensitivity traffic even when misconfigured
The supporting signals.
| In-the-wild status | No CISA KEV entry and no single CVE-backed campaign to track. This is a protocol deprecation / misconfiguration finding, not a discrete exploit-with-CVE event. |
|---|---|
| Proof-of-concept availability | Assessment tooling is public and mature: openssl, nmap ssl-enum-ciphers, and testssl.sh all verify support. MITM tooling such as bettercap and sslsplit exists, but there is no turnkey one-packet host-compromise exploit because the attack depends on downgrade and traffic conditions. |
| EPSS | N/A — there is no canonical CVE for Tenable plugin 84470, so FIRST EPSS does not apply. |
| KEV status | Not applicable — this finding is not a KEV-tracked CVE. |
| Vendor score | Tenable rates the plugin High, CVSS 8.2 with vector CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N, which overstates reality because it assumes network reach equals exploitability. |
| CVSS reality check | The real friction is attacker position: the interesting abuse path usually needs on-path influence or a legacy client. That is strong downward pressure versus true unauthenticated internet-remote exploitation. |
| Affected range | Any service configuration that still negotiates TLS 1.0 — web servers, APIs, reverse proxies, mail services, appliances, or vendor software behind them. This is config- and stack-dependent, not tied to one product family. |
| Fixed state | The secure state is minimum TLS 1.2 or higher. NIST SP 800-52 Rev. 2 requires support for TLS 1.2 and later guidance trends toward TLS 1.3; Microsoft notes TLS 1.0/1.1 are being disabled by default in preview Windows 11 / Server 2024-era builds. |
| Exposure data | Censys reported that for HTTPS on the public internet, less than 1% of observed services still negotiated TLS 1.0 or 1.1 as highest version, yet that still represented over 3 million services. Translation: externally exposed legacy TLS is now the minority, but not rare enough to ignore. |
| Disclosure timeline | Tenable published plugin 84470 on 2015-06-30. PCI pushed migration away from SSL / TLS 1.0 to 2018-06-30 for most entities, and IETF formally deprecated TLS 1.0/1.1 in RFC 8996 in 2021-03. |
noisgate verdict.
The decisive factor is that supporting TLS 1.0 is not the same as being remotely compromiseable; the meaningful abuse path usually requires a man-in-the-middle position or a legacy client that still negotiates the old protocol. That sharply narrows the exposed population and keeps this below HIGH for most 10,000-host enterprises.
Why this verdict
- Downward adjustment: requires more than raw network reach — the dangerous path usually needs on-path control, downgrade influence, or a legacy client actually using TLS 1.0.
- Downward adjustment: blast radius is session-level — this is about weakening transport confidentiality/integrity for a given service flow, not instant code execution or whole-host takeover.
- Upward adjustment: broad deployment pattern — the finding can exist on load balancers, appliances, web servers, and forgotten internal services, so prevalence inside large enterprises is still meaningful.
- Upward adjustment: compliance and trust impact — PCI explicitly rejects SSL / early TLS as a security control except narrow cases, so payment and partner-facing services carry outsized business risk even when exploitability is moderate.
- Downward adjustment: modern client ecosystem — browser vendors, Microsoft, and standards bodies have spent years killing TLS 1.0/1.1, which reduces successful real-world exploitation paths.
Why not higher?
This is not unauthenticated RCE, auth bypass, or wormable exploitation. The core friction is attacker position: if the adversary cannot get on path or cannot coerce a legacy handshake, mere TLS 1.0 support often remains dormant technical debt rather than an active compromise path.
Why not lower?
It still weakens a security boundary at the protocol layer, and the internet still contains millions of exposed legacy TLS services. For internet-facing auth, payment, or sensitive data flows, the confidentiality impact is real enough that writing it off as backlog hygiene would be irresponsible.
What to do — in priority order.
- Enforce TLS 1.2+ at the edge — Set the minimum protocol to TLS 1.2 or higher on load balancers, reverse proxies, CDN edges, mail gateways, and VPN portals first, because that collapses exposure for many backends at once. For a MEDIUM verdict there is no mitigation SLA — go straight to the 365-day remediation window, but prioritize PCI-scoped and internet-facing services immediately because audit and customer impact outrun the security score.
- Inventory legacy clients before change — Pull connection telemetry from web proxies, load balancers, Schannel/OpenSSL logs, or Zeek to identify who still negotiates TLS 1.0 before you disable it. This avoids the classic enterprise trap where the only systems broken are old scanners, Java runtimes, embedded devices, or payment terminals that nobody remembered.
- Segment unavoidable exceptions — If a business-critical legacy device truly cannot move yet, isolate it behind dedicated VIPs, ACLs, or private network paths and keep it out of shared internet-facing listener pools. For MEDIUM, there is no mitigation SLA, but exception containment should still happen well before the 365-day remediation deadline because it reduces exposure while replacement work is scheduled.
- Prefer protocol enforcement over host patch chasing — Where possible, fix this once in the TLS termination layer instead of touching every backend host individually. That is the fastest path for large estates and it avoids partial cleanup where the app server is hardened but an old management port or alternate listener still accepts TLS 1.0.
- Installing unrelated OS patches without changing TLS policy does not solve the finding; the service can still negotiate TLS 1.0 afterward.
- Relying on users to 'normally use TLS 1.2 anyway' is not a control; if the server still permits TLS 1.0, the downgrade path and legacy-client path still exist.
- A WAF is not the answer here; this is a transport negotiation issue and the wrong TLS version can be accepted before the WAF meaningfully helps.
Crowdsourced verification payload.
Run this from an auditor workstation or Linux jump host that can reach the target service over the network. Invoke it as bash check_tls10.sh example.com 443; it needs only normal user privileges and outputs VULNERABLE, PATCHED, or UNKNOWN based on whether a TLS 1.0 handshake succeeds.
#!/usr/bin/env bash
# check_tls10.sh
# Purpose: verify whether a remote service still negotiates TLS 1.0
# Usage: bash check_tls10.sh <host> <port>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN/usage
set -u
HOST="${1:-}"
PORT="${2:-}"
TIMEOUT_BIN="$(command -v timeout || true)"
OPENSSL_BIN="$(command -v openssl || true)"
if [[ -z "$HOST" || -z "$PORT" ]]; then
echo "UNKNOWN - usage: bash check_tls10.sh <host> <port>"
exit 2
fi
if [[ -z "$OPENSSL_BIN" ]]; then
echo "UNKNOWN - openssl not found"
exit 2
fi
run_cmd() {
if [[ -n "$TIMEOUT_BIN" ]]; then
"$TIMEOUT_BIN" 12 "$@"
else
"$@"
fi
}
# Force TLS 1.0 negotiation. If handshake succeeds and a certificate/connection is established,
# the service is still vulnerable from a protocol-support perspective.
OUTPUT="$(echo | run_cmd "$OPENSSL_BIN" s_client -connect "${HOST}:${PORT}" -servername "$HOST" -tls1 2>&1)"
RC=$?
if echo "$OUTPUT" | grep -qiE 'CONNECTED\(|Protocol *: *TLSv1|Cipher *: '; then
if ! echo "$OUTPUT" | grep -qiE 'alert protocol version|unsupported protocol|wrong version number|no protocols available|handshake failure'; then
echo "VULNERABLE - ${HOST}:${PORT} accepted or negotiated TLS 1.0"
exit 1
fi
fi
if echo "$OUTPUT" | grep -qiE 'alert protocol version|unsupported protocol|no protocols available|handshake failure'; then
echo "PATCHED - ${HOST}:${PORT} rejected TLS 1.0"
exit 0
fi
if [[ $RC -ne 0 ]]; then
echo "UNKNOWN - handshake test failed (network issue, non-TLS service, or ambiguous response)"
exit 2
fi
echo "UNKNOWN - ambiguous response, inspect manually"
exit 2
If you remember one thing.
Sources
- Tenable Nessus Plugin 84470
- PCI SSC FAQ: Does PCI DSS define which versions of TLS must be used?
- PCI SSC blog: PCI Changes Date for Migrating from SSL and Early TLS
- RFC 8996: Deprecating TLS 1.0 and TLS 1.1
- NIST SP 800-52 Rev. 2
- Microsoft Learn: TLS 1.0 and TLS 1.1 deprecation in Windows
- Censys 2023 State of the Internet Report
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.