The POODLE (Padding Oracle On Downgraded Legacy Encryption) vulnerability exploits SSL 3.0's weak padding verification during CBC-mode cipher suites. When a client and server fall back to SSL 3.0 (often through protocol downgrade attacks), an attacker can:
- Decrypt secure HTTP cookies
- Intercept plaintext data
- Perform man-in-the-middle attacks
Use OpenSSL to check if your server accepts SSL 3.0 connections:
openssl s_client -connect example.com:443 -ssl3
If the connection succeeds, your server is vulnerable. Here's what a vulnerable response looks like:
CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = California, L = San Francisco, O = "Example, Inc.", CN = *.example.com
verify return:1
---
SSL handshake has read 3667 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
The following tools can automate vulnerability detection:
- Nmap:
nmap --script ssl-poodle -p 443 example.com
- TestSSLServer: Java-based SSL/TLS tester
- Qualys SSL Labs: Online scanner at https://www.ssllabs.com/ssltest/
For Apache servers, modify your SSL configuration:
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
For Nginx servers:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
Modern browsers have implemented protections, but you can manually disable SSL 3.0:
- Chrome: Launch with
--ssl-version-min=tls1
- Firefox: Set
security.tls.version.min
to 1 in about:config - IE: Disable SSL 3.0 in Internet Options > Advanced settings
After implementing changes, verify using:
openssl s_client -connect example.com:443 -ssl3
You should now see connection failure with error:
14004410:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number
While addressing POODLE, consider these complementary measures:
- Implement HTTP Strict Transport Security (HSTS)
- Enable OCSP stapling
- Disable weak cipher suites completely
- Regularly update your TLS libraries
CVE-2014-3566 (POODLE) is a protocol-level vulnerability in SSL 3.0 that allows man-in-the-middle attackers to decrypt HTTPS connections by exploiting the protocol's padding mechanism. This affects any service supporting SSLv3 - even if more modern protocols like TLS 1.2 are enabled.
For developers needing immediate verification, here are three reliable ways to check your servers:
# Using OpenSSL command line (quick test)
openssl s_client -connect example.com:443 -ssl3 2>&1 | grep "Cipher is"
# Expected secure response:
# error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
Alternatively, use these online scanners:
- SSL Labs' SSL Server Test
- Qualys' SSL Client Test
For automated checks in your infrastructure, implement this Python test using the requests library:
import requests
from requests.packages.urllib3.util.ssl_ import create_urllib3_context
from requests.adapters import HTTPAdapter
class SSLv3Adapter(HTTPAdapter):
def init_poolmanager(self, *args, **kwargs):
context = create_urllib3_context(ssl_version=ssl.PROTOCOL_SSLv3)
kwargs['ssl_context'] = context
return super().init_poolmanager(*args, **kwargs)
try:
s = requests.Session()
s.mount('https://', SSLv3Adapter())
response = s.get('https://yourdomain.com', timeout=5)
print("VULNERABLE: Server accepts SSLv3 connections")
except:
print("SECURE: Server rejects SSLv3 connections")
For common web servers, here are the configuration changes needed:
Apache:
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384..."
Nginx:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
For environments requiring backward compatibility, consider implementing TLS_FALLBACK_SCSV to prevent protocol downgrade attacks while maintaining legacy support.
Windows Server administrators should verify these registry settings:
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server
"Enabled"=dword:00000000
Implement continuous monitoring with tools like:
- OpenVAS SSL checks
- Nessus plugin #78479
- Custom Nagios checks using check_sslprotocol
Remember that complete mitigation may require client-side updates for systems still attempting SSLv3 connections.