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@cynops.de 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 "
";
    print_r(openssl_x509_parse(openssl_x509_read($_POST['csr'])));
    echo "
"; 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>