Pillow — Vulnerabilidades críticas de ejecución de código y desbordamiento de búfer en la biblioteca de procesamiento de imágenes de Python (CVE-2026-112900)
Fecha de publicación: 23 de octubre de 2026
Categoría: Vulnerability / Web Security
Introducción
La biblioteca Pillow, considerada el motor de procesamiento de imágenes más utilizado en el ecosistema de Python con más de 430 millones de descargas mensuales, se ha visto comprometida por múltiples fallos de alta severidad. El informe divulgado inicialmente por la firma de seguridad OX Security, junto con hallazgos asistidos por inteligencia artificial y validados por Ada Logics, detalla vulnerabilidades críticas que permiten la ejecución de comandos en el sistema operativo, desbordamientos de búfer en memoria y corrupción de montículo (heap). Los mantenedores del proyecto han respondido publicando la versión 13.0.0, la cual corrige de forma integral estos vectores de ataque que afectan diversos formatos gráficos como EPS, JPEG y TIFF.
¿Qué es Pillow? (Análisis General)
Pillow es la bifurcación (fork) y sucesor moderno de la popular Python Imaging Library (PIL). Desempeña un rol crítico en aplicaciones web modernas, tuberías de procesamiento de documentos y flujos de aprendizaje automático (machine learning), encargándose de tareas cotidianas como la generación de miniaturas, conversión de formatos y carga de imágenes subidas por usuarios. Dado que la biblioteca se encuentra integrada en millones de servidores y canalizaciones de datos, cualquier fallo en el manejo de archivos gráficos se traduce de inmediato en un vector de ataque masivo contra la infraestructura subyacente.
Las vulnerabilidades reportadas comprenden los siguientes identificadores y clasificaciones oficiales verificadas en la base de datos NVD:
- CVE-2026-112900: Inyección de argumentos en Ghostscript para entradas EPS.
- Vector CVSS v4.0 (Confirmado):
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N(Puntuación: 9.2 CRITICAL). - Clasificación CWE (Confirmado): CWE-78 (Improper Neutralization of Special Elements used in an OS Command) y CWE-88 (Improper Neutralization of Argument Delimiters in a Command).
- Vector CVSS v4.0 (Confirmado):
- CVE-2026-112403: Desbordamiento de búfer en el decodificador JPEG al procesar formatos comprimidos sin pérdida.
- Vector CVSS v4.0 (Confirmado):
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N(Puntuación: 9.2 CRITICAL). - Clasificación CWE (Confirmado): CWE-122 (Heap-based Buffer Overflow).
- Vector CVSS v4.0 (Confirmado):
- CVE-2026-112393: Desbordamiento de búfer en memoria (heap buffer overflow) y divulgación de datos obsoletos al guardar TIFF comprimidos.
- Vector CVSS v4.0 (Confirmado):
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N(Puntuación: 9.2 CRITICAL). - Clasificación CWE (Confirmado): CWE-122 (Heap-based Buffer Overflow).
- Vector CVSS v4.0 (Confirmado):
¿Cómo funciona? (Análisis Técnico)
El análisis detallado de los incidentes demuestra que los fallos no radican en la estructura visual de las imágenes, sino en la manipulación incorrecta de metadatos, nombres de archivo y flujos internos de búferes:
- Flujo de Inyección en EPS (CVE-2026-112900):
- Entrada del Exploit: El módulo
EpsImagePlugin.Ghostscriptinvoca al ejecutable externogspasando el nombre del archivo controlado por el llamador sin realizar una conversión adecuada a una ruta absoluta segura. - Ejecución: Si un atacante logra controlar el nombre del archivo para que comience con un guion o utilice un argumento precedido por
@que apunte a un archivo de texto con parámetros adicionales, Ghostscript interpreta estas cadenas como opciones de configuración en lugar de nombres de archivos planos. Esto permite la ejecución arbitraria de comandos incluso bajo el mecanismo predeterminado-dSAFER.
- Entrada del Exploit: El módulo
- Corrupción de Memoria en JPEG (CVE-2026-112403):
- Mecanismo: Al procesar imágenes JPEG en formato sin pérdida SOF3 utilizando compilaciones vinculadas a
libjpeg-turbo3.x y solicitando operaciones de reducción de escala mediantedraft()othumbnail(), el decodificador (ImagingJpegDecode) omite la validación del ancho de salida real devuelto por la biblioteca subyacente. - Impacto: Se escribe una línea de exploración (scanline) de ancho completo en un búfer dimensionado para una escala reducida, corrompiendo la memoria del heap, provocando caídas del proceso o facilitando la ejecución de código.
- Mecanismo: Al procesar imágenes JPEG en formato sin pérdida SOF3 utilizando compilaciones vinculadas a
- Desbordamiento y Fuga en TIFF (CVE-2026-112393):
- Mecanismo: Durante el almacenamiento de datos TIFF comprimidos a través de
libtiffhacia destinos carentes de un descriptor de archivo utilizable (como objetosBytesIO), la función interna_tiffWriteProccalcula la asignación de memoria basándose en el tamaño del búfer anterior en lugar de la posición actual de escritura. - Explotación: Etiquetas TIFF fuera de línea controladas por el atacante permiten sobrepasar la asignación inicial al avanzar el puntero, lo que sumado a espacios de alineación no escritos superiores a 64 KiB, expone bytes obsoletos del heap.
- Mecanismo: Durante el almacenamiento de datos TIFF comprimidos a través de
Sistemas / Entornos Afectados
Se encuentran expuestas las versiones de Pillow desde la 2.6.0 hasta la 12.3.0 (corregidas en la versión 13.0.0). Las arquitecturas más vulnerables corresponden a servicios web con puntos de carga de archivos que preservan los nombres suministrados por los usuarios, así como entornos que procesan imágenes mediante Ghostscript o bibliotecas dependientes de libjpeg-turbo 3.x y libtiff.
| CVE | Categoría (CWE) | Impacto | CVSS | Vector (resumido) |
|---|---|---|---|---|
| CVE-2026-112900 | CWE-78, CWE-88 | RCE / Inyección | 9.2 (CRITICAL) | AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H |
| CVE-2026-112403 | CWE-122 | Corrupción de Memoria / DoS | 9.2 (CRITICAL) | AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H |
| CVE-2026-112393 | CWE-122 | Corrupción de Memoria / Fuga | 9.2 (CRITICAL) | AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H |
Mitigación y Detección
Remediación
- Actualización prioritaria: Actualizar inmediatamente la biblioteca Pillow a la versión 13.0.0 o superior mediante el comando
pip install -U "Pillow>=13.0.0". Téngase en cuenta que esta versión discontinuó el soporte para Python 3.10, requiriendo Python 3.11 o superior. - Hardening de Ghostscript: Remover o restringir la instalación del binario
gsen servidores que procesen entradas de imágenes no confiables, evitando pasar nombres de archivo controlados por usuarios aImage.open()para archivos EPS. - Aislamiento de flujos: Evitar el uso de métodos de reducción de escala (
draft()othumbnail()) en JPEGs no confiables sin precauciones de carga previa, y tratar el almacenamiento de archivos TIFF en búferes de memoria (io.BytesIO) como operaciones altamente sensibles.
Detección
- Monitorear registros de actividad en busca de nombres de archivo inusuales en solicitudes de subida que contengan caracteres de control, guiones iniciales o referencias a argumentos de comandos.
- Implementar análisis estático de dependencias en las canalizaciones de CI/CD para identificar versiones vulnerables de Pillow en contenedores y despliegues de producción.
“La explotación de vulnerabilidades en bibliotecas de bajo nivel como Pillow demuestra cómo la falta de sanitización en metadatos y nombres de archivos puede transformar una operación gráfica rutinaria en una vía directa de ejecución remota de comandos en el servidor.”
Recapitulando
Las vulnerabilidades descubiertas en Pillow evidencian la criticidad de las dependencias de código abierto en la cadena de suministro de software moderno. Con puntuaciones CVSS de 9.2 y vectores que van desde la inyección de argumentos hasta desbordamientos de búfer en memoria, la actualización a la versión 13.0.0 se constituye como una directriz ineludible para salvaguardar la estabilidad e integridad de las plataformas corporativas y servicios web que procesan contenido gráfico multimedia.
Referencias
- Khandelwal, S. (2026). Critical Flaw in Python’s Popular Pillow Image Library Allows Code Execution via a Crafted Image. The Hacker News. https://thehackernews.com/2026/10/critical-flaw-in-pythons-popular-pillow.html
- OX Security. (2026). Three critical Pillow CVEs: RCE and heap overflows in Python’s imaging library. https://www.ox.security/blog/three-critical-pillow-cves-rce-and-heap-overflows-in-pythons-imaging-library-cve-2026-112900-cve-2026-112393-cve-2026-112403/
- Python Pillow Project. (2026). Pillow Release Notes - Version 13.0.0. https://pillow.readthedocs.io/en/stable/releasenotes/13.0.0.html
- Python Pillow Project. (2026). GitHub Security Advisory: GHSA-w889-685w-c8fh. https://github.com/python-pillow/Pillow/security/advisories/GHSA-w889-685w-c8fh
- Python Pillow Project. (2026). GitHub Security Advisory: GHSA-5x8w-8jj5-q52h. https://github.com/python-pillow/Pillow/security/advisories/GHSA-5x8w-8jj5-q52h
- Python Pillow Project. (2026). GitHub Security Advisory: GHSA-8g5g-8vmr-9782. https://github.com/python-pillow/Pillow/security/advisories/GHSA-8g5g-8vmr-9782
- Python Pillow Project. (2026). GitHub Security Advisory: GHSA-332p-7hrc-92wf. https://github.com/python-pillow/Pillow/security/advisories/GHSA-332p-7hrc-92wf
- Python Pillow Project. (2026). PyPI - Pillow 13.0.0. https://pypi.org/project/pillow/13.0.0/
- Python Pillow Project. (2026). Security Guidance - Pillow Documentation. https://pillow.readthedocs.io/en/stable/handbook/security.html
- National Vulnerability Database. (2026). NVD - CVE-2026-112900. https://www.cve.org/CVERecord?id=CVE-2026-112900