Successful private key extraction from OpenVPN using Heartbleed
We have successfully extracted private key material multiple times from an OpenVPN server by exploiting the Heartbleed Bug. The material we found was sufficient for us to recreate the private key and impersonate the server.
As you may know, OpenVPN has an SSL/TLS mode where certificates are used for authentication. OpenVPN multiplexes the SSL/TLS session used for authentication and key exchange with the actual encrypted tunnel data stream. The default TLS library for OpenVPN is OpenSSL. Since OpenVPN uses the OpenSSL library but merely passes through the TLS traffic to OpenSSL, this means that OpenVPN is exploitable using Heartbleed, in theory. However, until now there hasn't been any solid evidence that private key material can be extracted from OpenVPN just like it has from some web servers.
This was the server setup we used: Ubuntu 12.04 (VM using KVM) OpenVPN 2.2.1 OpenSSL 1.0.1-4ubuntu5.11
Our exploit is decently weaponized, and while the code is an abomination that even Eris would be embarrassed to present, we believe it may severely impact those who have not already upgraded. Therefore, we will not be publishing the code. Nevertheless, you should assume that other teams with more nefarious purposes have already created weaponized exploits for OpenVPN. Just to be clear, we don't intend to use this exploit ourselves. We merely developed it to examine the practical impact on OpenVPN as part of our incident investigation.
To our knowledge there is currently one published proof of concept script that checks an OpenVPN server's vulnerability to Heartbleed.
Private questions that are not requests for the exploit can be emailed to stromberg@insto.org or admin@mullvad.net (PGP: 0x2C62E8AE).
Best regards,
Fredrik Strömberg, Co-founder of Mullvad
(edit: Formatting, because I'm a HN noob.) (edit[?]: Giving up on the formatting.)
21 comments
[ 2.6 ms ] story [ 52.2 ms ] threadWhat I have read so far seems to imply that OpenVPN is vulnerable, but only if not used with tls-auth or if the attacker has access to the tls-auth key (as is the case for e.g. clients).
You're correct in your second paragraph. I'll quote James Yonan and myself from last Monday:
Using the tls-auth option should protect against this vulnerability (assuming that your tls-auth key is not known to the attacker).
tls-auth is irrelevant if the attacker knows the key, which is the case for consumer VPN services like ours.
Thank you for clarifying this.
Thanks again!
Have you contacted OpenVPN directly?
There is a bit more info in the "community" wiki [0]. It seems the key point is that TLS-auth would already mitigate the vulnerability. TLS-auth is on by default in OpenVPN Access Server, but for the vanilla openvpn, you have to configure it yourself.
And, as noted in the community statement, the TLS-auth is a single global pre-shared key. It could leak a bit more easily than personal certificates.
[0] https://community.openvpn.net/openvpn/wiki/heartbleed
Thus, if you have used it in your OpenVPN setup, and if you know that the few users who have access to your VPN wouldn't have heartbleed-attacked you, then yes, you could assume that your private key has been safe from heartbleed despite an exploitable OpenSSL library.
https://play.google.com/store/apps/details?id=com.frozenrive...
It seems based on QuickTun, which is where the NaCl implementation comes from:
http://wiki.ucis.nl/QuickTun
https://hackerone.com/internet
While there are vulnerable clients out there, you should consider your (vpn) network compromised.
I wonder what could be a possible exploitation on the client side? Obviously, one can not send heartbeat packets to grab the secret key!