Falla crítica en Pillow permite ejecutar código a través de una imagen manipulada

Pillow, la biblioteca de procesamiento de imágenes más extendida en el ecosistema Python, presenta una vulnerabilidad que permite a un atacante ejecutar comandos del sistema operativo en el servidor simplemente controlando el nombre de un archivo que la librería abre. El fallo, identificado como CVE-2026-112900, reside en el tratamiento de imágenes EPS: Pillow pasa el nombre del archivo a Ghostscript, el programa externo que utiliza para convertir la imagen en píxeles, sin validar previamente ese nombre.

Ghostscript puede interpretar un nombre manipulado por un atacante como instrucciones en lugar de como una ruta de archivo, redirigiéndolo a un segundo fichero que contiene las órdenes a ejecutar. Los mantenedores de Pillow corrigieron el problema en la versión 13.0.0, publicada el 16 de octubre. Según OX Security, la empresa cuyo informe puso el foco sobre estas fallas, la biblioteca se descarga aproximadamente 436 millones de veces al mes y está presente en formularios de subida de archivos web, herramientas de avatares y miniaturas, flujos de documentos y PDF, y en la mayoría de los proyectos de aprendizaje automático.

El nombre del archivo, no la imagen

El vector de ataque es el nombre del fichero y no el contenido de la imagen. Tal como señala el aviso de seguridad, el fallo se activa por el nombre y no por nada presente en el documento PostScript, de modo que un archivo EPS aparentemente inofensivo puede causar daños si el atacante controla su denominación. Por ello, los puntos de carga que conservan o generan el nombre de un archivo almacenado a partir de la entrada del usuario son los objetivos realistas. La vulnerabilidad solo alcanza a Ghostscript en aquellos servidores que tienen instalado el programa gs, necesario para que Pillow abra archivos EPS, y afecta a las versiones desde la 2.6.0 hasta la 12.3.0.

Los mantenedores la clasifican como moderada, ya que el atacante debe controlar el nombre del archivo, mientras que el registro CVE asignado por GitHub le otorga 9,2 sobre 10 y la marca con esa misma condición.

Otras fallas graves en la versión 13.0.0

La versión 13.0.0 es una actualización de seguridad de gran alcance, con correcciones en cuatro niveles de gravedad, dos de ellos calificados como críticos por los responsables del proyecto. Ninguna de las fallas tiene constancia de estar siendo explotada. Una de las correcciones críticas corresponde a un error de memoria separado, descrito en las notas de la versión como datos de imagen obsoletos reutilizados tras un cambio de modo. La otra abarca dos desbordamientos en la decodificación JPEG de Pillow.

Uno de esos fallos JPEG, en el formato FlashPix (FPX), permite ejecutar un comando del atacante con una sola llamada a Image.open() sobre un archivo manipulado, siempre que esté instalado el paquete opcional olefile. Pillow reconoce estos archivos por su contenido y no por su extensión, por lo que un servidor que abre cargas no confiables puede verse afectado sin intervención del usuario. El otro, CVE-2026-112403, desborda un búfer de memoria cuando un programa genera una miniatura de un JPEG sin pérdidas manipulado; su aviso reporta un bloqueo y no ejecución de código. Según el propio aviso, el error fue descubierto por Anthropic mediante Claude para estudiar la seguridad del software de código abierto y validado manualmente por Ada Logics, dentro de un esfuerzo más amplio que ha identificado cientos de fallos en bibliotecas abiertas.

Una tercera falla, CVE-2026-112393, lleva presente en Pillow desde 2013. Provoca un desbordamiento de búfer cuando un programa guarda una imagen TIFF comprimida en memoria en lugar de en un archivo en disco, el patrón habitual de un servicio que recodifica una carga y la devuelve. El aviso indica que los investigadores lograron bloquear el proceso y convertir el fallo en ejecución de código solo con la ayuda de una segunda vulnerabilidad separada que filtraba direcciones de memoria. Guardar en un archivo real en disco no se ve afectado.

Los registros CVE asignados por GitHub puntúan con 9,2 sobre 10, calificación crítica, las fallas de EPS, TIFF y miniaturas JPEG. Cada una depende de condiciones que esa puntuación no refleja, y las valoraciones propias de los mantenedores para el conjunto van de moderada a crítica. En los registros CVE, los analistas de CISA no señalan explotación conocida para el fallo de EPS y sí una prueba de concepto pública para el de TIFF.

Qué hacer

La recomendación principal es actualizar a Pillow 13.0.0, que corrige todas estas vulnerabilidades, y reconstruir cualquier contenedor, wheel o imagen base que empaquete una copia anterior. Pillow 13 deja de dar soporte a Python 3.10, por lo que las instalaciones que aún lo utilicen necesitarán además Python 3.11 o superior. Mientras no sea posible actualizar, la guía de seguridad de Pillow y los avisos proponen medidas para reducir cada vía de ataque:

  • EPS y Ghostscript: mantener el programa gs fuera de cualquier servidor que procese cargas no confiables y no pasar nunca un nombre de archivo controlado por el atacante a Image.open() para EPS.
  • Miniaturas JPEG: evitar draft() y thumbnail() con JPEG no confiables, o llamar primero a load(), o pasar reducing_gap=None.
  • TIFF: tratar el guardado de un TIFF en un búfer en memoria como io.BytesIO como una ruta sensible cuando la imagen proviene de un usuario.
Cybersecurity
Cybersecurity
Cybersecurity
Cybersecurity

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *