Alta

Pillow: Desreferencia de puntero NULL en Image.merge mediante una banda no validada 0

  • Publicada: 21.10.2026
  • Actualizado: 22.10.2026 00:04

Resumen

Image.merge() comprueba el modo de cada banda de entrada excepto el de la banda 0. Si la banda 0 es una imagen de una sola banda de tipo I o F, la rutina nativa de merge lee un puntero de píxel que es NULL para dichos modos y el proceso se bloquea. El complemento IPTC llega a este punto a partir de un simple Image.open() seguido de una carga; dado que IPTC no cuenta con un prefiltro de magic bytes, un archivo manipulado sin un encabezado reconocible puede desencadenarlo.

Detalles

El bucle de validación omite la banda 0:

  • src/PIL/Image.py:3795 itera for band in bands[1:] y comprueba el modo y el tamaño únicamente para estas.

Para una imagen I o F, el plano de 8 bits image8 es NULL (solo image32 está establecido). ImagingMerge desreferencia bands[0]->image8[y] para los modos de salida multibanda:

  • src/libImaging/Bands.c:302, :311, :321

El cargador IPTC construye la lista de bandas a partir de una subimagen tipada por el atacante y la pasa a merge con la subimagen en el índice 0:

  • src/PIL/IptcImagePlugin.py:156-160
  • src/PIL/IptcImagePlugin.py:169 registra el abridor sin función accept.

PoC

python
from PIL import Image

# Band 0 is a single-band "I" image: its image8 plane is NULL. merge() validates only
# bands[1:], so the native ImagingMerge dereferences the NULL plane for band 0.
band0 = Image.new("I", (4, 4))
Image.merge("RGB", [band0, Image.new("L", (4, 4)), Image.new("L", (4, 4))])

Ejecución:

bash
$ python 02_poc.py
Segmentation fault (core dumped)

Observado en una compilación desde el código fuente del commit 3e2ab96.

Bajo AddressSanitizer:

==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000
    #0 ImagingMerge   src/libImaging/Bands.c:311
    #1 _merge         src/_imaging.c:2492
SUMMARY: AddressSanitizer: SEGV src/libImaging/Bands.c:311 in ImagingMerge

La dirección nula confirma la desreferencia del plano image8 ausente para la banda 0.

Impacto

Desreferencia de puntero NULL en una extensión C. Un archivo manipulado abierto y cargado mediante la ruta de IPTC provoca la caída del proceso de trabajo. Se trata de un bloqueo definitivo del proceso, no de una excepción de Python que una aplicación pueda capturar.

Qué hacer

Actualice Pillow a la versión 13.0.0 o posterior.

Software afectado

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

PlataformaPaqueteVersiones vulnerablesCorregida en
Python (PyPI) pillow >= 12.0.0, < 13.0.0 13.0.0

Referencias

Puntuación CVSS -
Vector CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Debilidad (CWE)
CWE-476
Plataforma
Python (PyPI)
Paquete
pillow
Publicada
21.10.2026
Actualizado
22.10.2026 00:04

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

OSV / GitHub Advisory Database - GHSA-cp9v-662q-vvx9 - CC BY 4.0

Historial de vulnerabilidades: pillow

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.

Todas (89) en el archivo
Entradas en total
89
Primera → última
04.2014 10.2026
Sin corrección
0
Explotada en ataques
1

Distribución por gravedad

  • Crítica 12
  • Alta 57
  • Media 18
  • Baja 1
  • Sin evaluar 1

Divulgaciones por año

  1. 2017: 1
  2. 2018: 0
  3. 2019: 1
  4. 2020: 10
  5. 2021: 20
  6. 2022: 8
  7. 2023: 3
  8. 2024: 2
  9. 2025: 1
  10. 2026: 31

antes: 12

Gravedad:
  1. Alta CVE-2026-112390 >= 7.2.0, < 13.0.0 13.0.0
  2. Pillow: Desreferencia de puntero NULL en Image.merge mediante una banda no validada 0 esta entrada
    Alta CVE-2026-112405 >= 12.0.0, < 13.0.0 13.0.0
  3. Crítica CVE-2026-112900 >= 2.6.0, < 13.0.0 13.0.0
  4. Alta · 7.5 CVE-2026-59200 >= 5.1.0, < 12.3.0 12.3.0
  5. Alta CVE-2026-42311 >= 10.3.0, < 12.2.0 12.2.0
Mostrar más (20) Mostrando 20 de 69

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.