Skip to main content

libsixel EUVDEUVD-2026-101229

| CVE-2026-110601 MEDIUM
Out-of-bounds Write (CWE-787)
2026-10-14 VulnCheck GHSA-5j3r-7cc6-965h
5.8
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft GIF with oversized transparent index
  2. Delivery
    Deliver file to victim using libsixel
  3. Exploit
    Victim renders GIF with background color set
  4. Execution
    Write past palette buffer at transparent index
  5. Impact
    Heap 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

libsixel 1.9.0 ≤1.10.5
libsixel 0 <1.8.7-r1

Affected Packages

euvd libsixel fix: 1.8.7-r1

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

Vendor (VulnCheck) PRIMARY 5.8 MEDIUM
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
vuln.today AI 6.3 MEDIUM

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).

3.1 AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H
4.0 AV:L/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Low
niche SIXEL graphics library, limited production deployment footprint
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

29
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +29
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

CVE-2019-20140 HIGH POC
8.8 Dec 30

An issue was discovered in libsixel 1.8.4. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable, n

CVE-2019-20094 HIGH POC
8.8 Dec 30

An issue was discovered in libsixel 1.8.4. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable, n

CVE-2019-20205 HIGH POC
8.8 Jan 02

libsixel 1.8.4 has an integer overflow in sixel_frame_resize in frame.c. Rated high severity (CVSS 8.8), this vulnerabil

CVE-2021-41715 HIGH POC
8.8 Apr 08

libsixel 1.10.0 is vulnerable to Use after free in libsixel/src/dither.c:379. Rated high severity (CVSS 8.8), this vulne

CVE-2020-21548 HIGH POC
8.8 Sep 17

Libsixel 1.8.3 contains a heap-based buffer overflow in the sixel_encode_highcolor function in tosixel.c. Rated high sev

CVE-2020-21547 HIGH POC
8.8 Sep 17

Libsixel 1.8.2 contains a heap-based buffer overflow in the dither_func_fs function in tosixel.c. Rated high severity (C

CVE-2019-19778 HIGH POC
8.8 Dec 13

An issue was discovered in libsixel 1.8.2. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable, n

CVE-2019-19777 HIGH POC
8.8 Dec 13

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

CVE-2021-40656 HIGH POC
8.8 Apr 08

libsixel before 1.10 is vulnerable to Buffer Overflow in libsixel/src/quant.c:867. Rated high severity (CVSS 8.8), this

CVE-2022-27044 HIGH POC
8.8 Apr 08

libsixel 1.8.6 is affected by Buffer Overflow in libsixel/src/quant.c:876. Rated high severity (CVSS 8.8), this vulnerab

CVE-2022-27046 HIGH POC
8.8 Apr 08

libsixel 1.8.6 suffers from a Heap Use After Free vulnerability in in libsixel/src/dither.c:388. Rated high severity (CV

CVE-2019-3574 HIGH POC
7.8 Jan 02

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

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy