CVE-2025-69873: High severity npm/ajv vulnerability
ajv (Another JSON Schema Validator) before 8.18.0 is vulnerable to Regular Expression Denial of Service (ReDoS) when the $data option is enabled. The pattern keyword accepts runtime data via JSON Pointer syntax ($data reference), which is passed directly to the JavaScript RegExp() constructor without validation. An attacker can inject a malicious regex pattern (e.g., "^(a|a)$") combined with crafted input to cause catastrophic backtracking. A 31-character payload causes approximately 44 seconds of CPU blocking, with each additional character doubling execution time. This enables complete denial of service with a single HTTP request against any API using ajv with $data: true for dynamic schema validation. This issue is also fixed in version 6.14.0.
Other sources
ajv (Another JSON Schema Validator) through version 8.17.1 is vulnerable to Regular Expression Denial of Service (ReDoS) when the $data option is enabled. The pattern keyword accepts runtime data via JSON Pointer syntax ($data reference), which is passed directly to the JavaScript RegExp() constructor without validation. An attacker can inject a malicious regex pattern (e.g., \"^(a|a)$\") combined with crafted input to cause catastrophic backtracking. A 31-character payload causes approximately 44 seconds of CPU blocking, with each additional character doubling execution time. This enables complete denial of service with a single HTTP request against any API using ajv with $data: true for dynamic schema validation.
— GitHub
ajv (Another JSON Schema Validator) through version 8.17.1 is vulnerable to Regular Expression Denial of Service (ReDoS) when the $data option is enabled. The pattern keyword accepts runtime data via JSON Pointer syntax ($data reference), which is passed directly to the JavaScript RegExp() constructor without validation. An attacker can inject a malicious regex pattern (e.g., "^(a|a)$") combined with crafted input to cause catastrophic backtracking. A 31-character payload causes approximately 44 seconds of CPU blocking, with each additional character doubling execution time. This enables complete denial of service with a single HTTP request against any API using ajv with $data: true for dynamic schema validation.
— Red Hat
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/ajvto a version that resolves this vulnerability.Fixed in 8.18.0 - Upgrade
Upgrade
npm/ajvto a version that resolves this vulnerability.Fixed in 6.14.0 - Upgrade
Upgrade
ajv (Another JSON Schema Validator)to a version that resolves this vulnerability.Fixed in 8.18.0 - Compensating control
If you cannot upgrade immediately, do not enable the `ajv` `$data` option for dynamic schema validation, since vulnerability occurs when `$data` is enabled.
Event History
Frequently Asked Questions
What is the severity of CVE-2025-69873?
CVE-2025-69873 is classified as a high-severity vulnerability due to its potential for Regular Expression Denial of Service (ReDoS).
What software versions are affected by CVE-2025-69873?
CVE-2025-69873 affects ajv versions up to and including 8.17.1.
How do I fix CVE-2025-69873?
To mitigate CVE-2025-69873, upgrade ajv to version 8.18.0 or later.
What type of vulnerability is CVE-2025-69873?
CVE-2025-69873 is a Regular Expression Denial of Service (ReDoS) vulnerability.
What enables the vulnerability in CVE-2025-69873?
The vulnerability in CVE-2025-69873 is enabled when the '$data' option is activated in ajv.