jsv treats regex match budget exhaustion as a non-match, bypassing patternProperties and not
Affects jsv from 0.1.0 before 0.26.2, only for schemas whose regex explores a catastrophic branch before the matching branch. Fixed in 0.26.2.
Written by anthropic/claude-haiku-5.5 from the sources below. Verify against them.
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- Published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- A 0-100 score for how much a CVE matters across the industry: exploitation, exposure, how widely the software is used, severity and whether a fix exists.What do these mean? →
- 7/100 · provisional
- How many real-world setups can hit the bug, from the vendor's advisory and CISA data. It does not know your setup.What do these mean? →
- Specific setups only
- Fix
- Fixed in 0.26.2
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
The jsv JSON Schema validation library for Elixir is affected. A specially crafted string can make a schema regex run out of its matching budget, which causes jsv to treat the match as a failure and accept data it should reject.
Read the original description
Improper Check for Unusual or Exceptional Conditions vulnerability in the pattern and patternProperties keywords in lud jsv allows an unauthenticated remote attacker to bypass schema validation via a string that matches a schema regex only after heavy backtracking. JSV.Helpers.RegexExt.bounded_match?/2 runs schema regexes with a backtracking budget but calls :re.run/3 without :report_errors, so a match that exhausts the budget returns the same :nomatch as a real non-match. A key that matches a patternProperties regex is then checked against additionalProperties or not at all, and a string that matches a not subschema with a pattern is accepted. Before the budget existed, Regex.match?/2 failed the same way at Erlang's default match limit. Only schemas whose regex explores a catastrophic branch before the branch that matches are affected. The attacker controls the data, not the schema, and linear patterns never exhaust the budget. This issue affects jsv: from 0.1.0 before 0.26.2.
What to do
Check whether your setup matches what the bug needs.
The schema must contain a pattern or patternProperties regex that can match only after exploring a catastrophic branch first. Affects jsv from 0.1.0 before 0.26.2.Upgrade to a fixed version: 0.26.2.
Workaround: Pair patternProperties with additionalProperties: false, so keys whose match exhausts the budget are rejected instead of accepted unchecked.
Timeline
- CVE published
- First seen by cve.now
Affected versions
- jsv
From 0.1.0 · fixed in 0.26.2
- lud/jsv
Version range not reported
Evidence 5
- Advisory
- Patch
- Repository
- Link
- Link
Corrections
None so far.
Something wrong on this page? Report an error. Every fix is listed here.
Questions about CVE-2026-117680
What does this mean?
When a regex match runs out of its work budget, jsv treats the key as a non-match instead of reporting a failure. A value under a patternProperties key can then skip its subschema, and a string can pass a not deny-list pattern.Source: github.com
Am I affected, and how do I check?
jsv versions from 0.1.0 before 0.26.2 are affected, but only with schemas containing a pattern or patternProperties regex that explores a catastrophic branch before the branch that matches. Check the installed jsv version and review schemas that use such regexes.Source: github.com
What should I do about it?
Upgrade jsv to 0.26.2, the fixed version.Source: github.com
Is it being exploited?
It is not in CISA's Known Exploited Vulnerabilities catalog, and CISA's SSVC assessment does not mark exploitation as active. That does not mean it has not been attacked: vendors and researchers can report attacks before CISA lists them. No public exploit code is tracked.Source: cve.now feed data
Why do the sources disagree?
The description says an unauthenticated remote attacker can exploit this, but the CVSS vector records the attack vector as local (AV:L). The sources conflict on the attack vector.Source: github.com