Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft GIF with oversized transparent index
-
DeliveryDeliver file to victim using libsixel
-
ExploitVictim renders GIF with background color set
-
ExecutionWrite past palette buffer at transparent index
-
ImpactHeap corruption or process crash
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, write limits
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that an application built on libsixel (versions before 1.8.7-r1, or 1.9.0 through 1.10.5) decode a GIF via the gif_init_frame() path in src/fromgif.c, and specifically that (1) the decoder is invoked with a background color set (the non-NULL bgcolor parameter - this is the AT:P attack requirement and the primary limiting factor), (2) the crafted GIF declares transparency via its graphic control extension, (3) the active (global or local) color table is small, and (4) the GIF specifies a transparent color index larger than that palette's size, which is never bounds-checked against palette size. Limiting factors that reduce realistic risk: the attack vector is local (the malicious GIF must be delivered to and processed by the victim, not reached over the network), passive user interaction is required (someone must render the file), and the vulnerable code path only triggers when the consuming application enables a background color - a non-default usage condition. This is not a remote-unauthenticated-against-default-configuration issue. |
| Impact | This is a medium-severity (CVSS 4.0 base 5.8) heap out-of-bounds write (CWE-787) whose real-world risk is meaningfully gated by its exploitation preconditions rather than being a drop-everything priority. The vendor-supplied CVSS 4.0 vector (AV:L/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:H) is internally consistent with the description: the attack is local/file-based (AV:L), requires the victim application or user to actually process the crafted GIF (UI:P), and carries an attack requirement (AT:P) - the decoder must be driven with a background color set - which matches the 'processed with a background color set' qualifier in the description. Impact is high to integrity and availability (heap corruption/crash) but none to confidentiality (VC:N), consistent with a write-only primitive with no inherent info-disclosure. No EPSS score, no CISA KEV listing, and no explicit POC flag were provided in the input; a third-party technical write-up (hackmd) and a VulnCheck advisory exist and document the root cause, but these are analysis artifacts, not confirmed weaponized exploit code. Net assessment: a legitimate memory-safety bug in a file parser worth patching, but current signals point to no evidence of active or widespread exploitation, and the local-delivery + user-interaction + non-default-bgcolor chain argues against mass exploitation. Note the one cross-signal caveat: the description's phrasing ('attackers can supply a crafted GIF') can read as remote, but the CVSS vector correctly treats this as local file processing - the attacker does not get network reach, only the ability to hand a malicious file to a victim. |
| Exploit ScenarioDerived | An attacker crafts a malicious GIF containing a small color table but a large transparent color index and delivers it to a victim who renders it with a libsixel-based tool (e.g., img2sixel) that has been invoked with a background color configured. When gif_init_frame() substitutes the background color at the unchecked transparent index, it writes past the end of the palette buffer, corrupting the heap and typically crashing the process. A public exploit is not identified in the provided data, though a detailed technical write-up describing the flaw exists. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
A heap out-of-bounds write in libsixel's GIF decoder (gif_init_frame() in src/fromgif.c) allows a crafted GIF file to corrupt heap memory in any application that links the library and decodes untrusted images. Affected releases are libsixel before 1.8.7-r1 and versions 1.9.0 through 1.10.5. Successful exploitation is gated by several conditions - the decoder must be invoked with a non-NULL background color (the CVSS 4.0 AT:P attack requirement), the GIF must declare a transparent color via its graphic control extension, the active global or local color table must be small, and the transparent index must exceed that palette size - so the practical risk is medium (CVSS 4.0 base 5.8; assessed CVSS 3.1 AV:L/AC:H/PR:N/UI:R with integrity and availability impact only). The vector is local with required user interaction, no public exploit identified at time of analysis, and a vendor fix is available.
RemediationAI
Vendor-released patch: upgrade to libsixel 1.8.7-r1 or later (the upstream fix is release tag v1.8.7-r1, https://github.com/saitoha/libsixel/releases/tag/v1.8.7-r1, containing commit bdbab09816eb9188429c37a50b97c5e66dfe5047); deployments on the 1.9.0-1.10.5 line should move to the first release carrying that commit, since the advisory names only 1.8.7-r1 as the fixed tagged version for the earlier branch. Until patched, the most targeted compensating control is to stop invoking the decoder with a background color - the AT:P precondition means the vulnerable write to frame->palette[] only fires when bgcolor is non-NULL, so callers that can pass NULL (or that never use the transparent-index compositing path) are not exposed; the trade-off is that transparent regions will no longer be composited onto a background, changing rendered output. Additional controls with their own trade-offs: refuse or sandbox untrusted GIF input, since the vector is local and requires a victim to render the file (UI:R) - run conversion in a low-privilege, resource-limited process so heap corruption cannot escalate; and build with AddressSanitizer or hardened allocators in test/canary environments to catch the OOB write early, though this is detection rather than prevention and carries performance overhead. No public exploit code was identified at time of analysis, and CISA KEV does not list this CVE, so remediation can be scheduled with normal patch-management urgency rather than emergency response.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
libsixel is a C library (identified by CPE cpe:2.3:a:saitoha:libsixel:*:*:*:*:*:*:*:*) that decodes images into the sixel graphics format. The flaw is a missing bounds check in gif_init_frame() in src/fromgif.c: the code computes the palette size from the GIF's global or local color table but never validates the transparent color index (pg->transparent) against that palette size before using it as an index. When a GIF supplies a small color table and a transparent index larger than ncolors, and the application passes a background color, the code writes the background RGB triple at frame->palette[pg->transparent * 3 + 0..2], landing past the end of the heap-allocated palette buffer. This is CWE-787 (out-of-bounds write), producing heap corruption that may manifest as a crash (availability impact) or as attacker-influenced memory writes (integrity impact). The upstream fix (commit bdbab09816eb9188429c37a50b97c5e66dfe5047) eliminates the class of bug structurally: it removes the per-frame index-based palette compositing entirely, keeps the compositing canvas in RGB888, adds an overflow guard on the pixel count (pcount > SIZE_MAX / 3), and bounds the transparent-index handling, so no palette-index arithmetic against an unchecked transparent index remains.
Know when Libsixel gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N
Local file processing (AV:L), no privileges but victim must render the file (UI:R); the required background-color configuration is a condition beyond attacker control, folding the 4.0 AT:P into AC:H, with heap-write impact to integrity and availability only (C:N).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
libsixel before 1.8.7-r1 and 1.9.0 through 1.10.5 contains a heap out-of-bounds write vulnerability in gif_init_frame() in src/fromgif.c, which never checks the GIF transparent color index against the palette size. Attackers can supply a crafted GIF with a small color table and large transparent index, processed with a background color set, to write bytes past the palette buffer, causing heap corruption or crashes.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.
An issue was discovered in libsixel 1.8.4. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable, n
An issue was discovered in libsixel 1.8.4. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable, n
libsixel 1.8.4 has an integer overflow in sixel_frame_resize in frame.c. Rated high severity (CVSS 8.8), this vulnerabil
libsixel 1.10.0 is vulnerable to Use after free in libsixel/src/dither.c:379. Rated high severity (CVSS 8.8), this vulne
Libsixel 1.8.3 contains a heap-based buffer overflow in the sixel_encode_highcolor function in tosixel.c. Rated high sev
Libsixel 1.8.2 contains a heap-based buffer overflow in the dither_func_fs function in tosixel.c. Rated high severity (C
An issue was discovered in libsixel 1.8.2. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable, n
stb_image.h (aka the stb image loader) 2.23, as used in libsixel and other products, has a heap-based buffer over-read i
libsixel before 1.10 is vulnerable to Buffer Overflow in libsixel/src/quant.c:867. Rated high severity (CVSS 8.8), this
libsixel 1.8.6 is affected by Buffer Overflow in libsixel/src/quant.c:876. Rated high severity (CVSS 8.8), this vulnerab
libsixel 1.8.6 suffers from a Heap Use After Free vulnerability in in libsixel/src/dither.c:388. Rated high severity (CV
In libsixel v1.8.2, there is a heap-based buffer over-read in the function load_jpeg() in the file loader.c, as demonstr
EUVD-2026-101229
GHSA-5j3r-7cc6-965h
NVD
CVE.org
EPSS
Exploit-DB