Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify endpoint validating input with email multiple:true
-
DeliveryCraft request with ~100KB whitespace field
-
ExploitSubmit to trigger quadratic String.split
-
ExecutionEvent loop blocked for seconds
-
ImpactRepeat concurrently to sustain outage
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Regex complexity limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the application to validate attacker-controlled input with the Joi.string().email({ multiple: true }) rule and to lack an effective length limit before the email rule executes. The flaw applies to the default ',' separator and to every custom separator. Key limiting factors: applications that do not use the multiple option are unaffected; adding .max() before .email() (e.g. Joi.string().max(1000).email({ multiple: true })) blocks long values first, but ONLY when abortEarly:false is not in use - with abortEarly:false the email rule still runs after the max check fails, so that configuration remains exploitable. A .trim() rule is explicitly NOT a sufficient workaround because it strips only leading/trailing whitespace. No authentication or user interaction is needed when the validating route is public (PR:N, UI:N). |
| Impact | This is a credible, moderate-urgency availability risk rather than a high-CVSS-but-low-real-risk issue, but its reach is narrower than the raw 7.5 score suggests. The CVSS vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) correctly captures a remote, unauthenticated, low-complexity denial of service with no confidentiality or integrity impact - consistent with the CWE-1333 inefficient-regex classification. The vuln.today decision label is 'this_week', which aligns with a real but non-emergency DoS. The signals are internally consistent: the GHSA advisory provides concrete timing evidence (100 KB of spaces blocks the event loop for ~3.3 seconds, 200 KB for ~13.6 seconds), confirming the A:H claim. No EPSS score and no CISA KEV entry were supplied, and there is no indication of active exploitation - so this should be treated as 'no public active exploitation reported' while noting that a working reproducer is published in the advisory. The important qualifier the CVSS vector cannot express is conditionality: exploitation only matters for applications that actually call Joi.string().email({ multiple: true }) on attacker-controlled input without an effective prior length limit. For the large subset of joi users who do not use the multiple email option, real-world risk is effectively zero despite the network-exploitable rating. |
| Exploit ScenarioDerived | An attacker sends a single HTTP request to a public endpoint (for example POST /invite) whose body field is validated by Joi.string().email({ multiple: true }), placing roughly 100 KB of whitespace with no separator in that field. The quadratic split blocks the Node.js event loop for several seconds, and a small number of concurrent requests keeps the single-threaded server unable to serve any other traffic. A working proof-of-concept reproducer is published in the GHSA advisory, demonstrating the timing blow-up on joi 18.3.0. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 29, 2026
Joi, the JavaScript schema validation library published on npm as joi (17.1.1 through 17.13.8, and 18.0.0 through 18.3.0) and as @hapi/joi from 16.0.0 onward, takes quadratic time in String.prototype.split whenever the Joi.string().email({ multiple: true }) rule processes a value containing a long run of whitespace with no separator, allowing a single request to stall the Node.js event loop for seconds. The vendor advisory measures roughly 3.3 seconds for 100,000 spaces and 13.6 seconds for 200,000 spaces on joi@18.3.0, dropping to 0-1 ms after the fix; the root cause is CWE-1333 (inefficient regular expression complexity) and the impact is pure CPU-exhaustion denial of service with no confidentiality or integrity effect. Exploitation requires the application to validate untrusted input with the multiple option and to have no effective length limit before the email rule runs; remote, unauthenticated attackers can trigger it where such a route is public (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5). There is no CISA KEV entry and no confirmed active exploitation; the GitHub security advisory itself contains a proof-of-concept benchmark snippet, and the vulnerability is fixed in 17.13.9 and 18.3.1.
RemediationAI
Upgrade to joi 17.13.9 or 18.3.1, the versions carrying the fix from PR #3162 (see https://github.com/hapijs/joi/releases/tag/v17.13.9, https://github.com/hapijs/joi/releases/tag/v18.3.1 and the advisory at https://github.com/hapijs/joi/security/advisories/GHSA-4528-x5fx-h6hg); no patched version is listed for @hapi/joi, so users on that line should migrate to a fixed joi release or stop using the multiple option on attacker-controlled input. If an upgrade cannot be deployed immediately, add .max() before .email(), for example Joi.string().max(1000).email({ multiple: true }), which rejects long values before the email rule runs - but this only holds if abortEarly: false is not in effect, because that option allows the email rule to execute after the max check fails, leaving the schema exploitable. Do not rely on .trim(), which removes only leading and trailing whitespace and leaves interior whitespace runs intact. There is no CISA KEV entry and no confirmed active exploitation; the advisory includes a proof-of-concept benchmark that demonstrates multi-second event-loop blocking, so exposure should be confirmed by auditing schemas that enable the multiple option on public routes.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw lives in the email rule implementation in lib/types/string.js. When the multiple option is set, the rule builds the regular expression \s*[<separator>]\s* (separator defaults to ',') and passes it to String.prototype.split. Because split attempts a match at every position, each position inside a long whitespace run makes the leading \s* consume the remainder of the run, fail to find a separator, and backtrack through it, producing n-squared work for a run of n whitespace characters. This is classic CWE-1333 regular-expression complexity, and it applies to the default separator as well as to every custom separator value, since the separator is escaped and interpolated into the same pattern. The upstream fix (PR #3162, landing in 17.13.9 and 18.3.1) rewrites the leading portion as (?:(?<!\s)\s+)?[<separator>]\s* so the leading whitespace can only begin at the start of a run, and it now constructs the regex only when multiple is actually set - the diff notes the lookbehind requires Safari 16.4+ as a browser-compatibility consideration. Split results are unchanged. The affected footprint is expressed by the CPEs cpe:2.3:a:hapijs:joi and cpe:2.3:a:@hapi:joi; the advisory states every joi release from 17.1.1 through 17.13.8 and 18.0.0 through 18.3.0 is affected, and every @hapi/joi release from 16.0.0 onward, for which the package data lists no patched version. The trigger is described precisely in the advisory, and usability of workarounds depends on configuration: a .max() rule placed before .email() rejects long values first, but only when abortEarly: false is not in use, because that option lets the email rule run even after the maximum-length check fails; .trim() is explicitly not a workaround since it only strips leading and trailing whitespace.
Know when Joi 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
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Remote unauthenticated input reaches the vulnerable email-multiple rule with no user interaction; impact is CPU-exhaustion DoS only, so A:H with C:N/I:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
joi is a schema description language and data validator for JavaScript. From 17.1.1 until 17.13.9 and 18.3.1, the Joi.string().email({ multiple: true }) rule uses a separator regular expression whose leading whitespace quantifier is retried at every position in a long whitespace run that contains no separator, causing quadratic work during String.prototype.split. The behavior applies to the default separator and every custom separator. Applications that validate attacker-controlled values with the multiple option and no effective prior length limit can have the Node.js event loop blocked for seconds by one request, preventing other work. A .max() rule is not sufficient when abortEarly: false allows the email rule to run after the maximum-length check fails. This vulnerability is fixed in versions 17.13.9 and 18.3.1.
Blast Radius
ecosystem impact- 9 npm packages depend on @hapi/joi (3 direct, 6 indirect)
- 10 npm packages depend on joi (5 direct, 5 indirect)
Ecosystem-wide dependent count for version 16.0.0 and other introduced versions.
Articles & Coverage 1
Technical POC Analysis
CWE-1333, inefficient regular expression complexity (super-linear / quadratic backtracking in String.prototype.split).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 PoC candidate from github (unverified)
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
CVE-2026-118772 is a high-severity denial-of-service vulnerability in the widely used Joi JavaScript validation library, affecting multiple versions. Attackers can exploit it remotely and without authentication to cause seconds-long stalls in Node.js applications that validate untrusted input, potentially disrupting services and degrading user experience. Leadership should prioritize remediation because public-facing applications leveraging Joi for email validation with the 'multiple' option are at risk, and the vulnerability can be triggered with minimal effort.
No vendor-released patch identified at time of analysis. Interim mitigations include enforcing strict input length limits before Joi validation, avoiding the multiple option for email validation on untrusted input, and implementing rate limiting or request throttling to reduce the impact of potential attacks.
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.
Prototype pollution in hapijs/joi's messages compilation function allows network-reachable attackers to replace an objec
Limited prototype pollution in joi's object().rename() allows unauthenticated remote attackers to set the prototype of t
Prototype pollution in joi, one of the most widely used JavaScript schema-validation libraries (versions 16.0.0 through
EUVD-2026-113320
GHSA-4528-x5fx-h6hg
NVD
CVE.org
EPSS
Exploit-DB