De raíz a barra raíz: Análisis de seguridad sobre Python en Excel y escalada de privilegios DEF CON 34
Durante la conferencia DEFCON 34, el investigador de seguridad Ron Ben-Izchak presentó un análisis detallado sobre la arquitectura de seguridad y las vulnerabilidades descubiertas en la función «Python en Excel» desarrollada por Microsoft[cite: 1]. Esta característica permite ejecutar código Python moderno en hojas de cálculo para procesar datos mediante librerías populares como numpy y pandas[cite: 1]. A diferencia de las macros tradicionales de Visual Basic, el código no se ejecuta localmente en la máquina del cliente, sino en contenedores aislados de Azure alojados en la nube de Microsoft[cite: 1].
Reconocimiento del entorno de ejecución
Al explorar el entorno de ejecución dentro del contenedor, se identificó que el código se procesa bajo la identidad de un usuario con privilegios restringidos denominado jovian, asociado al proyecto Jupyter Notebook[cite: 1]. Sin embargo, la inspección de procesos y variables de entorno reveló la presencia de servicios críticos ejecutándose en segundo plano con privilegios de superusuario (root)[cite: 1]:
- Proxy Server: Escucha en el puerto 8000 local para gestionar las peticiones web[cite: 1].
- Code Execution Service: Servicio basado en .NET encargado de recibir las solicitudes de ejecución[cite: 1].
- Outbound Broker: Servicio accesible únicamente dentro de la red del contenedor para la comunicación externa[cite: 1].
Además, se detectó la presencia de módulos de Python específicos desarrollados por Microsoft, tales como excel y officepy_ai[cite: 1].
Escalada de privilegios mediante Enlaces Simbólicos
El mecanismo de carga de archivos de imágenes pesadas en las celdas de Excel utiliza el directorio /mnt/data_upload/[cite: 1]. Al iniciar una carga, el servicio de ejecución crea tres archivos por cada solicitud: un archivo de estado (.stat), un identificador de entidad (.etag) y el archivo de datos (.data)[cite: 1].
Debido a que el Code Execution Service procesa la escritura de estos archivos con permisos de root, se determinó que el servicio seguía los enlaces simbólicos (symlinks) creados previamente por el usuario restringido jovian[cite: 1]. Al apuntar el archivo .etag hacia binarios del sistema con el permiso Set User ID (SUID) —específicamente /usr/bin/chage— fue posible sobrescribir archivos ejecutables del sistema con binarios personalizados[cite: 1]. Esto permitió la ejecución arbitraria de código con privilegios absolutos de root dentro del contenedor[cite: 1].
Hallazgos en la configuración del entorno
Una vez alcanzados los privilegios de superusuario, se inspeccionó la estructura interna del sistema[cite: 1]. En el directorio de binarios se halló el archivo de configuración deploymentdata.json, el cual contenía detalles sensibles de la infraestructura de Microsoft[cite: 1]:
- Identificadores de Service Principals y IDs de Inquilinos (Tenants)[cite: 1].
- Direcciones de bases de datos CosmosDB y registros de Azure Container Registry[cite: 1].
- Rutas a almacenes de claves (Key Vaults) y referencias a entornos de prueba del gobierno[cite: 1].
- Una lista de más de 250 nombres de host de contenedores distribuidos globalmente[cite: 1].
Bypass de mecanismos de seguridad en el cliente Excel
Por otro lado, se analizó el comportamiento del cliente de escritorio de Excel[cite: 1]. A diferencia de las macros tradicionales que activan alertas de seguridad como Mark of the Web (MOTW) o bloqueos de registros confiables, las funciones de Python permiten devolver objetos de tipo webimage[cite: 1].
Esto permitía forzar a la aplicación cliente a realizar peticiones HTTP hacia servidores externos arbitrarios al abrir el libro de trabajo, omitiendo los avisos de advertencia habituales[cite: 1]. Adicionalmente, combinar este mecanismo con celdas que leían y reenviaban la información al contenedor permitía romper el aislamiento de red teórico del entorno[cite: 1].
Divulgación responsable y parches
Los hallazgos fueron reportados a Microsoft el 5 de febrero de 2026[cite: 1]. La compañía implementó las siguientes soluciones[cite: 1]:
- Corrección de la vulnerabilidad de escalada de privilegios validando enlaces simbólicos antes de realizar operaciones de escritura de archivos[cite: 1].
- Publicación del CVE correspondiente el 9 de junio de 2026, modificando el comportamiento de Excel para impedir las conexiones de red automáticas al procesar objetos de imagen provenientes de Python[cite: 1].