sistema: OPERATIVO
← volver a todos los hacks
DATA LEAK CRITICAL NEW

La API Docker de Crawl4AI: campos de petición que exfiltran tus claves LLM

Una falla de julio de 2026 en un popular crawler para LLM permitía que una petición no autenticada eligiera el destino de las llamadas LLM y la variable de entorno que resuelve un token: fuga de claves API de proveedores y del secreto de firma del servidor.

2026-07-17 // 6 min affects: crawl4ai, llm-data-pipelines, rag-ingestion, headless-browser-crawlers

¿Qué es esto?

Crawl4AI es un crawler de código abierto muy usado que convierte páginas web en texto listo para LLM, desplegado a menudo como «servidor API» de Docker por delante de los pipelines de RAG y de agentes. Una vulnerabilidad divulgada en julio de 2026 (aviso publicado el 12 de julio, actualizado el 14 de julio) mostró que este servidor permitía que una petición corriente controlara dos cosas que nunca debió gobernar: el destino de una llamada a la API del LLM y la variable de entorno del servidor desde la que se resuelve un token. Ambas son palancas para extraer secretos directamente del host.

La divulgación importa porque el servidor API de Docker se ejecuta sin autenticación por defecto, y los endpoints implicados (/md, /llm y el asíncrono /llm/job) son precisamente las rutas que resumen una página o ejecutan un LLM sobre el contenido rastreado. Un cliente remoto sin credenciales podía, por tanto, alcanzar esas palancas directamente. La falla se califica de severidad alta (CVSS 8.2) y pertenece a un conjunto más amplio de problemas de falsificación de peticiones aparecidos en la misma superficie entre junio y julio de 2026. Este es un análisis defensivo de avisos publicados: no se ofrece ningún exploit funcional.

Cómo funciona

El defecto central es una frontera de confianza que nunca se trazó. El servidor aceptaba dos campos influidos por el atacante y los usaba sin validación:

  • Un campo base_url que decide el destino de la llamada LLM saliente. Apúntalo a un endpoint controlado por el atacante y el servidor envía obedientemente la petición —incluido el token API que adjunta— a esa dirección.
  • Un campo api_token que acepta una forma env:NOMBRE_DE_VARIABLE, indicando al servidor que resuelva el token desde una de sus propias variables de entorno. Como el nombre de la variable lo aporta quien llama, una petición podía nombrar cualquier variable del entorno del proceso, no solo la clave LLM prevista.

Combina ambos y el resultado es una exfiltración directa: nombra un secreto con env:, dirige base_url a un servicio de escucha que controlas, y el servidor te entrega el valor resuelto. Los avisos señalan que esto va más allá de las claves API de proveedores y alcanza secretos del servidor como la SECRET_KEY JWT usada para la autenticación, que, una vez filtrada, permite forjar tokens válidos y eludir por completo la autenticación.

# Forma conceptual únicamente — no es una petición funcional
request --> base_url = <endpoint del atacante>        # redirige la llamada LLM saliente
request --> api_token = env:<variable del servidor>   # resuelve un secreto arbitrario del host
server  --> envía el secreto resuelto al endpoint del atacante

El mismo servidor también arrastraba una falsificación de petición del lado del servidor (SSRF) clásica en sus rutas de rastreo. Un problema relacionado permitía que quienes llamaban sin autenticación alcanzaran direcciones internas, privadas y de enlace local —incluidos los endpoints de metadatos de instancia en la nube— proporcionando una URL así como objetivo de rastreo; la ruta de rastreo en streaming, en particular, se saltaba la comprobación de destino aplicada en otras partes. Una variante distinta eludía la lista de bloqueo de direcciones internas usando direcciones IPv4 mapeadas en IPv6. Bugs diferentes, una misma causa raíz: datos controlados por la petición que llegan a una operación sensible sin validación del lado del servidor.

Por qué importa

El herramental para LLM concentra justo los secretos que los atacantes desean. Una máquina «crawler-para-LLM» suele guardar claves API de proveedores (OpenAI, Anthropic y otros), credenciales de nube y su propio secreto de firma; con frecuencia se despliega deprisa, es accesible desde Internet y carece de autenticación porque «solo obtiene páginas web». Esa combinación —sin auth por defecto, secretos de alto valor en el entorno y campos de petición que direccionan tanto el destino de red como las variables del host— es lo que convierte un endpoint de resumen en una primitiva de exfiltración de credenciales. Claves de proveedor filtradas significan inferencia fraudulenta facturada a la víctima; un secreto de firma filtrado significa elusión de la autenticación; una SSRF a los metadatos significa robo de credenciales en la nube y movimiento lateral. Como la explotación no requiere privilegios ni interacción del usuario, son objetivos ideales para el escaneo automatizado y oportunista.

Defensas

  • Parchea y mantente al día. El problema de exfiltración de credenciales se corrige en Crawl4AI 0.8.8; la brecha de falsificación de petición en la ruta de streaming se cierra en 0.9.0, que además activa la autenticación de la API por defecto. Sigue los avisos de seguridad del proveedor, pues estos problemas llegaron en serie, no como un parche único.
  • Nunca expongas el servidor API de Docker sin autenticación. Vincúlalo al bucle local, colócalo detrás de un proxy inverso que imponga autenticación y define un token de API. Da por falso el «solo rastrea».
  • Segmenta la red y controla el tráfico saliente. Bloquea las conexiones salientes hacia los rangos RFC-1918, de enlace local (169.254.0.0/16) y de bucle local, para que una llamada LLM redirigida o una SSRF no puedan alcanzar servicios de metadatos ni hosts internos.
  • Rechaza la indirección controlada por la petición. La configuración de la aplicación no debe permitir que quien llama elija una URL base saliente ni nombre una variable de entorno para leerla. Resuelve los secretos del lado del servidor desde una configuración fija, y pon en lista blanca cualquier endpoint que el servicio tenga permitido llamar.
  • Minimiza los secretos ambientales. Ejecuta las cargas de rastreo con un usuario sin privilegios y sin credenciales de instancia en la nube al alcance, y limita el alcance de las claves API para que una fuga tenga un radio de impacto pequeño.
  • Rota ante la sospecha. Si un servidor vulnerable estuvo alguna vez accesible desde Internet, rota las claves de proveedor y el secreto de firma JWT que tuviera: aquí una brecha de confidencialidad es silenciosa.

Estado

ElementoDetalle
AfectadoServidor API de Docker de Crawl4AI, versiones previas a los parches
ClaseExfiltración de credenciales vía base_url controlado + resolución de token env:; más SSRF relacionada en rutas de rastreo
DebilidadCWE-200 / CWE-522 (exposición de secretos), CWE-918 (SSRF)
Falla de exfiltración de credencialesCVE-2026-56259 — CVSS 8.2 (alta); corregida en 0.8.8
SSRF (ruta streaming)CVE-2026-57573 — CVSS 8.6 (alta); corregida en 0.9.0
SSRF (elusión de lista de bloqueo)CVE-2026-56266 — CVSS 9.2 (alta); corregida en 0.8.7
Postura por defectoServidor API de Docker sin autenticación por defecto antes de 0.9.0

Fechas clave: aviso de exfiltración de credenciales publicado el 12 de julio de 2026 (actualizado el 14 de julio de 2026); falsificación de petición en la ruta de streaming señalada el 6 de julio de 2026; aviso de elusión de lista de bloqueo fechado el 22 de junio de 2026. Todas las medidas anteriores son arquitectónicas: actualiza, autentica, segmenta y elimina la indirección controlada por la petición.

Sources