Skip to main content

klauspost/compress EUVDEUVD-2026-110497

| CVE-2026-116591 HIGH
Integer Overflow or Wraparound (CWE-190)
2026-10-26 GitHub_M GHSA-fpmh-frq8-7rj8
8.7
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify endpoint decompressing untrusted zstd
  2. Delivery
    Submit crafted two-block zstd frame
  3. Exploit
    int16 count overflow bypasses FSE table validation
  4. Execution
    Stale cross-block table state yields out-of-range index
  5. Impact
    Decoder goroutine panics, process crashes

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Integer overflow checks
MITRE ATT&CK

1 technique across 1 tactic: Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The application must decompress untrusted, attacker-controlled zstd data using a vulnerable klauspost/compress version (≤ 1.20.1) through zstd.DecodeAll or the streaming decoder - these are the standard, default decode paths, so no non-default configuration is needed. No authentication (PR:N), user interaction (UI:N), or special attack requirement (AT:N) is required, and the crash occurs against default decoder settings. The practical LIMITING factor is exposure rather than configuration: the attacker needs a reachable path that feeds untrusted zstd bytes into the decoder, and impact is confined to crashing the processing goroutine/process (availability only; no confidentiality or integrity effect). The specific trigger is a crafted two-block frame whose second block carries an FSE normalized count of 32768 that wraps to -32768 in int16 and reuses stale decode-table state from the first block - both blocks are required, as documented in the advisory.

Impact

This is a genuine but bounded availability risk - a reachable denial-of-service, not a code-execution or data-exposure flaw. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) with VA:H and VC:N/VI:N confirms the only impact is availability: a crafted ~27 KB two-block zstd frame makes DecodeAll and the streaming decoder panic with an out-of-range slice index that the caller cannot recover with normal error handling, so any service that decompresses attacker-controlled zstd input can be crashed. Signals mostly align on 'important but not emergency': EPSS is low (0.33%, 26th percentile), KEV status is NOT present (SSVC Exploitation: none), and SSVC Technical Impact is 'partial' - all consistent with a crash rather than full compromise. The counter-weight is SSVC Automatable: yes (the same crafted bytes trigger the panic deterministically and reliably, with no per-target tuning) and a confirmed working reproducer in the vendor advisory, which is why the vuln.today Decision label is 'this_week' rather than a lower tier. Note the tension to flag explicitly: EPSS/percentile are low and there is no evidence of active exploitation, yet a fully working PoC is public and the bug is trivially automatable - so the low EPSS reflects limited observed scanning, not low exploitability. Priority should be driven by exposure: schedule the update within the week (consistent with the Decision label), prioritizing any service that decompresses untrusted zstd at the network edge.

Exploit ScenarioDerived

An attacker submits a crafted ~27 KB two-block zstd frame to any endpoint that decompresses untrusted zstd input using a vulnerable klauspost/compress version (≤ 1.20.1) via zstd.DecodeAll or the streaming decoder; the malformed Huffman-weight FSE table overflows the decode table and the goroutine panics, crashing the process. A complete, working reproducer is published in the GHSA advisory, so no exploit development is required. Exploitation is remote, unauthenticated (PR:N), requires no user interaction (UI:N), and is low-complexity (AC:L/AT:N), making it reliably repeatable against any default decoder configuration.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 28, 2026

Untrusted zstd input can crash any Go application that decompresses it with klauspost/compress 1.20.1 or earlier: a crafted two-block frame of roughly 27 KB drives the FSE decoder used by huff0.ReadTable into an out-of-range slice index, producing a runtime panic instead of a decode error. Both default decode paths - DecodeAll and the streaming decoder - are affected, and the flaw requires no authentication or user interaction (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H), so impact is availability only; there is no memory corruption, code execution or data exposure. Exploitation is not confirmed (CISA KEV not listed, SSVC exploitation: none), EPSS is a low 0.33%, and a public PoC reference exists in the GitHub advisory as a Go test reproducer; it is not verified as working exploit code beyond that panic reproduction. The vendor ships a fix in 1.20.2, and the issue is assessed as a bounded but genuine denial-of-service, prioritised 'this week'.

