CVE-2026-33023

libsixel is a SIXEL encoder/decoder implementation derived from kmiya's sixel. In versions 1.8.7 and prior, when built with the --with-gdk-pixbuf2 option, a use-after-free vulnerability exists in load_with_gdkpixbuf() in loader.c. The cleanup path manually frees the sixel_frame_t object and its internal buffers without consulting the reference count, even though the object was created via the refcounted constructor sixel_frame_new() and exposed to the public callback. A callback that calls sixel_frame_ref(frame) to retain a logically valid reference will hold a dangling pointer after sixel_helper_load_image_file() returns, and any subsequent access to the frame or its fields triggers a use-after-free confirmed by AddressSanitizer. The root cause is a consistency failure between two cleanup strategies in the same codebase: sixel_frame_unref() is used in load_with_builtin() but raw free() is used in load_with_gdkpixbuf(). An attacker supplying a crafted image to any application built against libsixel with gdk-pixbuf2 support can trigger this reliably, potentially leading to information disclosure, memory corruption, or code execution. This issue has been fixed in version 1.8.7-r1.
Configurations

Configuration 1 (hide)

cpe:2.3:a:saitoha:libsixel:*:*:*:*:*:*:*:*

History

25 Jul 2026, 11:10

Type Values Removed Values Added
Summary
  • (es) libsixel es una implementación de codificador/decodificador SIXEL derivada del sixel de kmiya. En las versiones 1.8.7 y anteriores, cuando se compila con la opción --with-gdk-pixbuf2, existe una vulnerabilidad de uso después de liberación en load_with_gdkpixbuf() en loader.c. La ruta de limpieza libera manualmente el objeto sixel_frame_t y sus búferes internos sin consultar el recuento de referencias, a pesar de que el objeto fue creado a través del constructor con recuento de referencias sixel_frame_new() y expuesto a la devolución de llamada pública. Una devolución de llamada que llama a sixel_frame_ref(frame) para retener una referencia lógicamente válida mantendrá un puntero colgante después de que sixel_helper_load_image_file() regrese, y cualquier acceso posterior al marco o sus campos activa un uso después de liberación confirmado por AddressSanitizer. La causa raíz es una falla de consistencia entre dos estrategias de limpieza en la misma base de código: sixel_frame_unref() se usa en load_with_builtin() pero free() sin procesar se usa en load_with_gdkpixbuf(). Un atacante que suministre una imagen manipulada a cualquier aplicación compilada contra libsixel con soporte para gdk-pixbuf2 puede activar esto de manera fiable, lo que podría conducir a revelación de información, corrupción de memoria o ejecución de código. Este problema ha sido solucionado en la versión 1.8.7-r1.

23 Apr 2026, 14:46

Type Values Removed Values Added
First Time Saitoha
Saitoha libsixel
References () https://github.com/saitoha/libsixel/releases/tag/v1.8.7-r1 - () https://github.com/saitoha/libsixel/releases/tag/v1.8.7-r1 - Release Notes
References () https://github.com/saitoha/libsixel/security/advisories/GHSA-hr25-g2j6-qjw6 - () https://github.com/saitoha/libsixel/security/advisories/GHSA-hr25-g2j6-qjw6 - Exploit, Vendor Advisory
CPE cpe:2.3:a:saitoha:libsixel:*:*:*:*:*:*:*:*

15 Apr 2026, 20:16

Type Values Removed Values Added
References () https://github.com/saitoha/libsixel/security/advisories/GHSA-hr25-g2j6-qjw6 - () https://github.com/saitoha/libsixel/security/advisories/GHSA-hr25-g2j6-qjw6 -

14 Apr 2026, 23:16

Type Values Removed Values Added
New CVE

Information

Published : 2026-04-14 23:16

Updated : 2026-07-25 11:10


NVD link : CVE-2026-33023

Mitre link : CVE-2026-33023

CVE.ORG link : CVE-2026-33023


JSON object : View

Products Affected

saitoha

  • libsixel
CWE
CWE-416

Use After Free