Security research · CVE-2026-115887
graphql-scalars PhoneNumber scalar is vulnerable to regular expression denial of service
Published Oct 28, 2026 · catalog updated Oct 28, 2026 · graphql-scalars PhoneNumber scalar is
Last checked Nov 5, 2026. A connected source was read within the last 7 days.
Check if you run it
No confirmed exploitation is on record for CVE-2026-115887. EPSS is 0.49%. Act only if a listed version of graphql-scalars PhoneNumber scalar is is installed.
Gaps on this record
- The stored product name is a package slug. The name on this page is taken from the title (graphql-scalars PhoneNumber scalar is).
- No vendor fix or required action is stored. Compare the linked advisory before you change production.
- Severity
- High7.5
- Known exploitation
- Not in CISA/VulnCheck KEV
- EPSS
- 0.49%
- Remediation
- Version ranges on file
- Affected products
- npm graphql-scalars
## Summary The regular expression behind since 1.24.1 backtracks exponentially. A string made of a run of digits followed by one character that makes the match fail (for example ) blocks the JavaScript thread for seconds, and every additional digit doubles the time. graphql-js calls while *validating* a document and while coercing variables, so the regex runs for every request that merely contains such a value in a position, before execution and before any authentication or authorization step of the server. One small unauthenticated request is enough to stall a server process. ## Affected versions - >= 1.24.1, <= 2.0.0 (2.0.0 is the current ; the default branch still has the same pattern). - Not affected: 1.24.0 and the earlier versions I checked (1.22.4, 1.23.0), which use the linear . - Introduced by #2719 (c7f58da16, "PhoneNumber scalar is not fully compatible with E.164 format so updated regex to support phone number with extension"), released as 1.24.1 on 2025-01-29. The payload was ran against 1.22.4, 1.23.0, 1.24.0, 1.24.1, 1.24.2, 1.25.0, 1.26.0 and 2.0.0: the first three reject it instantly, the other five show the exponential growth. ## Root cause : In the separator is optional, so a run of n digits can be split across the inner and the outer iterations in a number of ways that is exponential in n. When the overall match fails, for instance on a trailing non-digit, the engine tries all of them. ## Proof of concept 1. The scalar alone ( ): Measured warm, i.e. after ordinary inputs have been validated like in a running server: | digits | Node 22.19.0 | Node 26.10.0 | |-------:|-------------:|-------------:| | 24 | 0.10 s | 0.07 s | | 26 | 0.41 s | 0.29 s | | 28 | 1.63 s | 1.14 s | | 30 | 6.59 s | 4.62 s | The time doubles with every digit. The first execution of the regex in a fresh process is about 5x slower because V8 interprets a regexp on its first run (Node 22.19.0, 28 digits: 7.8 s). 2. Through graphql-js, no server and no authentication: a schema with
Are you affected?
Enter the version you run. The result uses only the ranges stored on this record.
The check returns affected, not affected, or incomplete. It does not guess a version that is missing from the record.
- npm graphql-scalars<= 2.0.0
How to fix CVE-2026-115887
Upgrade
CVE-2026-115887 lists a fix boundary at 2.0.0. Compare the installed build with that boundary before you change production.
Version check
Affected <= 2.0.0
Advisory
Open the cve_org record and follow its fix.
Official advisories
What to do
Three questions, each answered from this record only. Confirm the vendor advisory before you patch.
Should you patch?
No confirmed exploitation is on record for CVE-2026-115887. EPSS is 0.49%. Act only if a listed version of graphql-scalars PhoneNumber scalar is is installed.
Which versions are affected?
Compare what you have installed with <= 2.0.0. Compare the installed version with the linked vendor advisory before you change production.
What should an analyst verify?
CWE-1333: Inefficient Regular Expression Complexity. EPSS 0.49%. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.
Code
The project this record applies to. Exploit listings stay in References.
Timeline
Detection, updates, and resolution for this record.
Oct 28, 2026 · GitHub Advisory Database
Detected
## Summary The regular expression behind since 1.24.1 backtracks exponentially. A string made of a run of digits followed by one character that makes the match fail (for example ) blocks the JavaScript thread for seconds, and every additional digit doubles the time. graphql-js calls while *validating* a document and while coercing variables, so the regex runs for every request that merely contains
Oct 28, 2026 · GitHub Advisory Database
Updated
## Summary The regular expression behind since 1.24.1 backtracks exponentially. A string made of a run of digits followed by one character that makes the match fail (for example ) blocks the JavaScript thread for seconds, and every additional digit doubles the time. graphql-js calls while *validating* a document and while coercing variables, so the regex runs for every request that merely contains
Sources
- CVE.orgVulnerability recordCVE-2026-115887
Official CVE identifier
cve.org - FIRST EPSSExploitation probabilityCVE-2026-115887
30-day exploitation probability 0.49%
first.org - GitHub Advisory DatabasePackage advisoryGHSA-x8rm-f576-gq67
graphql-scalars PhoneNumber scalar is vulnerable to regular expression denial of service
github.com - GitLab Advisory DatabasePackage advisoryCVE-2026-115887
The regular expression behind GraphQLPhoneNumber since 1.24.1 backtracks exponentially. A string made of a run of digits followed by one character that makes the match fail (for example "1".repeat(30) + "x") blocks the JavaScript thread for seconds, and every additional digit doubles the time. graphql-js calls parseLiteral while validating a document and parseValue while coercing variables, so the
advisories.gitlab.com
References
Freshness
Last verified in this catalog Nov 5, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.
- FIRST EPSSNov 5, 2026
- GitLab Advisory DatabaseOct 30, 2026
- CVE.orgOct 29, 2026
- GitHub Advisory DatabaseOct 29, 2026