Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDeliver malformed animated WebP to app
-
ExploitDemuxer reports zero canvas width
-
ExecutionDivide-by-zero in loader init
-
ImpactArithmetic fault aborts process (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Division safety checks
|
| Exploitation Conditions | The target build must include SAIL's built-in WebP codec (the advisory notes vulnerable builds are those compiled with that codec), and the application must accept and decode an attacker-supplied, malformed animated WebP whose container or ANMF frame metadata is inconsistent enough that WebPDemuxGetI returns a zero WEBP_FF_CANVAS_WIDTH; that zero width is then used as a divisor in sail_codec_load_init_v8_webp() before any generic image-skeleton validation in sail_advanced.c. Limiting factors: only SAIL versions <= 1.0.1 are affected (fixed in 1.0.2); builds without the WebP codec are unaffected; the CVSS vector requires passive user interaction (UI:P) - i.e. the victim application must process the file; and impact is confined to availability (a reliable single-process crash) with no confidentiality or integrity consequence and no code execution. |
| Impact | This is a medium-to-low real-world priority, not a high-urgency item. The only supplied score is CVSS 4.0 (4.8) with vector AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L, i.e. no confidentiality or integrity impact and only limited availability impact (a single-process crash), with a local attack vector and passive user interaction required. The impact ceiling is denial of service via process abort (CWE-369 divide-by-zero); there is no code execution or data exposure. No CISA KEV listing is present, so there is no confirmed active exploitation, and no EPSS probability was provided in the input, so the likelihood-of-exploitation signal is simply missing rather than low - that gap should be stated to decision-makers rather than assumed benign. A public PoC reference (a Python generator script plus full reproduction steps and ASAN FPE output) is included in the GitHub Security Advisory, which raises practical reproducibility even though the input does not formally mark exploit code as confirmed. The vendor/triage Decision label is 'this_month', consistent with a bug worth patching on a normal maintenance cadence rather than an emergency. One signal worth verifying: the supplied 4.0 vector is AV:L, but the description targets 'applications accepting untrusted WebP images' - in a network-facing upload/decoding service the realistic vector could be network-reachable with no per-instance user interaction, which would increase availability exposure; defenders of server deployments should treat the attack surface as remote-reachable even though the documented reproduction is a local CLI decode. |
| Exploit ScenarioDerived | An attacker crafts a malformed animated WebP whose container/ANMF frame metadata is inconsistent, causing the WebP demuxer to report a zero canvas width, and delivers it to an application that decodes untrusted WebP input using SAIL (<= 1.0.1) built with the WebP codec. When the loader initializes, SAIL divides the computed bytes-per-line by the zero width, raising an arithmetic fault that aborts the process and denies service. A public PoC generator script and step-by-step reproduction (including ASAN FPE output) are published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Denial of service in SAIL 1.0.1 and earlier: the built-in WebP decoder performs a divide-by-zero during loader initialization when a malformed animated WebP file causes WebPDemuxGetI to return a zero WEBP_FF_CANVAS_WIDTH, terminating the process before frame decoding or generic image-skeleton validation runs. Only builds compiled with the built-in WebP codec are affected, and an unauthenticated attacker must get a victim application to decode the crafted file (user interaction), with impact confined to availability - no confidentiality, integrity or code-execution consequence, and no CISA KEV listing. Version 1.0.2 fixes the issue; a public PoC reference exists in the vendor advisory (a generator script that patches ANMF metadata of a bundled sample), though it is not verified as working exploit code.
RemediationAI
Upgrade to SAIL 1.0.2, which contains commit 495660135a4c62e416a1b357a4381dd30069229d; the patch adds a demuxer-null check, rejects zero canvas width or height with SAIL_ERROR_INVALID_IMAGE_DIMENSIONS before any division, and derives bytes_per_pixel from sail_bits_per_pixel() instead of the demuxer-supplied row width - see the advisory at https://github.com/HappySeaFox/sail/security/advisories/GHSA-5g8g-g347-84m8 and the v1.0.2 tree at https://github.com/HappySeaFox/sail/tree/v1.0.2. Where upgrading is not immediately possible, the primary compensating control is to build SAIL without the built-in WebP codec (for example by restricting the enabled codecs via SAIL_ONLY_CODECS), which removes the vulnerable path but forfeits WebP decoding support entirely. Applications can additionally pre-screen untrusted WebP input and reject animated files whose demuxed canvas width or height is zero before handing them to SAIL, at the cost of maintaining a separate validation layer ahead of the decoder; the vendor's fix places this validation inside the codec init path so that later generic skeleton checks are not relied upon.
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
SAIL is a cross-platform image loading library whose WebP codec plugin wraps libwebp's demux API (WebPDemuxGetI) to read container-level properties such as WEBP_FF_CANVAS_WIDTH and WEBP_FF_CANVAS_HEIGHT before any frame is decoded. In affected builds, sail_codec_load_init_v8_webp() in src/sail-codecs/webp/webp.c assigns the demuxer-reported canvas width to image_local->width, computes bytes_per_line via sail_bytes_per_line(), and then derives webp_state->bytes_per_pixel by dividing that row size by image_local->width. For animated WebP files whose RIFF container or ANMF frame records are internally inconsistent (for example frame offsets/widths that conflict with the declared canvas), the demuxer can legitimately report a canvas width of zero, making that division an integer divide-by-zero - CWE-369. The crash occurs at initialization time and, per the advisory, before the generic skeleton validation performed later in src/sail/sail_advanced.c, so the malformed dimensions are never rejected. The fix adds an explicit demuxer-null check, rejects zero canvas width or height with SAIL_ERROR_INVALID_IMAGE_DIMENSIONS, and replaces the derived division with sail_bits_per_pixel(pixel_format) / 8, removing the arithmetic dependence on demuxer-supplied dimensions entirely.
Know when Sail 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:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Attacker needs no privileges (PR:N) but the victim app must process the supplied file (UI:R); documented trigger is local file decode (AV:L); crash yields only limited availability loss (A:L), no C/I impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
SAIL is a cross-platform library for loading and saving images with support for animation, metadata, and ICC profiles. Prior to version 1.0.2, the built-in WebP decoder can crash during loader initialization when processing a malformed animated WebP file with inconsistent container or ANMF frame metadata. In sail_codec_load_init_v8_webp() in src/sail-codecs/webp/webp.c, WebPDemuxGetI with WEBP_FF_CANVAS_WIDTH can return a zero image_local->width, which is then used as a divisor when calculating bytes_per_pixel from the image row size. The division happens before frame decoding and before generic image skeleton validation in src/sail/sail_advanced.c, causing an arithmetic fault and process termination. Applications accepting untrusted WebP images can consequently suffer denial of service; builds must include the affected WebP codec. This issue is fixed in version 1.0.2.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
The SAIL image library contains a heap buffer overflow in its XWD file parser that fails to validate the bytes_per_line
Heap buffer overflow in SAIL image library's TGA decoder allows remote code execution via malformed RLE-compressed TGA f
Heap buffer overflow in SAIL PSD codec allows remote code execution when processing malicious LAB-mode PSD files. Affect
Out-of-bounds memory access in SAIL image library's XWD codec allows remote attackers to achieve arbitrary code executio
A memory corruption vulnerability exists in the PSD Image Decoding functionality of the SAIL Image Decoding Library v0.9
A memory corruption vulnerability exists in the PSD RLE Decoding functionality of the SAIL Image Decoding Library v0.9.8
A memory corruption vulnerability exists in the BMPv3 RLE Decoding functionality of the SAIL Image Decoding Library v0.9
A memory corruption vulnerability exists in the WebP Image Decoding functionality of the SAIL Image Decoding Library v0.
A memory corruption vulnerability exists in the PCX Image Decoding functionality of the SAIL Image Decoding Library v0.9
A memory corruption vulnerability exists in the BMPv3 Palette Decoding functionality of the SAIL Image Decoding Library
A memory corruption vulnerability exists in the PCX Image Decoding functionality of the SAIL Image Decoding Library v0.9
A memory corruption vulnerability exists in the BMPv3 Image Decoding functionality of the SAIL Image Decoding Library v0
EUVD-2026-112083
NVD
CVE.org
GitHub
Exploit-DB