sistema: OPERATIVO
← volver a todos los hacks
AGENTS CRITICAL

PraisonAI CVE-2026-44338: un servidor de agentes sin autenticación, explotado en 3h44

Divulgada el 11 de mayo de 2026, CVE-2026-44338 entrega PraisonAI con la autenticación desactivada en duro en su antiguo servidor API. Un escáner CVE-Detector sondeó el endpoint menos de cuatro horas después.

2026-05-25 // 6 min affects: praisonai-2.5.6-to-4.6.33, flask-api-server, multi-agent-orchestration

¿De qué se trata?

El 11 de mayo de 2026 a las 13:56 UTC, GitHub publicó el advisory GHSA-6rmh-7xcm-cpxj, asignado como CVE-2026-44338 (CVSS 7.3, alta), para PraisonAI — un popular framework open-source de orquestación multi-agente con aproximadamente 7.100 estrellas en GitHub. El servidor API legado en Flask que se distribuye en src/praisonai/api_server.py desactiva la autenticación por defecto de manera codificada. Cualquier llamante capaz de alcanzar el proceso puede listar los agentes y disparar el flujo de trabajo configurado sin presentar ningún token.

El equipo Threat Research de Sysdig observó la primera sonda dirigida — un escáner que se identificaba como CVE-Detector/1.0 — impactando uno de sus sensores a las 17:40 UTC del mismo día, tres horas y cuarenta y cuatro minutos después de la publicación del advisory. Las versiones 2.5.6 a 4.6.33 son vulnerables; la corrección se publicó en 4.6.34 en PyPI. La falla fue reportada por el usuario de GitHub shmulc8.

Cómo funciona

El advisory describe tres defectos que cooperan, todos visibles en el árbol de código público:

# src/praisonai/api_server.py — extracto ilustrativo de la lógica afectada
AUTH_ENABLED = False        # constante codificada en duro
AUTH_TOKEN   = None         # nunca se lee del entorno, nunca se puede sobrescribir en tiempo de ejecución

def check_auth():
    if not AUTH_ENABLED:
        return True         # ambas rutas "protegidas" caen en fail-open
    # ...

Los dos endpoints que se suponía estaban detrás de ese control son, en la práctica, no vigilados:

  • GET /agents devuelve el nombre del archivo agents.yaml y la lista de agentes configurados.
  • POST /chat acepta cualquier cuerpo JSON que contenga una clave message, ignora su valor, y ejecuta PraisonAI(agent_file="agents.yaml").run() — es decir, el grafo completo de agentes del operador.

Cuando el script se lanza directamente, también se enlaza a 0.0.0.0:8080. El módulo APIConfig en src/praisonai/praisonai/deploy/models.py conserva auth_enabled = False como valor por defecto, y el YAML de despliegue de muestra recomienda host: 0.0.0.0 junto con auth_enabled: false — propagando silenciosamente el valor por defecto inseguro hasta los despliegues controlados por los operadores. La ruta más reciente, serve agents, no se ve afectada: se enlaza a 127.0.0.1 y acepta --api-key.

El honeypot de Sysdig capturó el patrón de reconocimiento posterior a la divulgación. Un único host en DigitalOcean (146.190.133.49) ejecutó dos pasadas de escáner separadas por ocho minutos, lanzando ~70 peticiones cada una. La segunda pasada se centró en huellas de agentes IA (/praisonai/version.txt, /pyproject.toml, /docs, /openapi.json) y luego envió la sonda de validación: GET /agents sin cabecera Authorization y con User-Agent: CVE-Detector/1.0. El host respondió 200 OK con la lista de agentes, confirmando el bypass.

Por qué importa

El bypass en sí mismo no es ejecución de código arbitrario. El manejador /chat ignora el mensaje enviado, por lo que el atacante no puede inyectar un prompt libre. Lo que obtiene es la invocación no autenticada de aquello que el agents.yaml del operador esté cableado para hacer — y en despliegues de producción eso suele incluir un code_interpreter, una herramienta de shell o de archivos, un fetch web o un cliente HTTP. El techo de impacto realista va, por lo tanto, desde el drenaje de cuota de modelo en la parte barata, hasta la ejecución de herramientas de agente y la divulgación de configuración en la parte cara.

Dos observaciones más amplias hacen que esta CVE merezca ser estudiada:

  • El patrón se repite en toda la pila de agentes de IA. Sysdig la conecta con casos recientes de explotación rápida en Marimo, LMDeploy (CVE-2026-33626) y Langflow (CVE-2026-33017) — todos proyectos pequeños o medianos cuyo defecto expuesto a Internet abre un runtime potente a llamantes anónimos.
  • Tres horas y media es la nueva base. Un repositorio con ~7.100 estrellas ya no está “bajo el radar”. El tooling adversario revierte ahora los parches, genera escáneres y barre el espacio IPv4 público al ritmo de los advisory.

Defensas

  1. Actualice de inmediato. Pase a PraisonAI 4.6.34 o posterior. Cualquier versión en el rango 2.5.64.6.33 es vulnerable tal como se distribuye.
  2. Deje de usar el entrypoint legado. Cambie al comando serve agents, que se enlaza a 127.0.0.1 y requiere --api-key. Considere api_server.py como obsoleto.
  3. Audite las plantillas de despliegue. Si su infra-as-code se generó a partir del ejemplo de PraisonAI, busque auth_enabled: false y host: 0.0.0.0. Ambos deben invertirse.
  4. Default-deny en los disparadores de agentes. Cualquier ruta HTTP que termine en PraisonAI(...).run() — o su equivalente en LangChain, CrewAI o AutoGen — es una acción que modifica el estado del mundo y debe exigir autenticación, no optar a ella.
  5. Detecte en el perímetro. Las llamadas no autenticadas exitosas no dejan ninguna señal de “missing auth” en los logs de aplicación. Añada reglas WAF para GET /agents y POST /chat sin cabecera Authorization, y marque la cadena User-Agent: CVE-Detector/1.0 allí donde aparezca.
  6. Audite la facturación del proveedor de modelos y los secretos referenciados en agents.yaml para cualquier actividad posterior al 11 de mayo de 2026, y rote toda credencial citada por el flujo.

Estado

ElementoReferenciaFechaNotas
Advisory de GitHubGHSA-6rmh-7xcm-cpxj2026-05-11 13:56 UTCCVSS 7.3, CWE-306 / CWE-668 / CWE-1188
Identificador CVECVE-2026-443382026-05-11Publicado en NVD
Primera sonda dirigidaSensor de Sysdig TRT2026-05-11 17:40 UTCCVE-Detector/1.0, ~3h44 tras la divulgación
Versión parcheadaPraisonAI 4.6.342026-05-11PyPI
Rango vulnerable2.5.6 — 4.6.33Todas las versiones anteriores también son vulnerables para el script legado

La lección de fondo es estructural. El servidor legado de PraisonAI es un bug pequeño — tres líneas, un valor por defecto, una dirección de enlace — pero se sitúa en la misma juntura a la que tarde o temprano llega todo framework multi-agente: un disparador HTTP que, tras el telón, ejecuta un agente arbitrario que usa herramientas. Cualquier framework que distribuya ese disparador con autenticación en opt-in en lugar de opt-out debe considerarse explotable desde la primera exposición a Internet.

Sources