La API Docker de Crawl4AI: cuando un campo de configuración del navegador se convierte en RCE sin autenticación
Una falla de julio de 2026 permitía, mediante un campo de solicitud de un popular rastreador para LLM, colar opciones de arranque de Chromium y ejecutar comandos en el host — sin autenticación, con una sola petición HTTP, CVSS 10.0.
¿Qué es esto?
Crawl4AI es un rastreador y scraper web de código abierto muy utilizado, pensado para LLM: se le indican páginas, controla un navegador Chromium sin interfaz y devuelve texto limpio para la ingesta RAG y las herramientas de agentes. Una falla crítica de inyección de argumentos en su servidor de API Docker se publicó el 6 de julio de 2026 (aviso de GitHub GHSA-r253-r9jw-qg44) y se corrigió en la versión 0.9.0. El problema: la API aceptaba un campo de configuración del navegador suministrado por la solicitud y pasaba su contenido directamente a los argumentos de arranque de Chromium. Como la API Docker se distribuye sin autenticación por defecto, una sola petición HTTP a una instancia accesible bastaba para ejecutar comandos arbitrarios en el host, lo que le valió la severidad máxima, puntuada en 10.0. Se enmarca en la misma oleada de fallos de ejecución remota de código con puntuación 10.0 de principios de julio que también afectó a PraisonAI, Langroid y otros, donde los frameworks ejecutaban entradas suministradas por el modelo o la solicitud sin una frontera de confianza.
Cómo funciona
El rastreador expone endpoints como /crawl, /crawl/stream y /crawl/job. Cada uno acepta un objeto browser_config, y uno de sus miembros — extra_args — está pensado para que los operadores pasen opciones adicionales de Chromium. Antes de la corrección, todo lo que un llamante colocaba en esa lista alimentaba el comando de arranque real del navegador. Chromium tiene varias opciones que redefinen cómo genera sus propios procesos hijos; cuando se le indica que lance un auxiliar mediante un binario elegido por el atacante y que omita su arranque habitual de aislamiento (sandbox), ejecuta ese comando directamente, con la identidad del usuario del contenedor. Una corrección parcial en la v0.8.9 había añadido una lista de bloqueo, pero solo cubría opciones relacionadas con proxy y DNS y dejaba accesibles las opciones de lanzamiento de procesos. Aquí no se reproduce ningún payload; lo que importa es el mecanismo. La falla se clasifica como inyección de argumentos (CWE-88) que conduce a inyección de código (CWE-94), y como el alcance CVSS es “Cambiado” (Changed), el radio de impacto puede extenderse más allá del propio contenedor del rastreador.
Por qué importa
Por diseño, los rastreadores se sitúan en el borde no confiable de una canalización LLM: su función misma es tocar contenido que nadie controla. Eso hace que una API de rastreador sin autenticación y accesible por red sea un objetivo especialmente atractivo: suele ejecutarse con acceso de red saliente, credenciales de nube y una cola de URL por recuperar, exactamente la posición que busca un atacante para robo de datos, movimiento lateral o minería. La postura por defecto lo empeoraba. La distribución Docker exponía la API sin autenticación, de modo que los operadores que dejaban accesible el puerto por defecto (11235) en una red compartida o en Internet eran explotables sin ningún acceso previo. Es un patrón recurrente en la infraestructura de IA: valores por defecto cómodos que presuponen una red de confianza, envueltos alrededor de un componente que procesa entradas hostiles. Empresas de seguridad informaron de que estaban siguiendo intentos de explotación poco después de la divulgación.
Defensas
Actualice a Crawl4AI 0.9.0 o posterior. En esa versión, el campo browser_config.extra_args suministrado por la solicitud se rechaza en la frontera de red con un HTTP 400, la autenticación está activada por defecto y el servidor escucha en la interfaz de bucle local (127.0.0.1) salvo que se configure un token válido mediante CRAWL4AI_API_TOKEN. Si no puede parchear de inmediato, no exponga el puerto de la API a redes no confiables: restrínjalo con reglas de cortafuegos o ACL de red, y coloque cualquier acceso remoto detrás de un proxy inverso con terminación TLS que imponga autenticación. Más allá de este fallo concreto, las lecciones de arquitectura valen para cualquier herramienta que lance subprocesos por cuenta de los llamantes: nunca deje que datos controlados por la solicitud lleguen a la línea de comandos o a las opciones de arranque de un proceso; si hay opciones que deben ser configurables, permita explícitamente (allowlist) solo las opciones autorizadas en lugar de bloquear las conocidas como maliciosas; ejecute las cargas de rastreador y navegador con un usuario sin privilegios, en un sandbox segmentado de la red y sin credenciales de nube ambientales; y trate cada objeto de configuración de rastreador o de agente como entrada no confiable, validada en el servidor. La supervisión puede ayudar mientras tanto: inspeccione el tráfico de la API en busca de valores extra_args que porten opciones de lanzamiento de procesos de Chromium, y revise las líneas de comando chromium en ejecución para detectar argumentos de lanzador inesperados.
Estado
| Elemento | Detalle |
|---|---|
| Componente | Servidor de API Docker de Crawl4AI (rastreador web para LLM) |
| Naturaleza | Inyección de argumentos en browser_config.extra_args → ejecución de comandos |
| Afectados | Todas las versiones anteriores a 0.9.0 |
| Corregido en | 0.9.0 (rechazo del campo, autenticación por defecto, escucha en bucle local) |
| Severidad | CVSS 10.0 — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Divulgación | 6 de julio de 2026 (aviso GHSA-r253-r9jw-qg44) |
| Referencia | CVE-2026-57572; correcciones relacionadas de Crawl4AI de julio de 2026: CVE-2026-57571 (traversía de rutas → escritura de archivos), CVE-2026-53753 (evasión de sandbox en campo calculado) |
| Explotación | Intentos reportados poco después de la divulgación |