CVE-2026-54592
Description
Oj (Optimized JSON) is a JSON parser and Object marshaller packaged as a Ruby gem. In versions prior to 3.17.3, Oj::Doc#each_child, when invoked recursively over a deeply nested JSON document, overflows a fixed-size stack buffer and aborts the process, leading to DoS. In a two-step chain in ext/oj/fast.c, doc_each_child increments doc->where past the where_path[MAX_STACK = 100] array with no bounds check and never restores it (the doc->where-- is missing), so calling each_child recursively from inside the yield block drives doc->where beyond the array. On the next entry the function copies the path into the 800-byte stack-local buffer save_path[MAX_STACK] using wlen = doc->where - doc->where_path, so when the previous recursive call left doc->where past where_path[100] the wlen exceeds MAX_STACK and the memcpy overflows save_path on the C stack; because the Oj::Doc parser imposes no JSON nesting-depth limit (relying on a C-stack pressure check), deeply nested attacker input reaches this path. This issue has been fixed in version 3.17.3.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
ojRubyGems | < 3.17.3 | 3.17.3 |
Affected products
26- osv-coords25 versionspkg:apk/wolfi/ruby3.3-fluentd-kubernetes-daemonset-1.18-kinesispkg:apk/wolfi/ruby3.2-fluentd-kubernetes-daemonset-1.18-kinesispkg:apk/wolfi/ruby3.4-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/chainguard/ruby3.2-kube-logging-operator-fluentd-outputspkg:apk/chainguard/ruby3.2-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/chainguard/ruby3.4-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/wolfi/ruby3.2-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/chainguard/ruby3.2-fluentd-kubernetes-daemonset-1.18-kinesispkg:apk/chainguard/ruby3.4-fluentd-kubernetes-daemonset-1.18-kinesispkg:apk/chainguard/ruby4.0-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/wolfi/ruby3.4-fluentd-kubernetes-daemonset-1.18-kinesispkg:apk/chainguard/ruby3.3-fluentd-kubernetes-daemonset-1.17-kinesispkg:apk/chainguard/ruby3.2-fluentd-kubernetes-daemonset-1.17-kinesispkg:apk/chainguard/ruby3.4-fluentd-kubernetes-daemonset-1.16-kinesispkg:apk/chainguard/ruby4.0-fluentd-kubernetes-daemonset-1.18-kinesispkg:apk/chainguard/ruby4.0-fluentd-kubernetes-daemonset-1.16-kinesispkg:apk/wolfi/ruby3.2-kube-logging-operator-fluentd-outputspkg:apk/wolfi/ruby3.3-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/chainguard/ruby3.3-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/chainguard/ruby3.4-kube-logging-operator-fluentd-outputspkg:apk/wolfi/ruby3.4-kube-logging-operator-fluentd-outputspkg:apk/wolfi/ruby4.0-fluentd-kubernetes-daemonset-1.19-kinesispkg:apk/chainguard/ruby3.3-fluentd-kubernetes-daemonset-1.18-kinesispkg:apk/chainguard/ruby3.3-fluentd-kubernetes-daemonset-1.16-kinesispkg:apk/chainguard/ruby3.2-fluentd-kubernetes-daemonset-1.16-kinesis
< 1.18.0.1.5-r4+ 24 more
- (no CPE)range: < 1.18.0.1.5-r4
- (no CPE)range: < 1.18.0.1.5-r3
- (no CPE)range: < 1.19.3.1.0-r0
- (no CPE)range: < 6.7.0-r4
- (no CPE)range: < 1.19.2.1.1-r5
- (no CPE)range: < 1.19.3.1.0-r0
- (no CPE)range: < 1.19.2.1.1-r5
- (no CPE)range: < 1.18.0.1.5-r3
- (no CPE)range: < 1.18.0.1.5-r3
- (no CPE)range: < 1.19.3.1.0-r0
- (no CPE)range: < 1.18.0.1.5-r3
- (no CPE)range: < 1.17.1.1.2-r9
- (no CPE)range: < 1.17.1.1.2-r10
- (no CPE)range: < 1.16.11.1.0-r2
- (no CPE)range: < 1.18.0.1.5-r3
- (no CPE)range: < 1.16.11.1.0-r4
- (no CPE)range: < 6.7.0-r4
- (no CPE)range: < 1.19.3.1.0-r0
- (no CPE)range: < 1.19.3.1.0-r0
- (no CPE)range: < 6.7.0-r4
- (no CPE)range: < 6.7.0-r4
- (no CPE)range: < 1.19.3.1.0-r0
- (no CPE)range: < 1.18.0.1.5-r4
- (no CPE)range: < 1.16.11.1.0-r3
- (no CPE)range: < 1.16.11.1.0-r3
Patches
Vulnerability mechanics
References
2News mentions
0No linked articles in our index yet.