Hi, normally I wouldn't bother much posting a simple XSS here, but I'll make an exception for CAcert today. Kriss Andsten's blog post (http://www.shortpacket.org/2008/08/cacertorg-you-got-what-you-paid-for.html) made me want to take a look at the CAcert source myself, and so I did on Friday. It certainly isn't up to secure coding practices, they quote all HTML output and all MySQL queries manually, and so they are bound to occasionally miss something - like they did in analyse.php. Being an open source (PKI) developer, I'd be happy to see a free (not only as in beer, but also as in speech) CA that is widely accepted - having glanced shortly at the code (same as Kriss, I wouldn't be surprised if there is more to be found if you know more about PHP security than me), I wonder if CAcert is that CA ... Enough rambling, here you go: ============================================ ||| Security Advisory AKLINK-SA-2008-007 ||| ============================================ CAcert - Cross Site Scripting ============================= Date released: 29.09.2008 Date reported: 26.09.2008 $Revision: 1.1 $ by Alexander Klink Cynops GmbH a.klink@xxxxxxxxx https://www.cynops.de/advisories/AKLINK-SA-2008-007.txt (S/MIME signed: https://www.cynops.de/advisories/AKLINK-SA-2008-007-signed.txt) https://www.klink.name/security/aklink-sa-2008-007-cacert-xss.txt Vendor: CAcert Product: CAcert - certificate authority providing free certificates Website: http[s]://www.cacert.org Vulnerability: non-persistent cross site scripting Class: remote Status: patched Severity: moderate (authentication information may be stolen) Releases known to be affected: cacert-20080921.tar.bz2 Releases known NOT to be affected: cacert-20080928.tar.bz2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Background: CAcert is a certifificate authority that provides free certificates to end users based on a web-of-trust assurance model. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Overview: CAcert provides a page that allows a user to show information on a given X.509 certificate. This page was vulnerable to a cross site scripting attack, which might have led to session information of a logged-in user being compromised. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Technical details: http[s]://www.cacert.org/analyse.php contains the following code: echo "<pre>"; print_r(openssl_x509_parse(openssl_x509_read($_POST['csr']))); echo "</pre>"; which is used to dump the certificate details as parsed by the openssl_x509_parse() PHP function. No escaping whatsoever of this information is done, so an attacker can create a certificate with HTML tags, which are then shown on the page. A PoC certificate can easily be creating using OpenSSL: $ openssl req -new -x509 \ -subj "/CN=<\/pre><script>alert(document.cookies)<\/script><pre>" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Communication: * 26.09.2008: Contacted Philipp Guehring about the issue * 27.09.2008: Philipp informs me that the issue has been fixed +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Solution: Has been fixed by escaping the output using htmlspecialchars(). +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Credits: - Alexander Klink, Cynops GmbH (discovery) Cheers, Alex -- Dipl.-Math. Alexander Klink | IT-Security Engineer | a.klink@xxxxxxxxx mobile: +49 (0)178 2121703 | Cynops GmbH | http://www.cynops.de ----------------------------+----------------------+--------------------- HRB 7833, Amtsgericht | USt-Id: DE 213094986 | Geschäftsführer: Bad Homburg v. d. Höhe | | Martin Bartosch
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Full-Disclosure - We believe in it. Charter: http://lists.grok.org.uk/full-disclosure-charter.html Hosted and sponsored by Secunia - http://secunia.com/