RemediationAI

Upgrade to github.com/klauspost/compress v1.20.2, the exact fixed release, for example with 'go get github.com/klauspost/compress@v1.20.2' followed by a dependency-graph rebuild, and confirm no transitive module still pins 1.20.1 or lower; the fix is in commit 7f5d8528720c895a6106f201719f87eb030a565d and details are in advisory GHSA-fpmh-frq8-7rj8 and the v1.20.2 release notes. No configuration-based workaround fully closes the hole, because the vulnerable paths are the default DecodeAll and streaming decoders and the panic cannot be caught through normal error handling; a recover() wrapper around goroutines that decompress untrusted zstd can keep a process alive at the cost of dropping the in-flight request, and rejecting or pre-validating untrusted zstd input at the boundary (size limits, trusted-source-only decompression) reduces exposure but removes functionality. Confirm the running build's actual module version, since the failure only manifests with attacker-supplied two-block frames and will otherwise pass silently.

Affected VersionsENISA

compress < 1.20.2

Affected Packages

go github.com/klauspost/compress/zstd fix: 1.20.2
euvd compress fix: 1.20.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is a CWE-190 integer overflow in the Finite State Entropy (FSE) decoder that the huff0 Huffman-weight table reader uses. FSE table logs are permitted up to 15, so a symbol's normalised count can reach 32768 (2^15); that count is stored in an int16, where it wraps to -32768, while validation only compares the int32 running totals (remaining and gotTotal) and therefore passes. In buildDtable the wrapped negative value is neither treated as the -1 low-probability marker nor spread, so the loop body never executes and the position != 0 guard succeeds, leaving a table built on top of the previous block's state because huff0 shares one fse.Scratch and allocDtable reuses decTable and ct.stateTable without clearing. At decode time the state advances past the table and d.dt[d.state] panics (index out of range [33077] with length 32768). Both blocks are required: block one leaves the stale state that lets the malformed second table pass the newState >= tableSize guard. The reference C decoder uses short for the count as well but caps FSE tableLog at 12 and the Huffman-weight tableLog at 6, so the count never wraps; huff0.ReadTable did not enforce that 6-bit bound. The upstream fix adds a math.MaxInt16 check in readNCount, corrects validateNorm to charge a -1 count one cell (total++ rather than total -= int(v)), and rejects a weights tableLog above 6 in huff0.ReadTable. The vulnerable module path is go/github.com/klauspost/compress/zstd, and any library or service vendoring it inherits the exposure.

Know when Compress gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Remote unauthenticated decompression of untrusted input (AV:N/PR:N/UI:N), deterministic low-complexity trigger (AC:L), and an unrecoverable panic giving availability-only impact (C:N/I:N/A:H, S:U).

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 26, 2026 - 23:04 EUVD
CVE Published
Oct 26, 2026 - 21:54 cve.org
HIGH 8.7

DescriptionCVE.org

compress provides various compression algorithms. Prior to 1.20.2, the zstd DecodeAll and streaming decoder paths can panic when a crafted two-block frame reaches huff0.ReadTable with an FSE normalized count of 32768 that readNCount stores in int16 as -32768. The wrapped count allows buildDtable to retain stale fse.Scratch decode-table state from the prior block, and nextFast then derives an out-of-range state and indexes beyond the table instead of returning a decode error. Both blocks are required to preserve and then reuse the stale state, allowing untrusted zstd input to crash an application. This issue is fixed in version 1.20.2.

Executive ViewAI

Why It Matters

A high-severity availability vulnerability in the widely used Go compression library klauspost/compress (versions 1.20.1 and earlier) can cause any Go application that decompresses untrusted zstd data to crash with a runtime panic. This directly impacts service uptime and reliability for organizations relying on Go-based services, potentially disrupting operations and customer-facing systems. While no active exploitation has been confirmed, the low attack complexity and public proof-of-concept reference warrant prioritized remediation.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 74% exploitable
Prevalence
High
widely-used Go zstd/compression library embedded in many server applications
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Integer overflow occurs when an arithmetic operation produces a result that exceeds the maximum value a given integer type can store.

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy