Cómo lograron obtener acceso root en Copilot
(research.eye.security)- En abril de 2025, Copilot Enterprise se actualizó con un sandbox de Python en tiempo real (basado en Jupyter Notebook), lo que permitió la ejecución de código en el backend
- Mediante la sintaxis %command de Jupyter, era fácil ejecutar código arbitrario sobre el sistema base, y también se podían ejecutar comandos de Linux como el usuario ubuntu (entorno miniconda)
- Existía una vulnerabilidad de seguridad: la ruta /app/miniconda/bin era escribible por el usuario ubuntu y además tenía prioridad en el $PATH de root, por lo que se podían sobrescribir comandos clave como
pgrep - Aprovechando esto, lograron obtener privilegios de root, pero el interior del contenedor estaba fuertemente aislado, por lo que no era posible escapar del contenedor ni hubo filtración adicional de información
- La vulnerabilidad fue reportada en abril y parcheada en julio con riesgo moderado; no hubo recompensa y solo se incluyó a los investigadores en la lista de reconocimiento
Análisis de la vulnerabilidad en el sandbox Jupyter de Microsoft Copilot Enterprise
Resumen del entorno Jupyter de Copilot Enterprise
- Desde abril de 2025, se introdujo en Copilot Enterprise un sandbox de Python basado en Jupyter Notebook
- Los usuarios podían ejecutar comandos del sistema Linux mediante la sintaxis %command de Jupyter
- El entorno corría con permisos del usuario ubuntu sobre miniconda y no contaba con binario
sudo - Era posible explorar variables de entorno, red, sistema de archivos e información de procesos, entre otros
Funcionamiento y estructura interna del contenedor
- Copilot es similar al sandbox de ChatGPT, pero usa un kernel más reciente y Python 3.12
- Procesos principales: Jupyter Notebook,
goclientappescrito en Go (ejecutándose en el puerto 6000),httpproxy, etc. - La red solo tenía habilitados loopback y una interfaz link-local limitada
- El sistema de archivos usa OverlayFS con base en la ruta
/legion, y existen scripts personalizados en/app
Descarga y manipulación de archivos
- Los archivos de texto o salidas de comandos se podían descargar normalmente, pero los archivos binarios corrían riesgo de corrupción, por lo que era necesario codificarlos en base64
- Los archivos se ubicaban en
/mnt/datay se generaban enlaces de descarga externos en formato blob URL
Estructura de goclientapp/httpproxy
goclientapp: ejecuta en el entorno Jupyter el código recibido desde el exterior por el endpoint/execute(formato JSON) y devuelve el resultadohttpproxy: actúa como proxy del tráfico HTTP saliente desde Jupyter (deshabilitado conENABLE_EGRESS=false)
Vulnerabilidad en el script entrypoint.sh
- En
entrypoint.sh, el script de entrada del contenedor, varios servicios (goclientapp,httpproxyapp) se ejecutaban con permisos del usuario ubuntu - Solo
keepAliveJupyterSvc.shseguía ejecutándose continuamente como root - En la línea 28, el comando
pgrep -f "jupyter notebook --ip=0.0.0.0 --port=8888"se ejecutaba según la prioridad de directorios dentro de$PATH /app/miniconda/binaparecía antes que/usr/binen el PATH tanto de root como del usuario ubuntu, lo que permitía reemplazar arbitrariamente comandos comopgrep
Proceso para obtener privilegios de root y sus límites
- El atacante creó un script malicioso llamado
pgrepen/app/miniconda/bin, haciendo queentrypoint.shlo ejecutara periódicamente con privilegios de root - Ese script leía el archivo
/mnt/data/in, ejecutaba su contenido como comandos de shell y guardaba los resultados en/mnt/data/out - Con este método sí lograron obtener privilegios de root dentro del contenedor, pero no pudieron acceder a información sensible como archivos de
/root, registros u otros datos, ni escapar del contenedor - El contenedor ya tenía parcheados los distintos escenarios de breakout
Respuesta de Microsoft y resultado
- 18 de abril de 2025: Eye Security reportó la vulnerabilidad al MSRC
- 25 de julio de 2025: Microsoft la clasificó como de riesgo moderado (moderate severity), la parcheó y cerró el caso, incluyendo a los investigadores en la lista de reconocimiento (sin pago de bug bounty)
Referencias y apéndice
-
Eye Security es una empresa europea de ciberseguridad que ofrece monitoreo de amenazas 24/7, respuesta a incidentes, ciberseguro, entre otros servicios
-
Los casos de intrusión en servicios internos de Microsoft (como Entra OAuth), incluida esta vulnerabilidad, están previstos para presentarse en BlackHat USA 2025
-
Línea de tiempo
- 18 de abril de 2025 – Reporte al MSRC
- 25 de julio de 2025 – Parche, cierre del caso y publicación del blog
1 comentarios
Opiniones de Hacker News