Scanners and auditors still report BEAST, POODLE, Heartbleed, DROWN, Logjam and Sweet32 on live systems, and teams often cannot tell which findings are real risk and which are noise. Each of these attacks broke a specific part of SSL or TLS: a cipher mode, a compression feature, a legacy key exchange, or a single bug in one library. Each one also changed the protocol or the defaults that every modern configuration now relies on. This guide explains what each attack targeted, the conditions it needed, which fix closed it, and how to check whether your estate is still exposed. It is written for security engineers, auditors and platform teams who triage TLS scan results or defend legacy systems that cannot move to TLS 1.3 yet.
Key takeaways
- Most historic attacks need a legacy option to be switched on. SSL 2.0 or 3.0, TLS 1.0, CBC with MAC-then-encrypt, RC4, 3DES, export suites, static RSA key exchange or TLS compression. Turning those off closes almost the whole list.
- Two attacks were implementation bugs, not protocol flaws. Heartbleed (CVE-2014-0160) was a bounds-check error in OpenSSL, and ROBOT was a set of vendor padding oracles. They are fixed by patching, plus key and credential rotation after Heartbleed.
- One attack lives in the application, not TLS. BREACH abuses HTTP response compression, so no TLS setting fixes it: it needs application-level controls on secrets in responses.
- A shared private key spreads the risk. DROWN makes a modern TLS server vulnerable if any other server using the same key, such as a mail server, still accepts SSLv2.
- TLS 1.3 was designed around these lessons. It removed static RSA and Diffie-Hellman, compression, non-AEAD ciphers and renegotiation, and added downgrade protection, which is why moving to TLS 1.2 with AEAD and TLS 1.3 is the durable fix.
The attacks at a glance
The table lists each attack with the identifier given by the primary source we checked. Where a source gave no CVE, none is shown. RFC 7457, the IETF summary of known attacks on TLS and DTLS (Informational, February 2015), is the reference for the earlier entries.
| Attack (year) | Identifier | What it targeted | Preconditions | Closing fix |
|---|---|---|---|---|
| Renegotiation attack (2009) | CVE-2009-3555 | TLS renegotiation in all versions then current | Server allows insecure renegotiation | Renegotiation Indication Extension, RFC 5746 |
| BEAST (2011) | CVE-2011-3389 | Predictable IV in TLS 1.0 CBC mode | TLS 1.0 or SSL 3.0 with a CBC suite; attacker can inject chosen plaintext into the browser | TLS 1.1 and later use explicit IVs; disable TLS 1.0 |
| CRIME (2012) | CVE-2012-4929 | TLS-level compression | TLS compression enabled; secret and attacker data in the same stream | Disable TLS compression (removed in TLS 1.3) |
| Lucky Thirteen (2013) | CVE-2013-0169 | Timing side channel in CBC MAC-then-encrypt | CBC suites; many observed sessions | AEAD such as AES-GCM, or encrypt-then-MAC (RFC 7366) |
| RC4 biases (2001 to 2013) | None given | Keystream biases in RC4 | RC4 suite negotiated; same secret encrypted many times | RFC 7465 prohibits RC4 |
| BREACH (2013) | CVE-2013-3587 (RFC 7457 notes it was not officially allocated) | HTTP-level response compression | Secret and reflected input in a compressed HTTP response body | Application controls, such as per-request CSRF token masking |
| Heartbleed (2014) | CVE-2014-0160 | Missing bounds check in OpenSSL heartbeat | OpenSSL 1.0.1 to 1.0.1f | OpenSSL 1.0.1g or later, then rekey and rotate credentials |
| Triple handshake (2014) | CVE-2014-1295 | Session resumption and renegotiation sharing keys across connections | Client authentication or channel binding across resumed sessions | Extended master secret, RFC 7627; TLS 1.3 redesign |
| POODLE (2014) | CVE-2014-3566 | SSL 3.0 CBC padding | Client and server accept SSL 3.0, often via insecure fallback | RFC 7568 forbids SSL 3.0; TLS_FALLBACK_SCSV (RFC 7507) |
| FREAK (2015) | No CVE on the source page | Client state machine accepting export RSA keys | Server offers export suites; vulnerable client library | Disable export suites; patch clients |
| Logjam (2015) | No CVE on the source page | Downgrade to 512-bit export Diffie-Hellman | Server supports DHE_EXPORT, or uses common weak DH groups | Disable export suites; 2048-bit DH groups or ECDHE |
| DROWN (2016) | CVE-2016-0800 | SSLv2 used as a Bleichenbacher oracle against the same RSA key | Any server using the key accepts SSLv2 | Disable SSLv2 everywhere the key is used; rekey if unsure |
| Sweet32 (2016) | CVE-2016-2183 (TLS), CVE-2016-6329 (OpenVPN) | Birthday collisions in 64-bit block ciphers | 3DES or Blowfish in CBC; hundreds of gigabytes on one connection | Remove 64-bit ciphers; limit data per key |
| ROBOT (2017) | Vendor CVEs, for example CVE-2017-6168 (F5), CVE-2017-17382 (Citrix) | RSA PKCS #1 v1.5 padding oracles in implementations | Server accepts TLS_RSA key exchange suites | Patch; disable all TLS_RSA key exchange suites |
Cipher mode and padding attacks: BEAST, Lucky Thirteen and POODLE
All three exploited how SSL 3.0 and early TLS combined CBC encryption with a MAC. SSL and TLS up to 1.2 compute the MAC first and then encrypt (MAC-then-encrypt), so the receiver must decrypt and check padding before it can check integrity. That ordering leaks information.
- BEAST: TLS 1.0 used the last ciphertext block of the previous record as the IV for the next, so an attacker who could inject chosen plaintext from the victim's browser could recover cookie bytes. TLS 1.1 introduced explicit per-record IVs. Browsers also added record splitting, which is why BEAST findings against current clients carry little practical risk, but a TLS 1.0 finding still fails RFC 8996.
- Lucky Thirteen: a timing variant of the padding oracle that works against TLS 1.1 and 1.2 CBC suites. RFC 7457 names authenticated encryption (AES-GCM, RFC 5288) or encrypt-then-MAC (RFC 7366) as the mitigations.
- POODLE: SSL 3.0 padding is not deterministic and is not covered by the MAC, so the oracle needed no timing at all. RFC 7457 records no mitigation within SSL 3.0. Attackers reached SSL 3.0 by breaking handshakes until clients retried at a lower version, the so-called downgrade dance. RFC 7507 added TLS_FALLBACK_SCSV (value 0x5600) and the fatal inappropriate_fallback alert (86) to stop that, and RFC 7568 (June 2015) then forbade SSL 3.0 outright.
What changed: AEAD cipher suites became the default in TLS 1.2 baselines and the only option in TLS 1.3. RFC 8996 later obsoleted RFC 7507, because once TLS 1.0 and 1.1 are gone there is nothing to fall back to. See the Authenticated Encryption and Block Cipher Modes Guide.
Compression attacks: CRIME, TIME and BREACH
Compression makes output length depend on content. If a secret (a session cookie or CSRF token) and attacker-controlled text are compressed together, the attacker can guess the secret one character at a time by watching which guess makes the ciphertext shorter.
| Attack | Layer compressed | Secret targeted | Fix location |
|---|---|---|---|
| CRIME | TLS record compression | Request headers such as cookies | TLS library: disable compression |
| TIME | HTTP compression, measured by timing | Secrets in responses | Disable TLS compression; application controls |
| BREACH | HTTP response compression (gzip, deflate) | Secrets in response bodies, such as CSRF tokens | Application only |
TLS compression is now off in mainstream libraries and absent from TLS 1.3, so CRIME is closed by any current configuration. BREACH is different: RFC 7457 states there is no TLS-level mitigation. Practical controls are masking or randomising CSRF tokens per response, keeping secrets out of bodies that reflect user input, adding SameSite cookies and rate limiting, and disabling compression only on the sensitive endpoints rather than site-wide. A BREACH finding from a scanner usually only means "this page is compressed"; confirm whether a secret and reflected input share the response before raising it.
Key exchange and downgrade attacks: FREAK, Logjam, DROWN and ROBOT
These four share a root cause: 1990s export cryptography and RSA key exchange that were left enabled long after anyone needed them.
- FREAK: part of the SMACK state machine bugs. Vulnerable clients (the miTLS team named Safari and OpenSSL-based Android browsers) accepted an export-grade RSA key they had not asked for. The researchers reported that such keys, under 512 bits, could be factored in under 12 hours for about 100 dollars of cloud compute. The fix was client patches and removing export suites from servers.
- Logjam: made public on 20 May 2015. An attacker in the middle downgraded connections to 512-bit export Diffie-Hellman. The weakdh.org team reported 8.4% of the top one million HTTPS domains vulnerable, and warned that a nation-state could break the most common 1024-bit group. Their advice: disable export suites, use DH groups of 2048 bits or more, and have clients reject primes under 1024 bits.
- DROWN: CVE-2016-0800, disclosed in March 2016. An SSLv2 server is used as a Bleichenbacher padding oracle to decrypt TLS sessions protected by the same RSA key. The researchers measured 33% of HTTPS servers vulnerable at disclosure. A web server with a perfect TLS configuration is still exposed if its certificate key is reused on a mail or VPN service that accepts SSLv2. Clients cannot mitigate it.
- ROBOT: disclosed in 2017, it showed that Bleichenbacher's 1998 attack still worked against many products, including load balancers and firewalls. Recorded traffic to servers using RSA key exchange could be decrypted later. The researchers recommend disabling every cipher suite whose name starts with TLS_RSA; suites that use RSA only for signatures with ECDHE or DHE are not affected.
What changed: TLS 1.3 removed static RSA and static Diffie-Hellman, so all key exchange is forward secret, and removed custom DHE groups. It also embeds a downgrade sentinel in ServerHello.random (RFC 8446 section 4.1.3) so a TLS 1.3 client can detect an attacker forcing TLS 1.2 or lower. RFC 8446 has since been obsoleted by RFC 9846, which keeps these properties. See the How TLS Works Guide.
Cipher and implementation flaws: RC4, Sweet32 and Heartbleed
- RC4: statistical biases in the keystream let an attacker recover plaintext that is encrypted many times, such as a cookie. RFC 7465 (February 2015) says clients MUST NOT offer RC4 and servers MUST NOT select it.
- Sweet32: with a 64-bit block, CBC ciphertext blocks start to collide after about 232 blocks. The researchers recovered an HTTPS cookie from 610 GB of 3DES traffic captured over 30.5 hours, and estimated about 785 GB in general. The fixes are removing 3DES and Blowfish, and limiting data per connection or key. OpenVPN deployments that still default to Blowfish need explicit attention.
- Heartbleed: CVE-2014-0160 in OpenSSL 1.0.1 through 1.0.1f, made public on 7 April 2014. A malformed heartbeat request returned chunks of server memory, including private keys, passwords and session cookies, and left no trace in normal logs. It is in the CISA Known Exploited Vulnerabilities catalogue. Patching alone was not enough: the published remediation was to patch, revoke and reissue certificates with new keys, invalidate sessions and have users change passwords.
Heartbleed is the clearest example of why TLS private keys are credentials. If you suspect a key was exposed, follow the Leaked TLS Private Key Response.
Triaging scanner findings today
Use the table to decide whether a finding is current risk, a compliance gap or noise. Version and cipher findings are cheap to confirm with a handshake test from outside and inside the network.
| Finding | Real risk today | Confirm by | Action |
|---|---|---|---|
| SSLv2 or SSLv3 enabled | High: DROWN and POODLE; forbidden by RFC 6176 and RFC 7568 | Handshake test per protocol on every port, including SMTP, IMAP, POP3 and VPN | Disable now; if SSLv2 was on anywhere the key is shared, rekey |
| TLS 1.0 or 1.1 enabled | Medium: BEAST and SHA-1 handshake weaknesses; forbidden by RFC 8996 | Version scan; client telemetry for who still connects | Disable after checking legacy clients |
| RC4 or 3DES offered | Medium: RC4 biases, Sweet32 | Cipher enumeration | Remove from the cipher list |
| Export or anonymous suites | High: FREAK, Logjam | Cipher enumeration | Remove |
| TLS_RSA key exchange suites | Medium to high: ROBOT, no forward secrecy | Cipher enumeration plus vendor advisory check | Remove; patch affected appliances |
| DH group under 2048 bits | Medium: Logjam class | Scanner reports DH size | Use RFC 7919 groups or ECDHE only |
| BREACH flagged | Depends on the page | Check whether secrets and reflected input share a compressed response | Application controls on that endpoint |
| Heartbleed flagged | Critical if confirmed | Library version check | Patch, rekey, revoke, rotate credentials |
| Insecure renegotiation | Low on current stacks | Scanner check for RFC 5746 support | Patch the library |
How to retire legacy TLS safely
- Inventory every TLS endpoint, not just websites. Include mail, LDAP over TLS, databases, VPNs, load balancer back ends and management interfaces. Record which certificates and private keys are shared across them, because DROWN crosses services.
- Measure who still uses legacy options. Log the negotiated protocol and cipher at load balancers and servers for at least two business cycles. This shows which clients, often embedded devices, payment terminals or old Java runtimes, will break.
- Remove the always-safe items first. SSLv2, SSLv3, export, NULL and anonymous suites, RC4 and TLS compression have no legitimate modern users. Remove them everywhere in one change.
- Pilot the TLS 1.0, 1.1, 3DES and TLS_RSA removal. Start with internal or low-traffic services, watch handshake failure rates, then roll through rings. Keep the previous configuration as a versioned file so rollback is one deployment.
- Isolate what cannot move. Put legacy clients behind a dedicated endpoint with its own key and certificate, with network restrictions and an expiry date for the exception.
- Prefer TLS 1.3 and AEAD in TLS 1.2. Use ECDHE key exchange and AES-GCM or ChaCha20-Poly1305. NIST SP 800-52 Rev. 2 requires TLS 1.2 for US government servers and TLS 1.3 support by 1 January 2024. See the TLS Server Configuration Baseline Guide.
- Rescan and lock the baseline. Add the approved protocol and cipher list to configuration management so drift is caught, and test after every appliance firmware update.
Small versus large organisations: a small organisation using managed hosting or a CDN can usually just select the provider's modern policy and check that mail and VPN endpoints match. A large estate needs the inventory and telemetry steps, because the hard cases are internal appliances and partner integrations that nobody owns.
Where identity fits
Several of these attacks targeted credentials carried inside TLS, not the data alone: BEAST, CRIME, BREACH, RC4 and Sweet32 all aimed at session cookies or tokens, and Heartbleed leaked private keys and passwords. A TLS server key is itself a non-human identity credential. Treat it like one: know where every key is deployed, avoid sharing one key across services, rotate it on a schedule and after any exposure, and keep session lifetimes short so a stolen cookie has limited value. See the SSL/TLS Certificate Types guide and the Certificate Transparency Monitoring Guide for Web Teams.
Detection and measurement
Exploitation of most of these attacks is hard to see in logs, and Heartbleed left no trace at all, so measure exposure rather than hunting for attacks. Network adversary-in-the-middle activity maps to ATT&CK T1557 Adversary-in-the-Middle and T1040 Network Sniffing.
- Endpoints still offering SSL 2.0, SSL 3.0, TLS 1.0 or TLS 1.1: target zero on internet-facing services.
- Share of handshakes using TLS 1.3: trend upwards; a sudden fall can indicate a middlebox or downgrade problem.
- Endpoints offering RC4, 3DES, export or TLS_RSA suites: target zero, with named exceptions.
- Private keys shared across more than one service: count and reduce.
- Time from TLS library advisory to patched estate: measured per severity.
- Open legacy TLS exceptions past their expiry date: target zero.
Common failure patterns
- Fixing the website and forgetting the mail server. DROWN and Logjam figures were higher for SMTP, IMAP and POP3 than for HTTPS, and a shared key links the two.
- Patching Heartbleed without rekeying. A patched server still uses a key that may already have leaked.
- Treating BREACH as a TLS setting. Disabling compression site-wide costs performance and still misses the real issue in the application.
- Appliances with frozen cipher lists. ROBOT affected load balancers and firewalls whose TLS stacks lag behind server operating systems.
- Exceptions with no end date. A legacy client exception granted for one partner quietly becomes the default policy on a shared endpoint.
Framework mapping
| Framework | Reference | How it applies |
|---|---|---|
| NIST CSF 2.0 | PR.DS-02 | Protecting data in transit with current protocols |
| NIST CSF 2.0 | ID.RA-01, PR.PS-02 | Finding weak TLS configurations and replacing legacy software |
| NIST SP 800-53 Rev. 5 | SC-8, SC-13 | Transmission confidentiality and approved cryptography |
| NIST SP 800-53 Rev. 5 | SC-12, CM-7 | Key management; removing unneeded protocols and suites |
| NIST SP 800-53 Rev. 5 | RA-5, SI-2 | Scanning for and remediating TLS flaws such as Heartbleed |
| ISO/IEC 27001:2022 | Annex A 8.24 | Use of cryptography rules |
| CIS Controls v8.1 | Control 3, Control 4 | Data protection in transit; secure configuration |
| MITRE ATT&CK | T1557, T1040 | Interception and downgrade on the network path |
Practitioner checklist
- Inventory every TLS service on every port and record which private keys are shared.
- Disable SSLv2, SSLv3, export, NULL, anonymous and RC4 suites and TLS compression everywhere.
- Rekey any certificate whose key was ever used on a service that accepted SSLv2.
- Log negotiated protocol and cipher, then retire TLS 1.0 and 1.1 in pilot rings with a rollback file.
- Remove 3DES and all TLS_RSA key exchange suites; check appliance vendor advisories for ROBOT.
- Use ECDHE or 2048-bit RFC 7919 groups, AEAD ciphers and TLS 1.3 where clients allow.
- Handle BREACH findings in the application by masking per-response secrets.
- After any memory disclosure bug, patch, rekey, revoke, invalidate sessions and rotate exposed credentials.
- Give every legacy TLS exception an owner, isolation and an expiry date.
Standards and references
- IETF: RFC 7457 Summarizing Known Attacks on TLS and DTLS
- IETF: RFC 8996 Deprecating TLS 1.0 and TLS 1.1
- IETF: RFC 7568 Deprecating Secure Sockets Layer Version 3.0
- IETF: RFC 7465 Prohibiting RC4 Cipher Suites
- IETF: RFC 7507 TLS Fallback Signaling Cipher Suite Value
- NIST: SP 800-52 Rev. 2 Guidelines for TLS Implementations
- DROWN research team: The DROWN Attack
- Weak Diffie-Hellman research team: Logjam and Weak Diffie-Hellman
Related NHI Mgmt Group resources: How TLS Works Guide · TLS Server Configuration Baseline Guide · Cryptographic Protocol Failures and Misuse Guide · HSTS and HSTS Preload · Leaked TLS Private Key Response