Oracle MAF store bypass
This blogpost is a direct copy of previous research i have done at PenTestPartners. The original post resides here: https://www.pentestpartners.com/security-blog/oracle-maf-store-bypass-a-how-to/
This blog post is purely for archive purposes only
On a recent assignment I was asked to look at the security of a cloud-based solution for expenses, the Oracle® ExpensesCloud with Fusion applications. It was being used for employees to create/save/edit/submit claims to the employer.
TL;DR
Having default hardcoded credentials allows an attacker effortless compromise of the credentialed action. In this instance the attack allows someone to inject a custom Certificate Authority into the application’s KeyStore allowing the attacker to man-in-the-middle the traffic for further analysis!
Let’s get into it
Each employee had a work mobile phone with the “Oracle: Fusion Mobile Expenses” application installed, so the first step was to replicate it in my Android phone testing environment.
Not the actual environment ?
Cert pinning bypass?
The application uses its own SSL/TLS KeyStore, outside of the normal device cert repository, so normal Cert pinning bypass techniques won’t work. Trust me I tried a lot!
Onwards to the KeyStore
Once the application was installed I found an interestingly named file called “mafcerts.jks” in the application data folder. On android it’s located here “/data/data/com.oracle.expenses/files/mafcerts.jks”
As always I decompiled the application to look through the source code looking for interesting strings. Specifically I wanted to know if there was any info on the “mafcerts.jks” in the source code.
There was:
Great, we now have the hardcoded creds for the keystore. ?
NOTE: these default creds are very well known in the Java/Oracle world for all KeyStores
Source: https://docs.oracle.com/cd/E19957-01/817-3331/6miuccqo3/index.html
Time to Burp
So, the next step was to try and add my own “Burp CA” into the file to be able to MiTM the apps https traffic.
Download the “mafcerts.jks” file to your computer.
You will also need the Burp CA file too, here is how to do that: https://support.portswigger.net/customer/portal/articles/1783075-Installing_Installing%20CA%20Certificate.html
Rename the Burp certificate filetype to end in *.pem instead of *.cer
If you have java installed on your Linux distro you should be able to run “keytool” from anywhere, but if not try these steps:
“find / -name jre” “cd /path/to/jre/location” “./keytool”
Once you can run “keytool” and have both “mafcerts.jks” and “<burpcafile>.pem” you can now add Burps CA file to the KeyStore.
“keytool -import -trustcacerts -alias portswiggerca -file burpcert.pem -keystore mafstore.jks”
It will then ask you for the password “changeit” as found earlier.
It will ask you to “trust” this new cert. Type “yes” and you’re done. Now you can verify the new cert has been added to the KeyStore:
“keytool -list -v -keystore mafcerts.jks | grep Alias”
Now all you have to do is replace the “mafcerts.jks” file in the application directory on the phone (using ADB for android) and restart the app.
MiTM time
Additionally, you can now MiTM the application in the normal way with proxy droid or via the wireless proxy settings.
PS. if you see Oracle built apps, they mostly use this method of cert pinning. Don’t waste a day like I did!