Cyber Resilience

CVE-2026-24001

Low

Published: 22 January 2026

Published
22 January 2026
Modified
04 March 2026
KEV Added
Patch
CVSS Score v4 2.7 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/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:X/AU:X/R:X/V:X/RE:X/U:X
EPSS Score 0.0002 6.7th percentile
Risk Priority 5 60% EPSS · 20% KEV · 20% CVSS

Summary

CVE-2026-24001 is a low-severity Uncontrolled Resource Consumption (CWE-400) vulnerability in Kpdecker Jsdiff. Its CVSS base score is 2.7 (Low).

Operationally, exploitation aligns with the MITRE ATT&CK technique Application or System Exploitation (T1499.004); ranked at the 6.7th percentile by exploit likelihood (below the median); it is not currently listed in the CISA KEV catalog.

The strongest mitigations our analysis identified are NIST 800-53 SI-10 (Information Input Validation) and SI-2 (Flaw Remediation).

Deeper analysis

CVE-2026-24001 is a denial-of-service vulnerability in jsdiff, a JavaScript library for text differencing. In versions prior to 8.0.3, 5.2.2, 4.0.4, and 3.5.1, the parsePatch method enters an infinite loop when processing patches whose filename headers contain line break characters such as \r, \u2028, or \u2029, leading to unbounded memory consumption and process crash. The applyPatch method is similarly affected when called with a string representation of a patch, as it internally invokes parsePatch. Additionally, a related ReDOS issue causes O(n³) parsing time for malicious patch headers containing those characters. Other library methods remain unaffected. The vulnerability is rated 7.5 on CVSS 3.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) and maps to CWE-400 (Uncontrolled Resource Consumption) and CWE-1333 (Inefficient Regular Expression Complexity).

Attackers can exploit this remotely with no privileges or user interaction by supplying a maliciously crafted patch to applications that invoke parsePatch or applyPatch on untrusted input. No large payloads are required, rendering input size limits ineffective. Even applications generating their own patches may be vulnerable if users can control filename headers, such as by specifying files for diffing. Successful exploitation results in denial of service via memory exhaustion and process termination.

The jsdiff security advisory (GHSA-73rr-hh4g-fpgx) and related GitHub fixes recommend upgrading to versions 8.0.3, 5.2.2, 4.0.4, or 3.5.1, which address both the infinite loop and ReDOS issues (see commit 15a1585230748c8ae6f8274c202e0c87309142f5 and pull request #649). As a workaround, applications should reject patches containing \r, \u2028, or \u2029 characters before parsing.

EU & UK References

Vulnerability details

jsdiff is a JavaScript text differencing implementation. Prior to versions 8.0.3, 5.2.2, 4.0.4, and 3.5.1, attempting to parse a patch whose filename headers contain the line break characters `\r`, `\u2028`, or `\u2029` can cause the `parsePatch` method to enter an…

more

infinite loop. It then consumes memory without limit until the process crashes due to running out of memory. Applications are therefore likely to be vulnerable to a denial-of-service attack if they call `parsePatch` with a user-provided patch as input. A large payload is not needed to trigger the vulnerability, so size limits on user input do not provide any protection. Furthermore, some applications may be vulnerable even when calling `parsePatch` on a patch generated by the application itself if the user is nonetheless able to control the filename headers (e.g. by directly providing the filenames of the files to be diffed). The `applyPatch` method is similarly affected if (and only if) called with a string representation of a patch as an argument, since under the hood it parses that string using `parsePatch`. Other methods of the library are unaffected. Finally, a second and lesser interdependent bug - a ReDOS - also exhibits when those same line break characters are present in a patch's *patch* header (also known as its "leading garbage"). A maliciously-crafted patch header of length *n* can take `parsePatch` O(*n*³) time to parse. Versions 8.0.3, 5.2.2, 4.0.4, and 3.5.1 contain a fix. As a workaround, do not attempt to parse patches that contain any of these characters: `\r`, `\u2028`, or `\u2029`.

CWE(s)

Related Threats

MITRE ATT&CK Enterprise TechniquesAI

T1499.004 Application or System Exploitation Impact
Adversaries may exploit software vulnerabilities that can cause an application or system to crash and deny availability to users.
Why these techniques?

CVE enables remote application DoS via crafted input triggering infinite loop/ReDOS and memory exhaustion in jsdiff parsePatch/applyPatch.

Confidence: HIGH · MITRE ATT&CK Enterprise v18.1

CVEs Like This One

CVE-2025-69873Shared CWE-1333, CWE-400
CVE-2026-39320Shared CWE-1333, CWE-400
CVE-2026-4926Shared CWE-1333, CWE-400
CVE-2024-56921Shared CWE-400
CVE-2026-21945Shared CWE-400
CVE-2024-33618Shared CWE-400
CVE-2025-9278Shared CWE-400
CVE-2026-41135Shared CWE-400
CVE-2026-20650Shared CWE-400
CVE-2025-71031Shared CWE-400

Affected Assets

kpdecker
jsdiff
≤ 3.5.1 · 4.0.0 — 4.0.4 · 5.0.0 — 5.2.2

Mitigating Controls

Mitigating Controls (NIST 800-53 r5) AI

prevent

Flaw remediation directly addresses the vulnerability by requiring timely upgrade of jsdiff to patched versions 8.0.3, 5.2.2, 4.0.4, or 3.5.1 that fix the infinite loop and ReDOS issues.

prevent

Information input validation enables rejection of untrusted patches containing disallowed line break characters ( , \u2028, \u2029) in filename or patch headers before invoking parsePatch or applyPatch.

prevent

Denial-of-service protection implements resource limits and validation to mitigate memory exhaustion and process crashes from malicious patch parsing.

References