CVE-2026-71430
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-71430 is a Denial of Service vulnerability in node-re2, the RE2 regular expression bindings for Node.js (npm package re2). The flaw causes an uncatchable process abort when a global regex replacement using output-amplifying templates (such as $' or $`) produces a result string exceeding V8's maximum string length. All versions up to and including 1.25.0 are affected; the issue was fixed in version 1.25.1. It was originally published on July 7, 2026, and added to the GitHub Advisory Database on August 6, 2026, with a CVSS v3.1 base score of 6.2 (Medium) (GitHub Advisory, Red Hat Bugzilla).

Technical details

The root cause lies in the WrappedRE2::Replace function in lib/replace.cc, which builds the replacement result and passes it to V8 via .ToLocalChecked() without first checking whether the returned MaybeLocal is empty — classified as CWE-617 (Reachable Assertion) and CWE-131 (Incorrect Calculation of Buffer Size). When a global replace uses an output-amplifying template like $' (text after match) or $` (text before match), the output grows quadratically — O(input²) — with input size. For inputs of approximately 40,000+ single-character matches, the result exceeds V8's String::kMaxLength (~536,870,888 characters on 64-bit systems), causing Nan::New(result) to return an empty MaybeLocal; the unchecked .ToLocalChecked() then triggers v8::Utils::ReportApiFailure, resulting in a FATAL ERROR and abort() (SIGABRT, exit code 134). Unlike the built-in JavaScript regex engine, which throws a catchable RangeError: Invalid string length, this crash cannot be intercepted by try/catch or Node.js domains (GitHub Advisory).

Impact

Successful exploitation results in a complete, uncatchable termination of the Node.js process or worker thread, causing a full denial of service. Because the abort is triggered at the native layer via SIGABRT, no JavaScript error handling mechanism — including try/catch, process.on('uncaughtException'), or domains — can prevent the crash. There is no confidentiality or integrity impact; however, the availability impact is high, as a single malicious request can take down the entire application process. This is particularly severe for applications that adopted node-re2 specifically to safely process untrusted user input (GitHub Advisory, Red Hat Bugzilla).

Exploitability

A public proof-of-concept (PoC) is included in the security advisory and requires only a few lines of Node.js code using the re2 npm package. The NVD SSVC assessment classifies exploitation as "poc" available, though not automatable. The EPSS score is approximately 0.11% (1st percentile), indicating low current probability of widespread exploitation. There is no evidence of in-the-wild exploitation, no known threat actor attribution, and the vulnerability is not listed in the CISA KEV catalog (GitHub Advisory).

Exploitation steps

  1. Identify target: Determine that the target Node.js application uses the re2 npm package (version ≤ 1.25.0) and exposes an endpoint where user-controlled input is passed to a String.prototype.replace() call using a RE2 regex with a global flag.
  2. Craft amplifying input: Prepare a large input string consisting of many repeated single characters (e.g., 'a'.repeat(50000)) to maximize the quadratic output growth.
  3. Supply amplifying template: Ensure the replacement template contains $' (text after match) or $` (text before match), either by controlling the template directly or by influencing the input processed by such a template.
  4. Trigger the replace: Submit the crafted input to the vulnerable endpoint, causing WrappedRE2::Replace to build a result string exceeding V8's String::kMaxLength (~536,870,888 chars).
  5. Process abort: The unchecked .ToLocalChecked() call triggers FATAL ERROR: v8::ToLocalChecked Empty MaybeLocal, causing the Node.js process to exit with SIGABRT (exit code 134), taking down the entire application (GitHub Advisory).

Indicators of compromise

  • Process: Node.js process terminating unexpectedly with exit code 134 (SIGABRT); presence of FATAL ERROR: v8::ToLocalChecked Empty MaybeLocal in stderr or application logs.
  • Logs: Application or system logs showing stack traces with WrappedRE2::Replace at the top; repeated process restarts by a process manager (e.g., PM2, systemd) following crashes.
  • Network: Repeated HTTP requests to endpoints that perform regex-based string replacement, particularly with large payloads (40,000+ characters) in request bodies or parameters.
  • File System: Core dump files generated by the Node.js process crash, if core dumps are enabled on the host system (GitHub Advisory).

Mitigation and workarounds

Upgrade the re2 npm package to version 1.25.1 or later, which checks the returned MaybeLocal on every result path in WrappedRE2::Replace and throws a catchable RangeError: Invalid string length instead of aborting the process. No API changes are introduced, so the upgrade can be performed with a plain npm upgrade re2. As a temporary workaround where upgrading is not immediately possible, applications should validate and limit the size of user-controlled inputs before passing them to RE2 replace operations, and avoid using output-amplifying templates ($' or $`) with untrusted input (GitHub Advisory, Red Hat Bugzilla).

Community reactions

The vulnerability was reported by researcher ataberk-xyz and published by the uhop/node-re2 maintainer. Red Hat triaged the issue with high priority and severity in their Bugzilla tracker. No significant broader media coverage or notable community debate has been observed beyond standard vulnerability database aggregation (GitHub Advisory, Red Hat Bugzilla).

Additional resources


SourceThis report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-77415CRITICAL9.3
  • JavaScript logoJavaScript
  • jsonata
NoYesAug 21, 2026
CVE-2026-77414CRITICAL9.3
  • JavaScript logoJavaScript
  • jsonata
NoYesAug 21, 2026
CVE-2026-77413CRITICAL9.3
  • JavaScript logoJavaScript
  • jsonata
NoYesAug 21, 2026
CVE-2026-63421HIGH7.5
  • JavaScript logoJavaScript
  • @keystone-6/core
NoYesAug 21, 2026
CVE-2026-53509MEDIUM5.7
  • JavaScript logoJavaScript
  • @aborruso/ckan-mcp-server
NoYesAug 21, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management