1bf55f1eb0
All OSSN authors, added under the "Author:" metadata field Change-Id: I81771dd3ec8d2c133ebc6ddf9f2c5f0f958d603a Closes-Bug: #1599064
149 lines
6.2 KiB
Plaintext
149 lines
6.2 KiB
Plaintext
Configuring OpenStack deployments to prevent POODLE attacks
|
|
---
|
|
|
|
### Summary ###
|
|
POODLE (CVE-2014-3566) is a new attack on SSLv3 that allows an active
|
|
network-based attacker to recover the plaintext from a secure connection
|
|
using a CBC-mode cipher. Unfortunately, all other cipher modes in SSLv3
|
|
are also insecure. Therefore, the recommended solution is to disable
|
|
SSLv3. We also discuss an alternative option below. Proper mitigation
|
|
requires addressing this issue on SSLv3 clients and servers.
|
|
|
|
|
|
### Affected Services / Software ###
|
|
Any service using SSLv3. Depending on the backend SSL library, this
|
|
can include many components of an OpenStack cloud:
|
|
|
|
- OpenStack services
|
|
- OpenStack clients
|
|
- Web servers (Apache, Nginx, etc)
|
|
- SSL/TLS terminators (Stud, Pound, etc)
|
|
- Proxy services (HAProxy, etc)
|
|
- Miscellaneous services (eventlet, syslog, ldap, smtp, etc)
|
|
|
|
|
|
### Discussion ###
|
|
The POODLE attack was first announced on 14 Oct 2014 [1]. For a deeper
|
|
technical discussion on POODLE, we refer you to the security advisory
|
|
at openssl.org [2] and Daniel Franke's write-up [3]. POODLE affects any
|
|
SSL/TLS connection that can be downgraded to SSLv3. This requires both
|
|
the client and the server to support SSLv3. Due to the way the protocol
|
|
negotiations work, an attacker positioned on the network between the
|
|
client and the server can force a downgrade to SSLv3 by selectively
|
|
dropping network packets.
|
|
|
|
The best remediation for POODLE is to disable SSLv3 on all clients and
|
|
servers that you control. This will protect you regardless of the
|
|
mitigation status on the other end of the connection. An alternative
|
|
option is to deploy TLS_FALLBACK_SCSV, which will prevent the downgrade
|
|
attack, but could still allow SSLv3 connections if that is the only
|
|
supported protocol between the client and server. Any connection that
|
|
happens over SSLv3 using a CBC-mode cipher would still be vulnerable.
|
|
|
|
You can use the OpenSSL s_client tool to test if a server allows SSLv3
|
|
connections:
|
|
|
|
openssl s_client -connect <domain name>:<port> -ssl3
|
|
|
|
If the server does not support SSLv3, you will see a handshake failure
|
|
message. This indicates that the server does not accept SSLv3
|
|
connections. Assuming this server also has SSLv2 disabled, which is a
|
|
common default today, then no further configuration is needed. If
|
|
the handshake from s_client completes, then the server requires some
|
|
configuration. Note that you can perform this step for any service
|
|
that has SSL/TLS enabled including OpenStack API endpoints.
|
|
|
|
Testing clients is slightly more cumbersome because there are likely
|
|
many more clients than servers throughout the cloud. However, this
|
|
test follows a similar pattern. Using the OpenSSL s_server tool, you
|
|
can create an endpoint that only accepts SSLv3:
|
|
|
|
openssl s_server -cert <filename> -key <filename> -state \
|
|
-ssl3 -no_ssl2 -no_tls1 -no_tls1_1 -no_tls1_2 \
|
|
-tlsextdebug
|
|
|
|
If the client can connect to this endpoint, the client needs to update
|
|
their configuration as described below.
|
|
|
|
|
|
### Recommended Actions ###
|
|
We recommend disabling SSLv3 altogether and will provide additional
|
|
guidance on how to do this below.
|
|
|
|
If SSLv3 is still required on your system due to client compatibility
|
|
concerns, then TLS_FALLBACK_SCSV is your only choice. In this case you
|
|
will need an underlying library that supports TLS_FALLBACK_SCSV (such
|
|
as OpenSSL 1.0.1j). Applications using OpenSSL will automatically start
|
|
using TLS_FALLBACK_SCSV once OpenSSL is updated. You should perform an
|
|
audit in your cloud to verify that all SSL/TLS services do use this
|
|
new library:
|
|
|
|
ldd <path to binary that uses OpenSSL> | grep ssl
|
|
|
|
Review the output and ensure that it is linked to the new version of
|
|
OpenSSL that includes TLS_FALLBACK_SCSV support.
|
|
|
|
Disabling SSLv3 can be done at either the application level or the
|
|
library level. Doing it at the library level ensures consistency
|
|
throughout the cloud. However, if you are not already compiling
|
|
OpenSSL then this may not fit into your deployment workflow. In this
|
|
case, you must consider each application in turn.
|
|
|
|
If you are able to recompile your SSL/TLS library, then this is likely
|
|
the best option. Disabling SSLv3 at the library level ensures
|
|
consistency across the system. For OpenSSL, you can use the "no-ssl3"
|
|
build option. Then deploy that library to your cloud and verify that
|
|
all SSL/TLS services are using the library using the ldd command
|
|
discussed above.
|
|
|
|
If you are unable to recompile your SSL/TLS library, then you should
|
|
reconfigure each application that uses SSL/TLS. Each application has
|
|
a different way to handle this configuration. We provide the
|
|
configuration option for some of the more common applications below:
|
|
|
|
Apache:
|
|
SSLProtocol All -SSLv2 -SSLv3
|
|
|
|
Nginx:
|
|
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
|
|
|
Stud:
|
|
Requires code change, see [4].
|
|
After code change use --tls option.
|
|
|
|
Pound:
|
|
Requires code change, see [5].
|
|
After code change use DisableSSLv3 option.
|
|
|
|
HAProxy (only version 1.5+ supports SSL/TLS):
|
|
Depends on config, see [6].
|
|
|
|
Postfix SMTP:
|
|
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
|
|
|
|
The OpenStack services and python clients do not currently have a
|
|
configuration option for the SSL/TLS protocol version. Therefore, the
|
|
best way to avoid SSLv3 with OpenStack code today is to ensure that the
|
|
underlying SSL/TLS library (OpenSSL in this case) is compiled without
|
|
SSLv3 support, as described above.
|
|
|
|
Once you have updated all of the necessary software in your cloud, we
|
|
recommend using the s_client and s_server test procedures described
|
|
above to verify that each service is configured as expected.
|
|
|
|
|
|
### Contacts / References ###
|
|
Author: Bryan D. Payne, Nebula
|
|
This OSSN: https://wiki.openstack.org/wiki/OSSN/OSSN-0039
|
|
Original Launchpad Bug: https://bugs.launchpad.net/ossn/+bug/1382270
|
|
OpenStack Security ML: openstack-security@lists.openstack.org
|
|
OpenStack Security Group: https://launchpad.net/~openstack-ossg
|
|
CVE: CVE-2014-3566
|
|
|
|
[1]: http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html
|
|
[2]: https://www.openssl.org/~bodo/ssl-poodle.pdf
|
|
[3]: https://www.dfranke.us/posts/2014-10-14-how-poodle-happened.html
|
|
[4]: https://github.com/bumptech/stud/pull/138
|
|
[5]: http://www.apsis.ch/pound/pound_list/archive/2014/2014-10/1413471803000
|
|
[6]: http://blog.haproxy.com/2014/10/15/haproxy-and-sslv3-poodle-vulnerability/
|