Crítica

Mercury: Ejecución remota de código no autenticada mediante /api/kernels

  • Publicada: 19.10.2026
  • Actualizado: 20.10.2026 09:53

Mercury ejecuta un servidor JupyterLab con acceso anónimo de forma predeterminada (mercury_app/__main__.py establece --IdentityProvider.token='' cuando no se proporciona --token/MERCURY_TOKEN; cuando no usa token también define --ServerApp.disable_check_xsrf=True). Se basa en una lista de bloqueo (mercury_app/block_handler.py BLOCKED_PATTERNS: /lab, /api/terminals, /api/shutdown, /files) para mantener a los usuarios anónimos alejados de endpoints peligrosos de Jupyter.

La vulnerabilidad

/api/kernels NO está en la lista de bloqueo (y no puede estarlo, ya que Mercury necesita kernels para ejecutar notebooks), y patch_kernel_websocket_handler() (mercury_app/idle_timeout.py) solo rastrea el tiempo de inactividad: envuelve on_message para invocar self.application._timeout_manager.touch() y luego llama al manejador original sin filtrar execute_request. Por lo tanto, cualquier cliente de red no autenticado puede:

POST /api/kernels {"name":"python3"}        -> 201, returns kernel id
open websocket /api/kernels/<id>/channels
send an execute_request with arbitrary code -> arbitrary Python execution = RCE

Diferencia respecto a GHSA-f8c7-rwf9-fmgm (corrección incompleta)

GHSA-f8c7 fue "Unauthenticated RCE via /api/terminals" — una omisión de la lista de bloqueo debida a una coma faltante. Su solución (agregar la coma para que /api/terminals sea bloqueado) NO mitiga /api/kernels, que sigue siendo explotable. El enfoque de lista de bloqueo es fundamentalmente incapaz de cubrir los kernels, por lo que no es una variante que pueda resolverse con otra entrada en la lista.

Comprobado en tiempo de ejecución (en la versión parcheada)

En mercury 3.2.4 —el lanzamiento que corrigió GHSA-f8c7— con la configuración predeterminada (sin token), como cliente no autenticado: POST /api/terminals devuelve 403 (la corrección f8c7 está presente), pero POST /api/kernels devuelve 201; abrir el websocket del kernel y enviar un execute_request ejecutó Python suministrado por el atacante (ejecutó whoami como el usuario del proceso del servidor y escribió el archivo marcador /tmp/PWNED_MERCURY_RCE). Ejecución remota de código completa y sin autenticación. Se incluye PoC determinista (script de cliente + notebook).

Impacto

Ejecución arbitraria de código alcanzable por red y sin autenticación como el usuario del proceso del servidor Mercury en todas las implementaciones predeterminadas: compromiso total del host/contenedor y de los datos o secretos a los que pueda acceder.

Deduplicación (método 3)

OSV.dev CLEAN(0) para mercury y mljar-mercury; el único aviso del repositorio (GHSA-f8c7-rwf9-fmgm) cubre únicamente /api/terminals (la descripción no menciona kernels); ningún issue/PR describe la RCE en /api/kernels (#219/#134/#262 son solicitudes para añadir autenticación que solo confirman el comportamiento anónimo por defecto). El punto vulnerable fue confirmado de forma independiente en HEAD (la lista de bloqueo omite /api/kernels; token='' por defecto; patch_kernel_websocket_handler no realiza filtrado de ejecución).

Descubierto por: Abdullah Kareem (GitHub: CyberKareem).

Qué hacer

La lista de bloqueo no puede proteger un servidor respaldado por kernels anónimos. Requiera autenticación real por solicitud (un token o contraseña) de forma predeterminada, o restrinja el canal de mensajes del kernel para que los clientes anónimos de websocket no puedan emitir execute_request fuera del flujo de ejecución controlado por Mercury.

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Python (PyPI) mercury < 3.2.6 3.2.6

Referencias

Puntuación CVSS 9.8/10
Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Debilidad (CWE)
CWE-862
Plataforma
Python (PyPI)
Paquete
mercury
Publicada
19.10.2026
Actualizado
20.10.2026 09:53

Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.

OSV / GitHub Advisory Database - GHSA-rv4m-xm3f-3ccq - CC BY 4.0

Historial de vulnerabilidades: mercury

Todas las vulnerabilidades publicadas de este paquete (Python (PyPI)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Entradas en total
2
Primera → última
10.2026 10.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Crítica 2

Divulgaciones por año

  1. 2026: 2
  1. Mercury: Ejecución remota de código no autenticada mediante /api/kernels esta entrada
    Crítica · 9.8 CVE-2026-111058 < 3.2.6 3.2.6

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.