ssoDecrypt is a small tool for decrypting Oracle (local) autologin wallets (cwallet.sso). Only 11g wallets are currently supported.
Oracle autologin wallets are integrated in several Oracle productions and used for
- Certificates (HTTP Server, Internet Directory, ... )
- Secure External Password Store
- Advanced Security Option (ASO)
- ...
- Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.
- "oks" (includes also required BouncyCastle Crypto lib
-
Patch JRE with JCE Unlimited Strength Jurisdiction Policy
-
Download PoC from soonerorlater.hu (see "oks" requirement) and copy the content of the "oks" folder into ssoDecryptor/libs/
-
Compile
javac -cp .:libs/:libs/bcprov-jdk16-145.jar ssoDecryptor.java
-
Run:
./ssoDecrypt.sh /path/to/cwallet.sso [ ]
The username and hostnames arguments are for the local SSO wallet (see "Background" for more infos).
The SSO wallet key in raw format should be written into a file (cwallet.key) to be binary safe.
[oracle@server ~]$ ./ssoDecrypt.sh /path/to/cwallet.sso sso key: 7f76ebcc0b326c81 sso secret: 52d76a43e5dd847053cdeb0f1dd3ed6a8d1bead0c0de9747 obfuscated password: 07344b6c491f24470956332c68164657 p12 password (hex): 37472315037178586d7728675d677c73 [...] [oracle@server ~]$ echo 37472315037178586d7728675d677c73 | xxd -p -r > cwallet.key [oracle@server ~]$ dd if=/path/to/cwallet.sso of=newP12wallet.p12 bs=1 skip=77 [oracle@server ~]$ openssl pkcs12 -in newP12wallet.p12 -nodes -passin file:cwallet.key MAC verified OK [...]
[oracle@server ~]$ orapki wallet change_pwd -wallet newP12wallet.p12 -oldpwd `cat cwallet.key` -newpwd test1234 [oracle@server ~]$ openssl pkcs12 -in newP12wallet.p12 -nodes -passin pass:test1234 MAC verified OK [...]
0x00 - 0x4C Header: 0x00 - 0x02 First 3 bytes are always A1 F8 4E (wallet recognition?!) 0x03 Type = SSO: 36; LSSO: 38 0x04 - 0x06 00 00 00 0x07 Version (10g: 05; 11g: 06) 0x08 - 0x0A 00 00 00 0x0B - 0x0C 11g: always the same (41 35) 0x0D - 0x1C DES key 0x1D - 0x4C DES secret (DES -> CBC -> PKCS7 padding) which contains the PKCS#12 password 0x4D - EOF PKCS#12 data (ASN.1 block)
In the local SSO wallet version (-auto_login_local), the decrypted DES secret is a message which needs to be hashed (HMAC SHA1) with a key to get the actual PKCS#12 password. This key is made up of username and hostname of the corresponding system where the wallet was created. If the key is unknown it is not possible to open the local SSO wallet.