<div dir="ltr"><span style="font-family:courier new,monospace">FYI, I just posted the following security advisory to both Bugtraq and<br>Full Disclosure. Hopefully this will be enough to get it picked up by<br>NIST's NVD and listed there.<br>
<br>For the record, this is what I posted. *IF* anyone decides to respond<br>to this advisory on either of these ESAPI lists please:<br>1) Do NOT top-post<br>2) Trim the original post to only the essential elements needed to<br>
†† keep the context and then reply after that.<br><br>Thanks,<br>-kevin<br>-- <br>Blog: <a href="http://off-the-wall-security.blogspot.com/">http://off-the-wall-security.blogspot.com/</a><br>NSA: All your crypto bit are belong to us.<br>
<br>================= Posted to Bugtraq and Full Disclosure ===============<br>OWASP ESAPI for Java † † † † †Security Advisory #1 † † † † †The OWASP Foundation<br><br>† † † † † † † † † †MAC Bypass in ESAPI Symmetric Encryption<br>
<br>Summary<br>=======<br>Category: † † † Symmetric cryptography<br>Module: † † † † ESAPI (Encryptor interface)<br>Announced: † † †2013-08-23 via ESAPI-Dev mailing list<br>† † † † † † † † (<a href="http://lists.owasp.org/pipermail/esapi-dev/2013-August/002285.html">http://lists.owasp.org/pipermail/esapi-dev/2013-August/002285.html</a>)<br>
Credits: † † † †Philippe Arteau<br>Affects: † † † †ESAPI 2.0GA, ESAPI 2.0.1<br>Corrected: † † †2013-09-02 in ESAPI 2.1.0 (cryptographic version 20130830)<br>Google Issue #: 306 (<a href="http://code.google.com/p/owasp-esapi-java/issues/detail?id=306">http://code.google.com/p/owasp-esapi-java/issues/detail?id=306</a>)<br>
CWE: † † † † † †CWE-310 (Cryptographic Issues)<br>CVE Identifier: CVE-2013-5679<br>CVSS Severity † CVSS v2 Base Score: † † † † † † 5.6<br>† (version 2.0) † † Impact Subscore: † † † † † †7.8<br>† † † † † † † † † † Exploitability Subscore: † †3.9<br>
† † † † † † † † CVSS Temporal Score: † † † † † †4.4<br>† † † † † † † † CVSS Environmental Score: † † † 4.4<br>† † † † † † † † † † Modified Impact Subscore: † 7.8<br>† † † † † † † † † † Overall CVSS Score: † † † † 4.4<br>† † † † † † † † CVSS v2 Vector †(AV:L/AC:L/Au:N/C:P/I:C/A:N/E:POC/RL:OF/RC:C/CDP:N/TD:ND/CR:M/IR:M/AR:L)<br>
† † † † † † † † † † <<a href="http://nvd.nist.gov/cvss.cfm?name=&vector=%28AV:L/AC:L/Au:N/C:P/I:C/A:N/E:POC/RL:OF/RC:C/CDP:N/TD:ND/CR:M/IR:M/AR:L%29&version=2">http://nvd.nist.gov/cvss.cfm?name=&vector=%28AV:L/AC:L/Au:N/C:P/I:C/A:N/E:POC/RL:OF/RC:C/CDP:N/TD:ND/CR:M/IR:M/AR:L%29&version=2</a>><br>
† † † † † † † † † † NOTE: Because ESAPI is an API, the context of how it is<br>† † † † † † † † † † † † † used greatly affects the Exploitability metrics scoring<br>† † † † † † † † † † † † † component. You are encouraged to calculate a score that<br>
† † † † † † † † † † † † † reflects you use of ESAPI encryption. The above CVSSv2 vector<br>† † † † † † † † † † † † † reflects what appears to be the most common use of ESAPI<br>† † † † † † † † † † † † † encryption which is to encrypt Java properties via<br>
† † † † † † † † † † † † † EncryptedProperties.<br><br>Background<br>==========<br>OWASP ESAPI (The OWASP Enterprise Security API) is a free, open source, web<br>application security control library that makes it easier for programmers<br>
to write lower-risk applications. The ESAPI for Java library is designed<br>to make it easier for programmers to retrofit security into existing<br>applications. ESAPI for Java also serves as a solid foundation for new<br>
development.<br><br>One of the sets of security controls provided by ESAPI for Java is wrappers<br>around cryptographic primitives to provide authenticated encryption even<br>when the underlying cryptographic primitives in the JCE provider that<br>
you are using does not supply these directly.<br><br>Problem Description<br>===================<br>If you are using ESAPI symmetric crypto with CBC mode, PKCS#7 padding (called<br>PKCS5Padding in Java), and an HMAC for authenticity, then it may be possible<br>
for an adversary to bypass the authenticity check by setting the MAC length<br>to 0 and the MAC to null. The configuration could result in an exploitable<br>vulnerability depending on the context for encryption and what degree an<br>
attacker can tamper with the serialized ciphertext. CBC mode with PKCS#7<br>padding and HMAC is the default configuration for ESAPI Java.<br><br>Only some ESAPI systems installations are exploitable when using the<br>default configuration. To be exploitable, an attacker would require the<br>
ability to modify ciphertext either at rest or in transit. For example,<br>consider the use of ESAPI encryption for encrypting Java properties via<br>EncryptedProperties. Because properties files are generally not externally<br>
accessible, padding oracle attacks against encrypted property values would<br>have to come from an insider. Additionally, the insider would require read<br>access to the file containing the encrypted properties. †On the other<br>
hand, use of ESAPI Encryptor to encrypt HTTP query parameters or HTTP<br>cookies would be directly accessible to attackers (or at least authenticated<br>attackers) thus increasing the risk of a successful attack. Because of<br>
these variations based on the context of how ESAPI encryption might be<br>used, the accuracy of the CVSSv2 scores may not accurately reflect your<br>use of ESAPI; you are encouraged to calculate your own scores based on<br>
your specific applicationís usage using a CVSSv2 calculator.<br><br>Impact<br>======<br>Because a MAC bypass is possible, authenticity of the ciphertext cannot be<br>guaranteed with the default ESAPI configuration. Consequently, this exposure<br>
may allow a successful padding oracle attack against the default ESAPI<br>cryptosystem configuration and hence result in an exploitable vulnerability<br>that could result in a loss of confidentiality or a bypass of the<br>
authentication or authorization system.<br><br>Workaround<br>==========<br>Switch to an authenticated encryption cipher mode such as CCM or GCM,<br>which are supplied by the SunJCE provider in Oracle JDK 7. For JDK 6<br>and earlier, you will need to use an alternate JCE provider such<br>
as Bouncy Castle.<br><br>Solution<br>========<br>Upgrade your ESAPI for Java library to version 2.1.0 or higher.<br>1. Download the relevant patch from the location below from:<br>† † <<a href="http://code.google.com/p/owasp-esapi-java/downloads/detail?name=esapi-2.1.0-dist.zip&can=2&q=#makechanges">http://code.google.com/p/owasp-esapi-java/downloads/detail?name=esapi-2.1.0-dist.zip&can=2&q=#makechanges</a>><br>
2. Verify the SHA1 checksum is cfc2604798fbc11fdd0758ffcc931e324693a162.<br>† †(Checksum listed at the bottom of the page of the above URL.)<br>3. Install the patch.<br>† †a. Unzip the "esapi-2.1.0-dist.zip" file<br>
† †b. Drop the new ESAPI jar, esapi-2.1.0.jar, into your WEB-INF/lib<br>† † † directory or place it somewhere else in your CLASSPATH.<br><br>Correction Details<br>==================<br>The details of the correction are in the ESAPI 2.1.0 release notes<br>
(<a href="http://owasp-esapi-java.googlecode.com/svn/trunk/documentation/esapi4java-core-2.1-release-notes.txt">http://owasp-esapi-java.googlecode.com/svn/trunk/documentation/esapi4java-core-2.1-release-notes.txt</a>)<br>
and more details are in Google Issue #306<br>(<a href="http://code.google.com/p/owasp-esapi-java/issues/detail?can=1&q=306&colspec=ID%20Type%20Status%20Priority%20Milestone%20Component%20Owner%20Summary&id=306">http://code.google.com/p/owasp-esapi-java/issues/detail?can=1&q=306&colspec=ID%20Type%20Status%20Priority%20Milestone%20Component%20Owner%20Summary&id=306</a>)<br>
including a JUnit test based on the Philippe Arteauís original proof-of-concept<br>code and discussion of how to tell if the security of your system may have<br>been compromised as a result of this exposure.<br><br>Note that ESAPI release 2.1.0 only addresses Arteauís first scenario,<br>
the MAC bypass, in his original disclosure. Depending on your<br>configuration in ESAPI.properties, it make also be possible for<br>an attacker to manipulate the cipher transformation (e.g.,<br>changing the cipher mode from CBC to OFB or padding scheme) to<br>
adverse effect. Note that attempts to change the cipher mode<br>would not affect the default ESAPI configuration as the only<br>supported non-authenticated cipher mode in the default ESAPI<br>configuration is CBC. (See the ESAPI property<br>
"Encryptor.cipher_modes.additional_allowed" in ESAPI.properties<br>for further details.) The future ESAPI 2.1.1 release will address<br>these scenarios.<br><br>Additional Precautions<br>======================<br>
Once you have downloaded and installed the fixed version of the ESAPI jar,<br>check if your system had been compromised.<br><br>To check if your system had been compromised from results of this<br>exposure, locate your ESAPI logs and look for the following<br>
security event string (which will all be on a single line) in<br>your ESAPI log file:<br><br>† † Cannot validate MAC as it was never computed and stored.<br>† † Decryption result may be garbage even when decryption succeeds.<br>
<br>Note that this log event can originate from two different causes<br>so its presence is not 100% conclusive of a security breach. One<br>possible cause is from a client using the deprecated<br>Encryptor.decrypt(String) method (that was in ESAPI 2.0GA and<br>
2.0.1 and carried over from ESAPI 1.4, now removed in ESAPI 2.1.0)<br>and the method was used with the wrong encryption key. The other<br>way that this security event could appear in the ESAPI logs is if<br>the MAC length was set to 0 bytes and the MAC itself was set to<br>
null as demonstrated in the proof-of-concept code. It is advised<br>that you look back through your ESAPI logs at least back to<br>August 21, 2013 which is when Philippe Arteau first posted an<br>announcement of this vulnerability to the public.<br>
<br>If you conclude that your system has been compromised via this issue,<br>you should take the extra precaution of generating all new symmetric<br>encryption keys that you have been using, including the Encryptor.MasterKey<br>
in your ESAPI.properties file if you have been using that. (Of course, if<br>you plan to do so, if you have persisted any encrypted data using the old<br>keys, you will first want to decrypt that data so it could be re-encrypted<br>
with the replacement keys just as if you were doing a key change operation.)<br><br>The reason that you might want to consider taking this additonal precaution is<br>that this vulnerability could lead to a padding oracle attack against your<br>
system using the ESAPI 2.0 symmetric encryption--but only if you were using<br>CBC mode and a MAC, which are the default configuration. As Duong and Rizzo<br>showed us, it is possible to use a padding oracle attack to eventually divulge<br>
the secret encryption key.<br><br>References<br>==========<br><a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-5679">http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-5679</a><br><a href="http://blog.h3xstream.com/2013/08/esapi-when-authenticated-encryption.html">http://blog.h3xstream.com/2013/08/esapi-when-authenticated-encryption.html</a><br>
Google Issue #: 306 (<a href="http://code.google.com/p/owasp-esapi-java/issues/detail?id=306">http://code.google.com/p/owasp-esapi-java/issues/detail?id=306</a>)<br>Contact details: Kevin W. Wall <<a href="mailto:kevin.w.wall@gmail.com">kevin.w.wall@gmail.com</a>><br>
<span class="sewjmrcvj1swfqn"></span><span class="sewjmrcvj1swfqn"></span></span></div>