Thanks for Twitter Security Team again :) The details can be found here!
Hi, we(Orange Tsai and Meh Chang) are the security research team from DEVCORE. Recently, we are doing a research about SSL VPN security, and found several critical vulnerabilities on Pulse Secure SSL VPN! We have reported to vendor and patches have been released on 2019/4/25
. Since that, we keep monitoring numerous large corporations using Pulse Secure and we noticed that Twitter haven't patched the SSL VPN server over one month!
These vulnerabilities include a pre-auth file reading(CVSS 10) and a post-auth(admin) command injection(CVSS 8.0) which can be chained into a pre-auth RCE! Here are all vulnerabilities we found:
First, we download following files with CVE-2019-11510:
/etc/passwd
/etc/hosts
/data/runtime/mtmp/system
/data/runtime/mtmp/lmdb/dataa/data.mdb
/data/runtime/mtmp/lmdb/dataa/lock.mdb
/data/runtime/mtmp/lmdb/randomVal/data.mdb
/data/runtime/mtmp/lmdb/randomVal/lock.mdb
██████████
The VPN user and hashed passwords are stored in the file mtmp/system
. However, Pulse Secure caches the plain-text password in the dataa/data.mdb
once the user log-in. Here, we just grep part of username/plain-text-password for proofs and further actions.
P.S. we mask the password field for security concerns, and we can send to you if you provide your PGP key.
█████████ / ████
█████████ / ██████
█████ / █████████
██████████ / █████████
███ / ██████
Once we log into the SSL VPN, we found the server has enabled the Two-Factor Authentication. Here, we listed two methods to bypass the 2FA:
████
We observed Twitter using the 2FA solution from Duo.com. With the file mtmp/system
, we could obtain the integration key, secret key, and API hostname, which should be protected carefully according to the Duo documentation:
Treat your secret key like a password
The security of your Duo application is tied to the security of your secret key (skey). Secure it as you would any sensitive credential. Don't share it with unauthorized individuals or email it to anyone under any circumstances!
# secret-key = ██████████
████
dc=███,dc=duosecurity,dc=com
cn=<USER>
# LDAP password = ██████████
██████████
█████
███████
uid=<username>
The Pulse Secure stores the user session in the randomVal/data.mdb
. Without Roaming Session
option enabled, we can reuse the session and log into your SSL VPN!
██████████
The next, in order to trigger the command injection(CVE-2019-11542). We leverage the web proxy function to access the admin interface with following URL:
https://0/admin/
████████
We are now trying to crack the admin hash by GPU. It seems takes a long time, but once we cracked, we can achieve RCE absolutely. Actually, we can simply wait for the admin login and obtain the plain-text password directly!
███████
███████
Anyway, we decided to report to you first, because it's lethal and critical. If you want, we can provide the RCE PoC in admin interface in order to proof the potential risk!
███████
for proof) ██████████We attached screenshots to proof our actions. For security concern, we didn't attach the mtmp/system
and the dataa/data.mdb
. If you want, we can send to you with your PGP key encrypted!
The only and simplest way to solve this problem is to upgrade your SSL VPN to the latest version!
████████
for proof) ████Here we listed affected servers we are monitoring:
Hi, we have cracked the admin hash and got the root shell. This is definitely a Pre-auth RCE on your SSL VPN server!
██████
Thank you for your report. We believe it may be a valid security issue and will investigate it further. It could take some time to find and update the root cause for an issue, so we thank you for your patience.
Thank you for helping keep Twitter secure!
Hi @orange,
Do you have any details on the script you used to exploit CVE-2019-11510 (download.py)? We'd like to confirm that our mitigation works once we've applied the appropriate fix.
Thanks for thinking of Twitter security!
Hi, @andrewsorensen
Unfortunately we cannot provide the download.py
. We decided not to disclose it until the Black Hat because of its criticalness. We believe it is not necessary for your patch. Upgrading the version is the only effective way to prevent this bug and we can help you verify your fix directly. However, we can provide files you need if you provide your PGP key. Also, we can provide the RCE PoC on the admin interface to prove the severity.
Hi, it seems you upgrade all the Pulse Secure SSL VPN(17 servers) to the latest version(9.0.4.64055) on my side. And please check the attachment for files!
We consider this issue to be fixed now.
Thank you for helping keep Twitter secure!
Hi, there
We would like to make a public disclosure on August. Of course we will mask all the sensitive information.
Is there any concern on the side of Twitter?
By the way, is this domain included in the bounty scope?
Thanks :)
Hi @orange,
If you'd like to disclose this, can you please formally request disclosure on this report via the "Request disclosure" dropdown option? That will kick off the process on our end for performing any necessary redactions and evaluating that request.
And yes, we are evaluating this for bounty payout as well and will have more info on that soon.
Sure, thanks!
We will disclosure this report via the "Request disclosure" dropdown in the end of July :)
Hi, @asayler
We will public this report on our Black Hat talk on 8/7 so we would like to double check that, can we put the company name "Twitter" and the URL "██████████" in our slides? Of course, all other sensitive information will not be included! Is that OK to you?
If yes, I can send the "public disclosure request" via the HackerOne dropdown option now!
Hi @orange,
Thanks for checking in. While we're willing to disclose this report so that you may reference it, we'd prefer if Twitter not feature too prominently in your talk given that we are but one of numerous Pulse customers impacted by this vulnerability. That said, the decision on how to include us is ultimately up to you, and we appreciate your efforts to inform the wider community about this vulnerability and the impact it could have.
We would, however, prefer you not mention the domain used by Twitter's vpn (███████). While we realize this domain is likely discoverable by other means, we'd rather not to draw too much attention to it given the fact that we do not generally publish our VPN domains publicly.
Once you request disclosure, I'll take a pass through this report to redact that domain name as well as any other sensitive details included in this report. Please avoid sharing any of the information we redact when speaking or writing about this issue publicly.
In terms of timeline, would you prefer we wait to disclose this report until the day of your talk? Or are you okay with us disclosing this report in the coming weeks prior to your talk?
Thanks,
Andy
Sure, we will pay more attentions while presenting and mask all your domain info carefully! About the disclosure day, could you disclose this report on 8/10? If yes, when do I need to press the "request disclosure" button?
Thanks!
Thanks you very much!!!
@orange I just wanted to confirm that you want us to disclose this on Saturday, August 10th. I noticed your talk is actually on Wednesday, August 7th (https://www.blackhat.com/us-19/briefings/schedule/#infiltrating-corporate-intranet-like-nsa---pre-auth-rce-on-leading-ssl-vpns-15545), so I wanted to confirm that you still wanted this disclosed on the 10th, not the 7th.
Sure! Here is the link: https://www.defcon.org/html/defcon-27/dc-27-schedule.html
This report has now been redacted and disclosed. Thank you for helping keep Twitter secure!