---
id: "CVE-2026-117680"
kind: "vulnerability"
aliases: ["CVE-2026-117680"]
title: "jsv (Elixir): regex backtracking limit lets crafted data bypass schema validation"
severity: "low"
cvss: 2.1
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["elixir", "json-schema", "jsv", "package"]
not_affected_if: ["fixed-schemas", "linear-regex-only", "no-untrusted-input"]
published_at: "2026-11-01T14:18:51+00:00"
first_seen_at: "2026-11-01T14:20:23+00:00"
updated_at: "2026-11-01T14:22:12+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-117680", "first_seen_at": "2026-11-01T14:20:23+00:00"}]
---

# jsv (Elixir): regex backtracking limit lets crafted data bypass schema validation

The jsv Elixir JSON Schema validator treats a regex that runs out of its backtracking budget the same as a regex that does not match, so a crafted string can slip past pattern, patternProperties, and not checks. An unauthenticated attacker who controls the data sent to a schema with a catastrophic-backtracking regex can get invalid data accepted.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the jsv version in `mix.lock` or `mix deps` and see whether it is below `0.26.2`.
- Search your schemas for `pattern` or `patternProperties` regexes with nested quantifiers or alternations that could backtrack heavily.

## Fix

- `jsv` `0.26.2` or later (fixed version per the source ranges: from 0.1.0 before 0.26.2)

## Timeline

- 2026-11-01T14:20:23+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-117680

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
