Skip to main content

fflate CVE-2026-45820

| EUVDEUVD-2026-47616 MEDIUM
Loop with Unreachable Exit Condition (Infinite Loop) (CWE-835)
2026-07-22 seal GHSA-px8p-9vwx-vf98
6.6
CVSS 4.0 · Vendor: seal
Share

Severity by source

Vendor (seal) PRIMARY
6.6 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:U/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:N/AU:Y/R:U/V:D/RE:M/U:Amber
vuln.today AI
7.5 HIGH

Network-reachable via untrusted ZIP upload with no authentication or interaction needed; pure availability impact (infinite loop); no scope change, confidentiality, or integrity impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE
5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Red Hat
7.5 HIGH
qualitative

Primary rating from Vendor (seal).

CVSS VectorVendor: seal

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
N

Lifecycle Timeline

2
Analysis Generated
Jul 22, 2026 - 09:09 vuln.today
CVE Published
Jul 22, 2026 - 06:57 cve.org
MEDIUM 6.6

DescriptionCVE.org

fflate through 0.8.2 is vulnerable to denial of service via an infinite loop in unzipSync(). A crafted ZIP archive with a central directory entry declaring compressed_size=0xFFFFFFFF (ZIP64 sentinel) but missing the required ZIP64 extra field tag 0x0001 causes z64e() to loop indefinitely due to out-of-bounds reads returning undefined, which coerces to 0, keeping the loop condition permanently true.

AnalysisAI

Denial of service in fflate through 0.8.2 exposes any application calling unzipSync() to an indefinite process hang when processing attacker-supplied ZIP archives. The synchronous decompression helper z64e() enters an infinite loop when a ZIP central directory entry sets compressed_size=0xFFFFFFFF (the ZIP64 sentinel) but omits the required extra field tag 0x0001, causing JavaScript out-of-bounds array reads to silently return undefined, which coerces to 0 and prevents the loop from ever terminating. No public exploit has been identified at time of analysis, but the attack is network-reachable with no authentication required (CVSS 4.0 PR:N, UI:N) and is flagged automatable (AU:Y), making it a credible denial-of-service threat against any fflate-consuming service that accepts untrusted ZIP input.

Technical ContextAI

fflate (CPE: cpe:2.3:a:101arrowz:fflate:*:*:*:*:*:*:*:*) is a TypeScript/JavaScript compression library distributed via npm. The vulnerable code resides in the z64e() internal helper function at src/index.ts line 2714, invoked by the synchronous unzipSync() API during ZIP archive parsing. The ZIP64 format uses 0xFFFFFFFF as a sentinel in the central directory's compressed_size field to signal that the actual 64-bit value is stored in an appended extra field identified by tag 0x0001. When a malformed archive declares this sentinel but omits the extra field, z64e() attempts to read the 64-bit size from a position that does not exist in the buffer. In JavaScript, out-of-bounds typed array accesses do not throw - they silently return undefined. When undefined participates in numeric comparison or arithmetic, it coerces to 0, causing the loop termination condition (which depends on the parsed size value) to become permanently true. This is a textbook CWE-835 (Loop with Unreachable Exit Condition) whose root cause is JavaScript's permissive undefined-to-number coercion behavior combined with the absence of bounds checking before the loop.

RemediationAI

No vendor-released patched version is confirmed at time of analysis - the source code reference points to a specific unpatched commit hash (f7873560), indicating that a fix had not been published to npm at the time of reporting. Organizations should monitor the fflate npm package for releases beyond 0.8.2 and upgrade as soon as a patched version is available. As an immediate compensating control, validate ZIP archives before passing them to unzipSync() by rejecting any central directory entry that sets compressed_size to 0xFFFFFFFF without a properly structured ZIP64 extra field block (tag 0x0001); this prevents z64e() from being invoked on malformed input. Wrapping unzipSync() in a try/catch block does NOT mitigate this vulnerability because no exception is thrown - the function simply never returns. For production services accepting ZIP uploads, run ZIP decompression in an isolated worker thread or child process with a watchdog timeout (for example, 30 seconds) so a hung parse can be killed without blocking the main event loop. Restricting ZIP upload endpoints to authenticated, trusted users reduces the attack surface at the network boundary with the trade-off of limiting public-facing functionality.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Module for SAP Applications 15 SP7 Affected
SUSE Linux Enterprise Server for SAP Applications 15 SP7 Affected
SUSE Linux Enterprise Server for SAP applications 16.1 Affected
SUSE Linux Enterprise Module for SAP Applications 15 SP4 Affected
SUSE Linux Enterprise Module for SAP Applications 15 SP5 Affected

Share

CVE-2026-45820 vulnerability details – vuln.today

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