- BrainTools - https://www.braintools.ru -
«Самое сложное в Bug Bounty — не найти подозрительное место, а доказать, что оно действительно является уязвимостью.»
В начале 2026 года я решил проверить одну простую гипотезу: насколько сложно сегодня найти проблему безопасности в современном веб-приложении крупной компании, имея только браузер и DevTools.
Для этого в рамках одной из программ Bug Bounty я провёл ручной Black Box-анализ клиентской части веб-приложения одной из крупных российских IT-компаний.
Цель была простой — проверить свои силы в поиске дефектов не имея исходных данных, посмотреть, насколько хорошо защищена современная браузерная часть приложения и можно ли найти интересные проблемы, не имея доступа к исходному коду, внутренней документации или инфраструктуре.
Конечно была мысль найти реальную уязвимость и получить 3 секунды славы или небольшой гешефт, но я изначально понимал, что шансы малы.
Сразу скажу главный вывод: критических уязвимостей обнаружить не удалось.
Зато получилось разобраться, как сегодня устроена безопасность клиентской части одной из ведущих компаний и почему многие вещи, которые на первый взгляд кажутся уязвимостями, на практике ими не являются.
Когда слышишь словосочетание Bug Bounty, в голове обычно возникает простой алгоритм :
Открыли портал;
“Потыкали” все видимые поля с input и query параметры на предмет XSS;
Зашли в DevTools;
Нашли XSS;
Получили выплату||уважение, проснулись*
На практике всё выглядит совершенно иначе. Современные веб-приложения используют десятки защитных механизмов одновременно. Даже если удаётся найти потенциально опасную конструкцию, она далеко не всегда приводит к эксплуатации.
Поэтому большая часть исследования превратилась не в поиск багов, а в постоянную проверку собственных гипотез. Именно это и ожидало меня в ближайшие выходные, когда я приступил задаче.

Исследование проводилось полностью вручную. Использовались только стандартные возможности Chrome DevTools:
Network;
Sources;
Console;
Application;
анализ HTTP-заголовков;
исследование DOM;
анализ Cookies;
проверка Content Security Policy;
анализ взаимодействия через iframe и postMessage.
Никаких автоматизированных сканеров. Никакого фаззинга. Никаких попыток воздействовать на серверную инфраструктуру.
Одной из первых конструкций, которая привлекла внимание [1], оказался следующий вызов:
window.parent.postMessage(data, "*");
Для любого опытного QA или AppSec-инженера такая строка выглядит подозрительно. Использование "*" означает, что сообщение может быть отправлено любому родительскому окну.
Первая мысль была очевидной:
Похоже, нашел проблему.
Но после более детального анализа стало понятно, что всё значительно сложнее.
Само по себе использование "*" не является уязвимостью.
Всё зависит от контекста:
Передаются ли чувствительные данные?
Можно ли встроить приложение в сторонний iframe?
Проверяет ли принимающая сторона event.origin?
Если ответы на эти вопросы отрицательные, эксплуатация становится либо невозможной, либо крайне маловероятной.
В моем случае удалось установить, что принимающая сторона проверяет event.origin.
Тем не менее подобная реализация снижает запас прочности архитектуры. Если позже в приложении появится другая ошибка [2], например связанная с межоконным взаимодействием, использование "*" может значительно упростить её эксплуатацию.
Следующей интересной находкой стали значение директив найденных в политике Content Security Policy, использованной на портале.
В конфигурации присутствовали директивы:
unsafe-inline
unsafe-eval
Это не означает наличие XSS уже сейчас. Однако если подобная уязвимость когда-либо появится, браузер уже не сможет использовать CSP как полноценный дополнительный уровень защиты
Следующим этапом исследования стала проверка cookies.
Первое, что делает любой исследователь:
document.cookie
Несколько cookies действительно были доступны через JavaScript.
На первый взгляд это могло оказаться проблемой, но после анализа выяснилось, что все cookies, связанные с аутентификацией, были защищены корректно, через HttpOnly.
Оставшиеся доступные cookies использовались для аналитики и пользовательских настроек.
То есть сама по себе их доступность JavaScript не являлась ошибкой.
Однако подобные вещи стоит регулярно мониторить. Сегодня незащищенная cookie хранит безобидные настройки интерфейса. Через полгода кто-то решит использовать её для хранения идентификатора. Через год переопределить ее для хранения персональных данных кота Бориса (надеюсь, до этого никогда не дойдёт) и т.д. Именно так постепенно рождаются цепочки эксплуатации.
По итогам исследования был подготовлен технический отчёт и направлен владельцу портала в рамках процесса Responsible Disclosure, через портал standoff365 Bug Bounty, который был указан у компании как целевое средство коммуникации.
В отчёт вошли:
анализ клиентской архитектуры безопасности;
наблюдения по реализации postMessage;
рекомендации по усилению Content Security Policy;
анализ конфигурации cookies;
предложения по дополнительному hardening клиентской части.
Большая часть наблюдений не являлась самостоятельными уязвимостями, но могла стать важным фактором при появлении других ошибок в будущем, именно это я указал в отчете, поэтому он был размещен мной с категорией – “Информативный”.
Примерно через три календарных дня, я получил ответ от представителей компании — “О перечисленных проблемах мы уже знаем. В целом все описанные проблемы сами по себе имеют низкий security impact и обычно не претендуют на вознаграждение в рамках баг баунти программы” (С), это меня не расстроило, так как я изначально подчеркивал в отправленном им отчете, что на вознаграждение я не претендую, ввиду того , что чувствительных уязвимостей я не нашел.
Ни одна из обнаруженных особенностей сама по себе не позволяла скомпрометировать веб приложение. Но каждая из них уменьшала запас прочности архитектуры.
Я потратил 7 часов выходного дня на анализ портала, 2 часа на оформление и сдачу отчета и это стоило того, хотя бы в рамках того, что удалось понять архитектуру/особенности работы веб приложения, верхнеуровнево оценить запас его прочности и по коммуницировать с коллегами из крупной компании, хоть и в ограниченном формате.
Подобная гимнастика для мозга [3] полезна как самому исследователю, так и компаниям участвующим в программах Bug Bounty. Ведь первым это может принести кроме удовлетворения потребности [4] в исследовании денежное вознаграждения в случае аппрува со стороны компании, а вторым возможность выявления и устранения дефектов пропущенных на этапе ПСИ.
Публикация сделана после завершения процесса ответственного раскрытия и без раскрытия технических деталей, позволяющих воспроизвести исследование.
Автор: AntonCinet
Источник [5]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/32984
URLs in this post:
[1] внимание: http://www.braintools.ru/article/7595
[2] ошибка: http://www.braintools.ru/article/4192
[3] мозга: http://www.braintools.ru/parts-of-the-brain
[4] потребности: http://www.braintools.ru/article/9534
[5] Источник: https://habr.com/ru/articles/1058396/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1058396
Нажмите здесь для печати.