jxl-oxide: `FrameBuffer::new` creates out-of-bounds slices on overflowGHSA-66m8-c62j-h6v5
MEDIUMGHSA-66m8-c62j-h6v5 is a medium-severity (CVSS 6.2) vulnerability in jxl-oxide. A fix is available for jxl-oxide — see the affected versions and patch details below.
Real-World Exposure
jxl-oxideReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects crates.io packages — download data is not available via public APIs for these ecosystems.
Description
Summary
jxl-oxide exposes a public safe API that can construct an undersized FrameBuffer due to unchecked usize multiplication, which immediately trigger panic while initializing the buffer in normal decoding path.
Additionally, calling the safe grouped buffer accessors afterward can create invalid oversized slices from a much smaller allocation, causing undefined behavior; however normal decoding path never reaches UB, because these methods are never used within jxl-oxide.
Impact
On 32-bit platforms this can cause panic by accessing out-of-range indices, making it a DoS vulnerability.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🦀crates.io | jxl-oxide | all versions | 0.12.6cargo update -p jxl-oxide --precise 0.12.6 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for jxl-oxide, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update jxl-oxide to 0.12.6 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-66m8-c62j-h6v5 is resolved across your whole dependency graph.
Workarounds
Cap what an attacker can consume: apply request size, rate and timeout limits in front of the affected component, and run it with memory and CPU limits so exhaustion degrades one worker rather than the whole service.
Frequently Asked Questions
Is GHSA-66m8-c62j-h6v5 in your dependencies?
Find it across crates.io, including transitive dependencies.