{"id":"CVE-2026-92599","aliases":["CLSA-2026-1790719586","CLSA-2026-1792510126","EUVD-2026-81299","GHSA-6h2x-m376-mqjq","GHSA-mrx9-2rrp-rhpx","RHSA-2026:68778","RHSA-2026:68821","RHSA-2026:68926","ROOT-APP-NPM-CVE-2026-92599","ROOT-APP-NPM-GHSA-6h2x-m376-mqjq"],"status":"published","title":"Joi before 17.13.7 and 18.2.6 ReDoS via isoDate","description":"joi (npm package `joi`, hapi.js) versions \u003e=17.2.0 \u003c17.13.7 and \u003e=18.0.0 \u003c18.2.6 are vulnerable to regular expression denial of service in the `Joi.string().isoDate()` validation rule. One of the regular expressions the rule applies to the input is unanchored, so a valid ISO date followed by a long run of fractional-second digits causes the regex engine to restart its search from every position in the string, yielding time proportional to the square of the input length (about 1.4 s for 64 KB of digits and about 22 s for 256 KB). A remote attacker who can supply a string to an isoDate validation can stall the application with a single request. Fixed in 17.13.7 and 18.2.6; as a workaround, cap the length of the string before it reaches joi.","severity":{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00582,"percentile":0.48071,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-1333"],"published":"2026-09-16T21:47:03Z","modified":"2026-10-28T02:30:43Z","fixes":[{"ecosystem":"npm","package":"joi","fixed_in":["17.13.7","18.2.6"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"joi","fixed_in":["17.13.6-tuxcare.1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"joi","fixed_in":["17.13.4-aikido.2","17.13.6-aikido.2","17.13.3-aikido.4","17.13.5-aikido.2","18.2.3-aikido.1","17.13.6-aikido.1","17.13.4-aikido.1","17.13.5-aikido.1","17.13.3-aikido.2","17.13.3-aikido.3"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/joi","fixed_in":["17.13.4-root.io.2","17.13.6-root.io.2","17.13.3-root.io.4","17.13.5-root.io.2","18.2.3-root.io.1","17.13.6-root.io.1","17.13.4-root.io.1","17.13.5-root.io.1","17.13.3-root.io.2","17.13.3-root.io.3"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"17.2.0"},{"fixed":"17.13.7"}]}]},{"source":"ghsa","ecosystem":"npm","package":"joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"18.0.0"},{"fixed":"18.2.6"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"17.13.6-tuxcare.0"},{"fixed":"17.13.6-tuxcare.1"}]}],"versions":["17.13.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"17.13.4-tuxcare.0"},{"fixed":"17.13.4-tuxcare.1"}]}],"versions":["17.13.4"],"bundled":4},{"source":"osv","ecosystem":"npm","package":"joi","ranges":[{"type":"SEMVER","events":[{"introduced":"17.2.0"},{"fixed":"17.13.7"}]}]},{"source":"osv","ecosystem":"npm","package":"joi","ranges":[{"type":"SEMVER","events":[{"introduced":"18.0.0"},{"fixed":"18.2.6"}]}]},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"grafana13.2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:13.2.1-0.5.hum1"}]}],"bundled":14},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"grafana12.4","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:12.4.10-0.6.hum1"}]}],"bundled":14},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"grafana13.1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:13.1.6-0.2.hum1"}]}],"bundled":4},{"source":"osv","ecosystem":"Root:npm","package":"joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"17.13.4-aikido.2"},{"fixed":"17.13.6-aikido.2"},{"fixed":"17.13.3-aikido.4"},{"fixed":"17.13.5-aikido.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"17.13.4-root.io.2"},{"fixed":"17.13.6-root.io.2"},{"fixed":"17.13.3-root.io.4"},{"fixed":"17.13.5-root.io.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"18.2.3-aikido.1"},{"fixed":"17.13.6-aikido.1"},{"fixed":"17.13.4-aikido.1"},{"fixed":"17.13.5-aikido.1"},{"fixed":"17.13.3-aikido.2"},{"fixed":"17.13.3-aikido.3"},{"fixed":"17.13.4-aikido.2"},{"fixed":"17.13.6-aikido.2"},{"fixed":"17.13.3-aikido.4"},{"fixed":"17.13.5-aikido.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/joi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"18.2.3-root.io.1"},{"fixed":"17.13.6-root.io.1"},{"fixed":"17.13.4-root.io.1"},{"fixed":"17.13.5-root.io.1"},{"fixed":"17.13.3-root.io.2"},{"fixed":"17.13.3-root.io.3"},{"fixed":"17.13.4-root.io.2"},{"fixed":"17.13.6-root.io.2"},{"fixed":"17.13.3-root.io.4"},{"fixed":"17.13.5-root.io.2"}]}]}],"products":[{"vendor":"hapijs","product":"joi"}],"references":[{"url":"https://github.com/hapijs/joi/security/advisories/GHSA-6h2x-m376-mqjq","tags":["vendor-advisory","advisory","web","article"]},{"url":"https://www.vulncheck.com/advisories/joi-before-17.13.7-and-18.2.6-redos-via-isodate","tags":["third-party-advisory","advisory","web","article"]},{"url":"https://github.com/hapijs/joi/pull/3143","tags":["web"]},{"url":"https://github.com/hapijs/joi/pull/3145","tags":["web"]},{"url":"https://github.com/hapijs/joi/commit/115e7b58d5eaaecc5e9b7093d41899ad6fb053ec","tags":["web"]},{"url":"https://github.com/hapijs/joi/commit/e70df424c367f2976db63b089504413744a21245","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-92599","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-6h2x-m376-mqjq"},{"url":"https://github.com/advisories/GHSA-mrx9-2rrp-rhpx"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/92xxx/CVE-2026-92599.json","tags":["advisory"]},{"url":"https://github.com/hapijs/joi","tags":["package"]},{"url":"https://access.redhat.com/errata/RHSA-2026:68778","tags":["advisory"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-81871","tags":["report"]},{"url":"https://access.redhat.com/security/updates/classification/","tags":["article"]},{"url":"https://images.redhat.com/","tags":["article"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-33380","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-33378","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-28374","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-33377","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-28380","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-33381","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-28376","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-28379","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-33376","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-28383","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-81872","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-92599","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-42127","tags":["report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_68778.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477253","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-28374","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-28374","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-28374","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477259","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-28376","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-28376","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-28376","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477264","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-28379","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-28379","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-28379","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477240","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-28380","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-28380","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-28380","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477255","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-28383","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-28383","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-28383","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477262","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-33376","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33376","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-33376","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477246","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-33377","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33377","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-33377","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477269","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-33378","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33378","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-33378","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477248","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-33380","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33380","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-33380","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2477239","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-33381","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33381","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-33381","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2491449","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-42127","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-42127","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-42127","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2535725","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-81871","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-81871","tags":["advisory"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/commit/c65d435b43e5e6b82310e6b18dd4cdcb8ac63a0c","tags":["article"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/releases/tag/exporters/otlp/otlplog/otlploggrpc/v0.21.0","tags":["article"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/security/advisories/GHSA-w34q-cm8f-9c5x","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2535727","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-81872","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-81872","tags":["advisory"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/commit/ba71b09e6ed272e93a669aeaec1e98b1df4cc582","tags":["article"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/issues/6797","tags":["article"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/pull/8620","tags":["article"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/log/v0.21.0","tags":["article"]},{"url":"https://github.com/open-telemetry/opentelemetry-go/security/advisories/GHSA-hjf4-fphr-2h65","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2538354","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-92599","tags":["advisory"]},{"url":"https://access.redhat.com/errata/RHSA-2026:68821","tags":["advisory"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-61709","tags":["report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_68821.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2535473","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-61709","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-61709","tags":["advisory"]},{"url":"https://github.com/openfga/openfga/commit/171806c93b86bca29e0212ceb8b6ee9c48eb9ac3","tags":["article"]},{"url":"https://github.com/openfga/openfga/releases/tag/v1.18.1","tags":["article"]},{"url":"https://github.com/openfga/openfga/security/advisories/GHSA-g3pg-frfm-pr2m","tags":["article"]},{"url":"https://access.redhat.com/errata/RHSA-2026:68926","tags":["advisory"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-14199","tags":["report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_68926.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2521850","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-14199","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-14199","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-14199/","tags":["article"]}],"sources":{"cve":[{"id":"CVE-2026-92599","title":"Joi before 17.13.7 and 18.2.6 ReDoS via isoDate","description":"joi (npm package `joi`, hapi.js) versions \u003e=17.2.0 \u003c17.13.7 and \u003e=18.0.0 \u003c18.2.6 are vulnerable to regular expression denial of service in the `Joi.string().isoDate()` validation rule. One of the regular expressions the rule applies to the input is unanchored, so a valid ISO date followed by a long run of fractional-second digits causes the regex engine to restart its search from every position in the string, yielding time proportional to the square of the input length (about 1.4 s for 64 KB of digits and about 22 s for 256 KB). A remote attacker who can supply a string to an isoDate validation can stall the application with a single request. Fixed in 17.13.7 and 18.2.6; as a workaround, cap the length of the string before it reaches joi.","status":"published","published":"2026-09-16T21:47:03.073Z","modified":"2026-09-18T20:06:43.275Z","cvss":[{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high","assessor":"cna"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-1333"],"updated_at":"2026-11-02T13:48:24.536396Z"}],"euvd":[{"id":"EUVD-2026-81299","description":"joi (npm package `joi`, hapi.js) versions \u003e=17.2.0 \u003c17.13.7 and \u003e=18.0.0 \u003c18.2.6 are vulnerable to regular expression denial of service in the `Joi.string().isoDate()` validation rule. One of the regular expressions the rule applies to the input is unanchored, so a valid ISO date followed by a long run of fractional-second digits causes the regex engine to restart its search from every position in the string, yielding time proportional to the square of the input length (about 1.4 s for 64 KB of digits and about 22 s for 256 KB). A remote attacker who can supply a string to an isoDate validation can stall the application with a single request. Fixed in 17.13.7 and 18.2.6; as a workaround, cap the length of the string before it reaches joi.","status":"published","published":"2026-09-16T21:47:03Z","modified":"2026-09-18T20:06:43Z","cvss":[{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high"}],"updated_at":"2026-11-02T17:28:06.992666Z"}],"ghsa":[{"id":"GHSA-6h2x-m376-mqjq","title":"joi: Quadratic regular-expression backtracking in `Joi.string().isoDate()`","description":"### Impact\nAny application that validates a user-supplied string with `Joi.string().isoDate()` can be stalled by a single request. One of the regular expressions the rule runs over the input was unanchored, so a valid ISO date followed by a long run of fractional-second digits made the regex engine restart its search from every position in the string, costing time proportional to the square of the input length. 64 KB of digits costs about 1.4 s and 256 KB about 22 s.\n\n### Patches\nUpgrade to version 17.13.7 or 18.2.6 depending on your current major version.\n\n### Workarounds\nNone except capping the length of the string before it reaches joi.","status":"published","published":"2026-09-29T18:07:42Z","modified":"2026-10-05T23:31:12Z","cvss":[{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-1333"],"updated_at":"2026-11-02T14:41:27.036917Z"},{"id":"GHSA-mrx9-2rrp-rhpx","title":"Duplicate Advisory: joi: Quadratic regular-expression backtracking in `Joi.string().isoDate()`","description":"## Duplicate Advisory\n\nThis advisory has been withdrawn because it is a duplicate of GHSA-6h2x-m376-mqjq. This link is maintained to preserve external references.\n\n## Original Description\njoi (npm package `joi`, hapi.js) versions \u003e=17.2.0 \u003c17.13.7 and \u003e=18.0.0 \u003c18.2.6 are vulnerable to regular expression denial of service in the `Joi.string().isoDate()` validation rule. One of the regular expressions the rule applies to the input is unanchored, so a valid ISO date followed by a long run of fractional-second digits causes the regex engine to restart its search from every position in the string, yielding time proportional to the square of the input length (about 1.4 s for 64 KB of digits and about 22 s for 256 KB). A remote attacker who can supply a string to an isoDate validation can stall the application with a single request. Fixed in 17.13.7 and 18.2.6; as a workaround, cap the length of the string before it reaches joi.","status":"withdrawn","published":"2026-09-17T00:31:27Z","modified":"2026-10-05T23:30:50Z","cvss":[{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-1333"],"updated_at":"2026-11-02T14:41:27.036917Z"}],"nvd":[{"id":"CVE-2026-92599","description":"joi (npm package `joi`, hapi.js) versions \u003e=17.2.0 \u003c17.13.7 and \u003e=18.0.0 \u003c18.2.6 are vulnerable to regular expression denial of service in the `Joi.string().isoDate()` validation rule. One of the regular expressions the rule applies to the input is unanchored, so a valid ISO date followed by a long run of fractional-second digits causes the regex engine to restart its search from every position in the string, yielding time proportional to the square of the input length (about 1.4 s for 64 KB of digits and about 22 s for 256 KB). A remote attacker who can supply a string to an isoDate validation can stall the application with a single request. Fixed in 17.13.7 and 18.2.6; as a workaround, cap the length of the string before it reaches joi.","status":"published","published":"2026-09-16T22:18:30.98Z","modified":"2026-09-22T20:25:55.87Z","cvss":[{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/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","level":"high","assessor":"secondary"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-1333"],"updated_at":"2026-11-02T14:12:49.013904Z"}],"osv":[{"id":"CVE-2026-92599","title":"Joi before 17.13.7 and 18.2.6 ReDoS via isoDate","description":"joi (npm package `joi`, hapi.js) versions \u003e=17.2.0 \u003c17.13.7 and \u003e=18.0.0 \u003c18.2.6 are vulnerable to regular expression denial of service in the `Joi.string().isoDate()` validation rule. One of the regular expressions the rule applies to the input is unanchored, so a valid ISO date followed by a long run of fractional-second digits causes the regex engine to restart its search from every position in the string, yielding time proportional to the square of the input length (about 1.4 s for 64 KB of digits and about 22 s for 256 KB). A remote attacker who can supply a string to an isoDate validation can stall the application with a single request. Fixed in 17.13.7 and 18.2.6; as a workaround, cap the length of the string before it reaches joi.","status":"published","published":"2026-09-16T21:47:03.073Z","modified":"2026-10-28T02:30:43.058662165Z","cvss":[{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high"}],"cwes":["CWE-1333"],"updated_at":"2026-11-02T15:45:20.588039Z"},{"id":"GHSA-6h2x-m376-mqjq","title":"joi: Quadratic regular-expression backtracking in `Joi.string().isoDate()`","description":"### Impact\nAny application that validates a user-supplied string with `Joi.string().isoDate()` can be stalled by a single request. One of the regular expressions the rule runs over the input was unanchored, so a valid ISO date followed by a long run of fractional-second digits made the regex engine restart its search from every position in the string, costing time proportional to the square of the input length. 64 KB of digits costs about 1.4 s and 256 KB about 22 s.\n\n### Patches\nUpgrade to version 17.13.7 or 18.2.6 depending on your current major version.\n\n### Workarounds\nNone except capping the length of the string before it reaches joi.","status":"published","published":"2026-09-29T18:07:42Z","modified":"2026-10-05T23:45:07.542652334Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"},{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high"}],"cwes":["CWE-1333"],"updated_at":"2026-11-02T15:46:39.618611Z"},{"id":"GHSA-mrx9-2rrp-rhpx","title":"Duplicate Advisory: joi: Quadratic regular-expression backtracking in `Joi.string().isoDate()`","description":"## Duplicate Advisory\n\nThis advisory has been withdrawn because it is a duplicate of GHSA-6h2x-m376-mqjq. This link is maintained to preserve external references.\n\n## Original Description\njoi (npm package `joi`, hapi.js) versions \u003e=17.2.0 \u003c17.13.7 and \u003e=18.0.0 \u003c18.2.6 are vulnerable to regular expression denial of service in the `Joi.string().isoDate()` validation rule. One of the regular expressions the rule applies to the input is unanchored, so a valid ISO date followed by a long run of fractional-second digits causes the regex engine to restart its search from every position in the string, yielding time proportional to the square of the input length (about 1.4 s for 64 KB of digits and about 22 s for 256 KB). A remote attacker who can supply a string to an isoDate validation can stall the application with a single request. Fixed in 17.13.7 and 18.2.6; as a workaround, cap the length of the string before it reaches joi.","status":"withdrawn","published":"2026-09-17T00:31:27Z","modified":"2026-10-05T23:45:07.572540444Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"},{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"high"}],"cwes":["CWE-1333"],"updated_at":"2026-11-02T15:46:52.170928Z"},{"id":"RHSA-2026:68778","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update","status":"published","published":"2026-09-22T10:19:31Z","modified":"2026-10-17T10:18:42Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T15:53:22.406388Z"},{"id":"RHSA-2026:68821","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update","status":"published","published":"2026-09-22T10:19:32Z","modified":"2026-10-20T10:14:20Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T15:53:22.406388Z"},{"id":"RHSA-2026:68926","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update","status":"published","published":"2026-09-22T10:19:34Z","modified":"2026-10-16T10:23:45Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T15:53:22.406388Z"},{"id":"CLSA-2026-1790719586","title":"TuxCare security update for joi (1 CVE)","description":"TuxCare rebuilt joi to address 1 CVE. Fixed in 17.13.6-tuxcare.1.","status":"published","published":"2026-09-29T22:06:26Z","modified":"2026-10-15T09:47:57.444356284Z","updated_at":"2026-11-02T15:43:48.65893Z"},{"id":"CLSA-2026-1792510126","title":"TuxCare security update for joi (4 CVEs)","description":"TuxCare rebuilt joi to address 4 CVEs. Fixed in 17.13.4-tuxcare.1.","status":"published","published":"2026-10-20T15:28:46Z","modified":"2026-10-20T19:30:18.883518642Z","updated_at":"2026-11-02T15:43:54.378946Z"},{"id":"ROOT-APP-NPM-CVE-2026-92599","title":"CVE-2026-92599 in joi - Patched by Root","description":"Root has patched CVE-2026-92599 in the joi package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-10-14T05:25:15Z","modified":"2026-10-14T06:15:03.270382262Z","updated_at":"2026-11-02T15:53:27.649662Z"},{"id":"ROOT-APP-NPM-GHSA-6h2x-m376-mqjq","title":"GHSA-6h2x-m376-mqjq in joi - Patched by Root","description":"Root has patched GHSA-6h2x-m376-mqjq in the joi package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-10-14T05:25:15Z","modified":"2026-10-14T06:15:03.294432992Z","updated_at":"2026-11-02T15:53:27.940619Z"}]}}
