Skip to content
Fencer Vulns
high 7.5

CVE-2026-118772 json

joi: quadratic-time split in `string().email({ multiple: true })` allows denial of service

published 2026-10-29 10 d ago modified 2026-11-04 5 d ago also GHSA-4528-x5fx-h6hg , EUVD-2026-113320

cvss
7.5
version 3.1, CNA
cisa kev
Not listed
not in CISA's catalog
epss
0.5%
EPSS 0.5% chance of exploitation in 30 days, percentile 40%
public exploits
0
none known

Summary

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.

Patch / fix

Vendor advisories

What the vendors themselves say about their products: affected, fixed or not affected, and what to do.

red hat product security vex CVE-2026-118772 updated cvss 7.5

joi: joi: Denial of Service via inefficient regular expression in email validation

  • Red Hat Cryostat 4 cryostat/cryostat-openshift-console-plugin-rhel9 Red Hat Migration Toolkit for Containers rhmtc/openshift-migration-ui-rhel8 Red Hat OpenShift Serverless openshift-serverless-1/logic-rhel9-operator Red Hat Enterprise Linux 8 grafana-pcp Red Hat Enterprise Linux 9 grafana, grafana-selinux, grafana 12.4.3-2.el10 Red Hat Hardened Images grafana13.1 13.1.8-0.5.hum1, grafana13.2 13.2.4-0.4.hum1, grafana12.4 12.4.13-0.5.hum1
    +4 more products
    Red Hat OpenShift AI (RHOAI) rhoai/odh-dashboard-rhel9, rhoai/odh-mod-arch-maas-rhel9, rhoai/odh-mod-arch-automl-rhel9, rhoai/odh-mod-arch-gen-ai-rhel9, rhoai/odh-mod-arch-mlflow-rhel9, rhoai/odh-mod-arch-autorag-rhel9, +2 more Red Hat OpenShift Container Platform 4 openshift4/ose-agent-installer-ui-rhel9 Red Hat OpenShift Container Platform 5 openshift5/ose-agent-installer-ui-rhel9 Red Hat OpenShift Dev Spaces devspaces/dashboard-rhel9
    affected: workaround, no fix available
  • Red Hat Data Grid 8 redhat-datagrid-maven-repository.zip 8.6.1.CR1
    not affected: vulnerable code not in execute path
  • Red Hat Enterprise Linux 8 grafana, grafana-loki, grafana-mssql, grafana-mysql, grafana-selinux, grafana-graphite, +9 more Red Hat Enterprise Linux 10 grafana 12.4.3-2.el10
    not affected: vulnerable code not present

Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf

CISA SSVC

Exploitation
Proof of concept is public
Automatable
yes
Technical impact
partial
Assessed
5 d ago

Exploit prediction

0.47% chance of exploitation in the next 30 days, higher than 40% of all scored CVEs (FIRST EPSS, 2026-11-08).

Exploits and checks

  • github.com https://github.com/hapijs/joi/security/advisories/GHSA-4528-x5fx-h6hg referenced PoC, tagged "exploit" by a source, unverified

CVSS scores

assigned by version score vector
CNA 3.1 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
GitHub 3.1 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected packages

ecosystem package affected fixed in
npm joi
>=17.1.1, <17.13.9
>=18.0.0, <18.3.1
17.13.9
18.3.1
npm @hapi/joi
>=16.0.0, <=17.1.1
no fix listed

Affected products

  • hapijs joi
  • @hapi joi

Classification

Weakness
  • CWE-1333 Inefficient Regular Expression Complexity

References

Sources

Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.