Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply untrusted width/height to host app
-
DeliveryApp calls sixel_encode in HIGHCOLOR mode
-
Exploitwidth*height overflows signed int, wraps allocation
-
ExecutionEncoder writes dithering data past undersized heap buffer
-
ImpactHeap corruption, potential code execution
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Heap buffer bounds checking
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Three concrete prerequisites must all hold: (1) the consuming application must set dither->quality_mode to SIXEL_QUALITY_HIGHCOLOR - the default/non-highcolor path (sixel_encode_dither) computes the size correctly with size_t casts and is NOT affected; (2) the application must pass attacker-influenced width and height straight to sixel_encode, which only checks width>0 and height>0 with no upper bound; and (3) width*height must exceed INT_MAX (~2.15 billion), e.g. 50000x50000. Limiting factors: the attacker-supplied input pixel buffer is roughly width*height*3 bytes (~7.5 GB at 50000x50000), so exploitation requires a 64-bit platform with sufficient virtual address space and is unreachable in practice on 32-bit systems where that allocation already fails; the advisory states img2sixel is not a realistic direct target because its image loaders impose their own dimension limits, so exposure is concentrated in libraries/apps that feed untrusted dimensions directly to the API. |
| Impact | Signals conflict on urgency versus likelihood. The CVSS 3.1 base score of 7.8 (AV:L/AC:L/PR:L/UI:N/S:U with C:H/I:H/A:H) reflects a high-impact heap write, and SSVC rates Technical Impact as 'total', which drives the vuln.today 'this_week' priority. However, EPSS is only 0.01% (2nd percentile), there is no CISA KEV listing, and SSVC marks Automatable: no with Exploitation: poc - all pointing to constrained, non-scalable exploitation rather than opportunistic mass attack. The NVD vector's AV:L and PR:L are consistent with a library-via-API flaw, but true reachability is entirely dependent on the calling application: the bug fires only in SIXEL_QUALITY_HIGHCOLOR mode when a caller forwards attacker-influenced width/height whose product exceeds INT_MAX (~2.15 billion), and the advisory notes img2sixel itself is not a realistic attack surface because image loaders cap dimensions. Net assessment: a real, confirmed memory-safety defect worth patching promptly for library consumers that handle untrusted dimensions, but not a widespread-exploitation emergency - the high score is driven by worst-case impact, not by demonstrated or automatable in-the-wild exploitation. |
| Exploit ScenarioDerived | An application that embeds libsixel in HIGHCOLOR quality mode takes image width and height from an untrusted source and forwards them to the public sixel_encode entry point; an attacker supplies dimensions whose product exceeds INT_MAX (e.g. 50000 x 50000) so the int allocation-size calculation wraps to a small value, malloc succeeds with an undersized buffer, and the encoder writes palette-index and dithering data past the end of the heap allocation, corrupting the heap. The GHSA advisory describes a direct-API reproduction approach (not a verified working exploit binary), consistent with SSVC Exploitation: poc. Exploitation requires a 64-bit host with enough virtual address space to hold the multi-gigabyte input buffer. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Oct 26, 2026
Heap buffer overflow in libsixel's high-color SIXEL encoder corrupts memory when an application encodes an image whose width times height exceeds INT_MAX (~2.15 billion), a path reachable only when the caller sets SIXEL_QUALITY_HIGHCOLOR and passes attacker-influenced width and height into the public sixel_encode entry point. The assessed vector is local, low complexity and authenticated (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, 7.8) with total technical impact per SSVC, since the wrapped allocation size lets attacker-influenced bytes be written past a heap allocation in the hosting process. A public PoC reference exists in the vendor advisory (an API-level reproduction recipe); it is not verified as working exploit code, CISA KEV does not list this issue, and EPSS is 0.01% (2nd percentile), so signals are mixed and the item is prioritized for remediation this week rather than treated as an emergency.
Earlier versions of this analysis (1)
Heap buffer overflow in libsixel 1.8.7-r1 and earlier allows local attackers to execute arbitrary code or crash the application when encoding images with dimensions exceeding 2.15 billion pixels. The sixel_encode_highcolor function contains a signed integer overflow in allocation size calculation that wraps to a small value, causing malloc to succeed with an undersized buffer that the encoder subsequently overflows. Fixed in version 1.8.7-r2. No CISA KEV listing or public exploit code identified at time of analysis, with EPSS exploitation probability presumably low given the highly specific triggering conditions.
RemediationAI
Vendor-released patch: libsixel 1.8.7-r2, which incorporates the upstream fix 0003-fix-encoder-int-overflow.patch referenced in GHSA-hx93-w8p2-ffh5 (https://github.com/saitoha/libsixel/security/advisories/GHSA-hx93-w8p2-ffh5); upgrade all deployments from the 1.4.4 through 1.8.7-r1 range. Where upgrading cannot be done immediately, the practical compensations sit in the calling application: reject any width*height that exceeds INT_MAX before calling sixel_encode (at minimum reject dimensions near 50000x50000, which is where the signed wrap occurs), with the trade-off that legitimate multi-gigapixel images must be downscaled or refused; and avoid setting SIXEL_QUALITY_HIGHCOLOR for untrusted dimensions, since the non-highcolor sixel_encode_dither path performs the size computation in size_t and is unaffected, at the cost of lower-quality palette output for those images. Restricting exposure to 64-bit hosts does not remove the flaw, and 32-bit hosts already fail the input-buffer allocation before reaching the overflow. No other vendor mitigation is described in the available sources.
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 SIXEL encoder/decoder derived from kmiya's sixel. In src/tosixel.c (commit 6d628cf43548e1f2739cbb13afcc6e8257868db5), the public sixel_encode function rejects only width < 1 and height < 1 and imposes no upper bound. When dither->quality_mode is SIXEL_QUALITY_HIGHCOLOR, control reaches sixel_encode_highcolor, where the allocation size whole_size is a plain int computed as width*height + 2*maxcolors + width*6, and the normalized_pixels allocation uses (size_t)(width * height * 3) - the multiplication is performed in int before the cast. Both CWE-190 (integer overflow) and the resulting CWE-122 (heap-based buffer overflow) apply: at 50000x50000, width*height is 2.5e9, which wraps, and the malloc can succeed with a buffer far smaller than the encoder expects. A third overflow exists in the pointer arithmetic rgbhit = paletted_pixels + width * height, computed in int, so downstream writes through rgbhit, rgb2pal and marks land outside the intended regions. The sibling path sixel_encode_dither computes bufsize with explicit size_t casts and is not affected; only the highcolor path is vulnerable. CPE cpe:2.3:a:saitoha:libsixel:*:*:*:*:*:*:*:* covers the affected line. Exploitation requires a 64-bit platform with enough address space for the roughly width*height*3-byte input buffer (~7.5 GB at 50000x50000); on 32-bit systems that allocation fails first and the overflow is unreachable in practice. The trigger is a direct API misuse rather than a crafted file format, and the advisory notes img2sixel is not a realistic direct target because its image loaders impose their own dimension limits.
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
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Reached via a local API call by a low-privileged caller controlling dimensions (PR:L), deterministic integer-overflow trigger (AC:L), and an attacker-influenced heap write giving high C/I/A; config/memory constraints are reachability limits, not base metrics.
AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
4DescriptionNVD
libsixel is a SIXEL encoder/decoder implementation derived from kmiya's sixel. From to 1.8.7-r1, signed integer overflow in sixel_encode_highcolor's allocation size calculation can lead to a heap buffer overflow. The public sixel_encode entry point validates only that width and height are greater than zero, with no upper bound. width and height are multiplied as plain int when computing the allocation size for paletted_pixels and normalized_pixels. Any caller that asks libsixel to encode a pixel buffer with width times height greater than INT_MAX (about 2.15 billion) will hit a wrapped allocation size; under the right wrap, the malloc succeeds with a buffer much smaller than the encoder expects, and the encoder writes past the end of the heap allocation. This vulnerability is fixed in 1.8.7-r2.
Executive ViewAI
CVE-2026-44636 is a heap buffer overflow in the libsixel image encoding library that can be triggered when an application processes extremely large images via the high-color encoder, potentially allowing memory corruption and code execution within the hosting process. Although exploitation requires local access and specific application configuration, the vulnerability poses a high risk to systems where libsixel is embedded in image processing pipelines or terminal emulators. Leadership should care because a successful attack could lead to data compromise or service disruption in affected products.
Apply vendor patch.
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.
A heap overflow occurs when a program writes data beyond the bounds of a buffer allocated in the heap memory region.
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-30409
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB