oss-sec mailing list archives

Re: 7 vulnerabilities disclosed & patched in jq


From: Collin Funk <collin.funk1 () gmail com>
Date: Wed, 15 Apr 2026 17:21:42 -0700

Alan Coopersmith <alan.coopersmith () oracle com> writes:

https://github.com/jqlang/jq/security/advisories/GHSA-xwrw-4f8h-rjvg states:
Unbounded Recursion in jv_setpath() / jv_getpath() / delpaths_sorted()
Affected versions:  <= 1.8.1
Summary
-------
The jv_setpath(), jv_getpath(), and delpaths_sorted() functions in
src/jv_aux.c use unbounded recursion where the recursion depth equals the
length of a caller-supplied path array. There is no depth limit check.
When a path array with ~60,000 or more elements is supplied — either constructed
by a jq filter expression or provided directly in attacker-controlled JSON input
— the C call stack is exhausted, causing a segmentation fault (SIGSEGV) and
immediate process crash.
This vulnerability bypasses the MAX_PARSING_DEPTH (10,000) limit
that protects
the JSON parser, because path arrays can be constructed programmatically to
arbitrary lengths without being constrained by parsing depth. Critically, the
path array can be sourced entirely from attacker-controlled JSON input, making
this exploitable in scenarios where a trusted jq filter processes untrusted data.

[See GHSA for code analysis and PoC]
Impact
------
- Denial of Service (Crash): Any jq process that calls setpath, getpath, or
  delpaths with a sufficiently long path array will crash with SIGSEGV.
  This is an unrecoverable crash — no error handling is possible.
- Bypass of existing depth limits: The JSON parser's MAX_PARSING_DEPTH (10,000)
  does not protect against this because path arrays are constructed at the jq
  runtime level, not during JSON parsing. An attacker can embed a flat array
  of 65,000 integers in a JSON document (only ~200 KB) that causes a crash
  when used as a path.
- Affected real-world scenarios:
  - Web services using jq to transform or extract data from user-submitted JSON
  - CI/CD pipelines processing untrusted configuration or API responses with jq
  - Shell scripts that use setpath/getpath/delpaths on paths derived from input
    data
  - Any application embedding libjq where path arguments can be influenced by
    external input
- Note: Unlike memory corruption vulnerabilities, stack overflow from recursion
  is generally not exploitable for code execution on modern systems with guard
  pages. The impact is limited to denial of service.
Severity: Moderate - 6.2 / 10
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
CVE ID: CVE-2026-33947
Weaknesses: CWE-674 Uncontrolled Recursion
Credits: @bg0d-glitch

https://github.com/jqlang/jq/commit/fb59f1491058d58bdc3e8dd28f1773d1ac690a1f
declares that it fixes CVE-2026-33947.

I can see the argument that this a vulnerability if it actually affects
libjq.

However, I hope it does not become a trend to file CVEs for any stack
overflow in command-line programs. Generally the only way to work around
that is to force the developer to place arbitrary limits on their
program. Note that some systems may have a small stack which crashes
before hitting the limit added in the fixed commit.

Collin


Current thread: