← Back to Feed CACHED · 2026-08-26 07:39:03 · CACHE_KEY CVE-2026-38076
CVE-2026-38076 · CWE-190 · Disclosed 2026-07-09

An integer overflow in the jbig2_arith_iaid_ctx_new

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Handing someone a rigged fax page that jams the printer but never picks the lock

CVE-2026-38076 is an integer overflow (CWE-190) in jbig2_arith_iaid_ctx_new() within Artifex's jbig2dec library — a JBIG2 image-compression decoder bundled inside Ghostscript and MuPDF. A crafted JBIG2 stream (typically embedded in a PDF) triggers a signed integer overflow in the SBSYMCODELEN decoding loop, causing an out-of-bounds memory access and an application crash. All versions of jbig2dec prior to commit cc37d09 are affected. On Ubuntu, fixes ship as 0.20-1ubuntu0.26.04.1 (26.04 LTS), 0.20-1ubuntu0.24.04.1 (24.04 LTS), and 0.19-3ubuntu0.1 (22.04 LTS). The impact ceiling is Denial of Service only — the CVSS vector explicitly scores C:N/I:N/A:H.

The vendor severity of HIGH (7.5) is inflated for most enterprise environments. The CVSS vector claims AV:N/AC:L/PR:N/UI:N, implying a trivially reachable unauthenticated network service — but jbig2dec is a file-parsing library, not a listening daemon. An attacker must deliver a malicious PDF to a process that calls jbig2dec (Ghostscript CLI, MuPDF viewer, a document-conversion pipeline). In practice this means phishing a user into opening a PDF, or uploading a poisoned document to a server-side converter. The blast radius is a single process crash with no persistence, no code execution, and no data exfiltration. Vendor severity treats this as a network-facing availability nuke; reality says it's a file-based application crash.

"DoS-only integer overflow in a PDF codec library — crashes apps, never pops shells."
02 · The Attack Path

3 steps from start to impact.

STEP 01

Craft malicious JBIG2 stream

The attacker constructs a PDF containing a JBIG2 image stream with a manipulated SBSYMCODELEN value large enough to trigger a signed integer overflow when jbig2_arith_iaid_ctx_new() allocates the arithmetic integer decoding context. No specialized tooling beyond a hex editor and PDF structure knowledge is required. No public weaponized PoC exists as of 2026-08-26.
Conditions required:
  • Knowledge of JBIG2 spec (ITU T.88) and PDF embedding format
Where this breaks in practice:
  • No public PoC or weaponized exploit available
  • JBIG2 is an obscure compression format — attacker needs niche expertise
STEP 02

Deliver crafted PDF to victim

The PDF must reach a process that invokes jbig2dec — either a user opening it in MuPDF, a print spool running Ghostscript, or a server-side document-conversion pipeline (e.g., LibreOffice with Ghostscript backend, ImageMagick delegates). Delivery channels include email attachment, web upload, or file-share drop.
Conditions required:
  • Victim environment processes PDFs through Ghostscript or MuPDF
  • File reaches a jbig2dec code path (PDF must contain a JBIG2 stream, not just any image)
Where this breaks in practice:
  • Email gateways with sandboxing will detonate and catch the crash pre-delivery
  • Many PDF renderers (Chrome, Adobe Reader, Firefox) use their own JBIG2 decoders, not jbig2dec
  • Server-side converters may run in sandboxed containers limiting blast radius to one request
Detection/coverage: ClamAV and YARA rules can match malformed JBIG2 headers; Ghostscript logs the crash to stderr
STEP 03

Integer overflow triggers OOB read and crash

When the vulnerable jbig2_arith_iaid_ctx_new() function processes the oversized SBSYMCODELEN, it overflows, allocates an undersized buffer, and the subsequent jbig2_arith_iaid_decode() reads out of bounds. The process crashes with a segfault. There is no evidence of attacker-controlled write or code execution — the impact terminates at a DoS of the consuming application.
Conditions required:
  • Vulnerable jbig2dec version (pre-commit cc37d09) is linked by the parsing application
Where this breaks in practice:
  • Modern allocators (glibc hardened, jemalloc) and ASLR make pivoting from OOB read to RCE extremely unlikely
  • Crash is per-process; a systemd-managed service auto-restarts
  • No persistence or lateral movement capability
Detection/coverage: Process crash generates a core dump; monitoring for repeated Ghostscript segfaults is straightforward
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Not listed in CISA KEV. No known campaigns or threat-actor usage as of 2026-08-26.
Proof-of-conceptNone weaponized. A GitHub Gist by dkjsone describes the bug and names the commit, but contains no exploit code or sample file.
EPSS0.00609 (~top 30%) — low predicted exploitation probability within 30 days.
KEV statusNot listed. No CISA Known Exploited Vulnerabilities entry.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — 7.5 HIGH. Network vector is misleading for a file-parsing library; the real prerequisite is file delivery, not open-port access.
Affected versionsAll jbig2dec versions prior to commit cc37d0931aa71582f7128736a068c92cd8712d9b. Includes jbig2dec ≤ 0.20 as shipped, and the jbig2dec copy bundled in Ghostscript ≤ 10.x and MuPDF.
Fixed versionsCommit cc37d09 in upstream jbig2dec. Ubuntu backports: 0.20-1ubuntu0.26.04.1 (26.04), 0.20-1ubuntu0.24.04.1 (24.04), 0.19-3ubuntu0.1 (22.04). Check your distro tracker for RHEL/Debian/SUSE equivalents.
Scanning / exposure dataNot applicable — jbig2dec is a library, not a network service. Shodan/Censys/GreyNoise have no relevant exposure data.
Disclosure date2026-07-09 (CVE published). Reserved 2026-04-06.
Researcher / reporterCredited to Zeng Yunxiang and Song Jiaxuan per USN-8582-1.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.3/10)

The single most decisive factor for the downgrade is DoS-only impact ceiling with no code-execution path — the CVSS vector scores C:N/I:N/A:H, and no researcher or vendor has demonstrated any ability to pivot the OOB read into arbitrary code execution. An attacker who lands this bug crashes one process, one time, with no persistence, no lateral movement, and no data exposure.

HIGH Vulnerability existence and DoS impact
HIGH No code-execution path beyond crash
MEDIUM Completeness of downstream distro patching status

Why this verdict

  • DoS-only ceiling: The integer overflow leads to an OOB read and process crash. CVSS explicitly marks C:N/I:N/A:H. No write primitive, no RCE, no data leak. This alone caps real-world severity well below the HIGH threshold for most enterprises.
  • File-delivery prerequisite misrepresented by CVSS AV:N/UI:N: jbig2dec is a library, not a listening service. Exploitation requires delivering a crafted PDF to a Ghostscript/MuPDF consumer — email, web upload, or file share. This is functionally UI:R or at minimum requires a document-processing pipeline, not raw network access.
  • No weaponization: Zero public PoCs, no exploit kits, no threat-actor campaigns, EPSS 0.006, no KEV listing. The attack remains theoretical.
  • Role multiplier: (a) *Low-value role* — desktop MuPDF user: crash a viewer, user reopens another PDF reader. Blast radius: single process. (b) *Typical role* — server-side Ghostscript in a document-conversion pipeline: crash one conversion job; systemd restarts the service in seconds. Blast radius: single request. (c) *High-value role* — print server or document-ingestion gateway: repeated poisoned PDFs could degrade availability, but the process restarts and there is no escalation to host, domain, or fleet compromise. jbig2dec is not an identity provider, hypervisor, backup agent, or network edge appliance. No high-value-role scenario produces domain takeover or fleet compromise, so the HIGH floor does not engage.

Why not higher?

To reach HIGH, the bug would need a demonstrated code-execution path, active exploitation, or deployment in a component where a crash itself constitutes fleet-scale impact (e.g., a kernel-mode agent or domain controller). None of those conditions are met. The impact ceiling is a single-process crash with automatic recovery, and there is zero evidence of weaponization or in-the-wild use.

Why not lower?

Despite the friction, jbig2dec *is* bundled in Ghostscript, which is installed on a significant fraction of Linux servers — document pipelines, print infrastructure, and CI systems all use it. A motivated attacker who can upload PDFs to a conversion endpoint can reliably crash it. The bug is trivially reproducible once a sample file is crafted, and the upstream fix references a real, confirmed integer overflow. LOW would understate the availability risk to document-processing infrastructure.

05 · Compensating Control

What to do — in priority order.

  1. Disable JBIG2 decoding in Ghostscript if not needed — Set -dNOJBIG2 on Ghostscript command lines or policy files. Most enterprise PDF workloads use DCT/Flate, not JBIG2. This eliminates the code path entirely. No mitigation SLA applies at MEDIUM — go straight to your 365-day remediation window.
  2. Sandbox document-processing pipelines — Run Ghostscript and MuPDF inside containers or nsjail/bubblewrap with seccomp profiles. A crash stays contained to one ephemeral container, and the orchestrator respawns it. This is defense-in-depth for all file-parsing bugs, not just this one.
  3. Rate-limit and deduplicate PDF submissions — If you run a document-ingestion API, apply per-client rate limits and hash-based dedup. This prevents an attacker from repeatedly crashing the converter with the same payload to sustain a DoS.
  4. Apply distro patches when available — Ubuntu has shipped fixes via USN-8582-1. RHEL, Debian, and SUSE typically follow within weeks. Use your normal patching cycle — no emergency window needed for a MEDIUM.
What doesn't work
  • WAF / IPS signatures — JBIG2 streams are binary blobs inside PDF objects; signature-based inspection cannot reliably detect a malformed SBSYMCODELEN value without full PDF parsing, which most WAFs do not perform.
  • Network segmentation — jbig2dec is not a network service. Segmentation doesn't prevent a crafted PDF from reaching a Ghostscript process via email, file share, or API upload.
  • Address-space hardening (ASLR, stack canaries) — these mitigate RCE, but the bug is a DoS crash. The process dies regardless of ASLR state.
06 · Verification

Crowdsourced verification payload.

Run this on any Linux host where Ghostscript or jbig2dec is installed. No special privileges needed. Example: bash check_cve_2026_38076.sh

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_38076.sh — Detect vulnerable jbig2dec (CVE-2026-38076)
# Run on target host. No root required.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

# Ubuntu/Debian fixed versions per USN-8582-1
# 26.04: 0.20-1ubuntu0.26.04.1
# 24.04: 0.20-1ubuntu0.24.04.1
# 22.04: 0.19-3ubuntu0.1

check_dpkg() {
  local pkg="libjbig2dec0"
  if dpkg -s "$pkg" >/dev/null 2>&1; then
    local installed
    installed=$(dpkg-query -W -f='${Version}' "$pkg" 2>/dev/null)
    echo "[*] Found $pkg version: $installed"
    # Check if version contains ubuntu patch suffix
    if echo "$installed" | grep -qE 'ubuntu0\.(26|24)\.04\.1|0\.19-3ubuntu0\.1|0\.2[1-9]'; then
      echo "PATCHED — $pkg $installed includes fix for CVE-2026-38076"
      exit 0
    else
      echo "VULNERABLE — $pkg $installed is likely affected by CVE-2026-38076"
      exit 1
    fi
  fi
  return 1
}

check_rpm() {
  local pkg="jbig2dec"
  if rpm -q "$pkg" >/dev/null 2>&1; then
    local installed
    installed=$(rpm -q --qf '%{VERSION}-%{RELEASE}' "$pkg" 2>/dev/null)
    echo "[*] Found $pkg version: $installed"
    echo "UNKNOWN — check your distro advisory for CVE-2026-38076 fix status"
    exit 2
  fi
  if rpm -q "jbig2dec-libs" >/dev/null 2>&1; then
    local installed
    installed=$(rpm -q --qf '%{VERSION}-%{RELEASE}' "jbig2dec-libs" 2>/dev/null)
    echo "[*] Found jbig2dec-libs version: $installed"
    echo "UNKNOWN — check your distro advisory for CVE-2026-38076 fix status"
    exit 2
  fi
  return 1
}

check_binary() {
  if command -v jbig2dec >/dev/null 2>&1; then
    local ver
    ver=$(jbig2dec --version 2>&1 | head -1 || true)
    echo "[*] jbig2dec binary version: $ver"
    echo "UNKNOWN — cannot confirm patch status from binary version alone"
    exit 2
  fi
  return 1
}

echo "=== CVE-2026-38076 Check (jbig2dec integer overflow) ==="

if check_dpkg 2>/dev/null; then exit; fi
if check_rpm 2>/dev/null; then exit; fi
if check_binary 2>/dev/null; then exit; fi

# Check if Ghostscript bundles jbig2dec
if command -v gs >/dev/null 2>&1; then
  gsver=$(gs --version 2>/dev/null || echo "unknown")
  echo "[*] Ghostscript $gsver found — may bundle vulnerable jbig2dec"
  echo "UNKNOWN — Ghostscript bundles jbig2dec internally; check vendor advisory"
  exit 2
fi

echo "[*] No jbig2dec or Ghostscript installation detected"
echo "PATCHED — jbig2dec not installed on this host"
exit 0
07 · Bottom Line

If you remember one thing.

TL;DR
This is a MEDIUM (5.3) DoS-only bug in a PDF codec library. There is no code execution, no data exposure, and no active exploitation. Per the noisgate remediation SLA for MEDIUM, you have 365 days to apply the vendor patch — there is no mitigation SLA for MEDIUM, so go straight to your normal patching cadence. If you run Ghostscript-based document conversion pipelines, prioritize those hosts within your next monthly patch cycle as a courtesy to availability SLOs. For everyone else, queue it in your backlog. If you want to derisk immediately, pass -dNOJBIG2 to Ghostscript or containerize your PDF processors — but don't burn a change window on this.

Sources

  1. Ubuntu Security Notice USN-8582-1
  2. CVE-2026-38076 disclosure gist (dkjsone)
  3. CERT/CC VU#951662 — MuPDF integer overflow
  4. CVE-2026-38076 — THREATINT
  5. ArtifexSoftware/jbig2dec GitHub repository
  6. Ghostscript third-party library dependencies
  7. jbig2dec CVE history — CVEDetails
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.