Skip to main content

Zalando Skipper CVE-2026-86043

| EUVDEUVD-2026-81002 HIGH
Incorrect Authorization (CWE-863)
2026-09-16 GitHub_M GHSA-5gpm-rgj3-9q76
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Send oversized chunked/HTTP2 request without Content-Length
  2. Exploit
    Skipper truncates body but signals truncated_body=false
  3. Execution
    OPA policy authorizes truncated prefix
  4. Impact
    Full oversized body forwarded to protected upstream

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

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

Exploitation Conditions

Requires Skipper deployed with the opaAuthorizeRequestWithBody filter and an Open Policy Agent policy that inspects the request body AND explicitly allows requests when input.truncated_body == false (the recommended prior mitigation for CVE-2026-50197). The attacker must send a body exceeding the configured maxBodyBytes using HTTP/1.1 Transfer-Encoding: chunked or an HTTP/2 request that omits Content-Length, so Skipper's truncated-body signal (derived from Content-Length) reads false. Limiting factors: this is a non-default configuration - installations that do not use OPA body authorization, or whose policies do not key on truncated_body, are unaffected; requests that carry an accurate Content-Length are correctly flagged as truncated and denied.

Impact

This is a genuine unauthenticated remote authorization bypass (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N, CWE-863), but its real-world risk is materially narrower than the 7.5 base score implies because exploitation is heavily gated on a specific, non-default deployment. It only bites when Skipper is configured with the opaAuthorizeRequestWithBody filter AND the Open Policy Agent policy inspects the body and permits requests where input.truncated_body == false - i.e. a policy that already followed the prior CVE-2026-50197 mitigation. No EPSS score, KEV entry, or standalone public exploit was provided, so this is 'no public exploit identified at time of analysis'; however, the fix commit (2cfceabaa6) ships a reproducing test (TestTruncatedBodyChunkedBypass) that demonstrates the bypass, lowering the bar for weaponization. Conflicting signal to verify: the CVSS I:H rates the integrity impact as total, but the actual damage is bounded by what the protected upstream does with an oversized body that slipped past a size/content policy - the base I:H is defensible for a bypassed authorization control but the concrete impact is upstream-dependent. Net: this is a real priority ONLY for shops running Skipper's OPA body-authorization filter with truncation-aware policies; for everyone else it is a high-CVSS-but-low-real-risk item.

Exploit ScenarioDerived

An attacker sends a POST to a Skipper-fronted service using Transfer-Encoding: chunked (or HTTP/2 with no Content-Length) carrying a body larger than maxBodyBytes. Skipper truncates the body to the limit but, because input.truncated_body is derived from the (absent/unreliable) Content-Length rather than the actual read, the OPA policy sees truncated_body == false, evaluates only the truncated prefix, and authorizes the request - after which the full oversized body is forwarded to the protected upstream. A reproducing test case exists in the public fix commit, though no separate weaponized exploit was reported.

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

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

Alert me

AnalysisAIv1 – Sep 16, 2026

Authorization bypass in Zalando Skipper before 0.27.37 lets unauthenticated remote attackers slip an oversized request body past an Open Policy Agent body-inspection policy: when the opaAuthorizeRequestWithBody filter truncates the body at maxBodyBytes, Skipper derives the input.truncated_body signal from Content-Length rather than the bytes actually read, so an HTTP/1.1 chunked or Content-Length-less HTTP/2 request is evaluated by OPA as non-truncated, allowed, and then forwarded in full to the protected upstream (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N, CWE-863). Exploitation is gated on a non-default deployment: the filter must be active and the policy must explicitly allow requests when input.truncated_body == false, the pattern recommended as the prior mitigation for CVE-2026-50197, while installations that do not inspect bodies or do not key on truncated_body are unaffected and requests carrying an accurate Content-Length are correctly flagged as truncated and denied. No public exploit identified at time of analysis.

RemediationAI

Upgrade to Skipper 0.27.37, the release that contains the vendor fix (Vendor-released patch: 0.27.37); the upstream code change is commit 2cfceabaa6ff0af65b312dcb9bcbe84691b9d507, which introduces the x-envoy-auth-partial-body header so policies can trust the truncation signal, and the advisory is at https://github.com/zalando/skipper/security/advisories/GHSA-5gpm-rgj3-9q76. If upgrading is not immediately possible, do not rely on input.truncated_body alone: rewrite OPA policies so that authorization requires a request with a valid Content-Length that is both present and not greater than maxBodyBytes, or reject any request whose body exceeds maxBodyBytes regardless of the truncated_body value; as an alternative compensating control, block Transfer-Encoding: chunked and HTTP/2 requests without Content-Length at the router or edge - the trade-off is that legitimate streaming or chunked uploads and some HTTP/2 clients will break. Lowering maxBodyBytes and enforcing the same body-size limit at the upstream narrows but does not eliminate the bypass window, and disabling the opaAuthorizeRequestWithBody filter removes the exposure at the cost of losing body-based authorization entirely.

Affected VersionsENISA

skipper < 0.27.37

Affected Packages

go github.com/zalando/skipper fix: 0.27.37
euvd skipper fix: 0.27.37

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

Skipper's opaAuthorizeRequestWithBody filter forwards request attributes to an Open Policy Agent external authorization (ext_authz) service for policy evaluation. In filters/openpolicyagent/openpolicyagent.go, ExtractHttpBodyOptionally reads the body and truncates it at the configured maxBodyBytes, but filters/openpolicyagent/internal/envoy/skipperadapter.go copies the original request headers into the ext_authz CheckRequest without adding a Content-Length value that reflects the smaller truncated body. Because the truncated_body input is derived from the Content-Length header rather than the actual read result, a request that omits Content-Length - HTTP/1.1 with Transfer-Encoding: chunked or HTTP/2 without a Content-Length header - presents a false 'not truncated' signal to the policy. A policy that follows the earlier CVE-2026-50197 mitigation, for example 'allow if input.truncated_body == false', then authorizes the request based only on the truncated prefix while Skipper forwards the full oversized body upstream. The root cause is CWE-863 (Incorrect Authorization), a mismatch between the data inspected by the policy and the data delivered to the upstream. The fix in 0.27.37 adds a bodyTruncated boolean to AdaptToExtAuthRequest and sets an x-envoy-auth-partial-body header ('true' or 'false') in the ext_authz request, giving policies a trustworthy truncation signal that is independent of Content-Length.

Know when Skipper 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 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
vuln.today AI 7.5 HIGH

Remote unauthenticated request with attacker-controlled transfer encoding (AV:N/AC:L/PR:N/UI:N); bypasses a body-authorization control so I:H, with no confidentiality or availability impact.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 20:18 EUVD
CVE Published
Sep 16, 2026 - 18:51 cve.org
HIGH 7.5

DescriptionCVE.org

Skipper is an HTTP router and reverse proxy for service composition. Prior to version 0.27.37, the opaAuthorizeRequestWithBody filter can authorize an oversized request after Skipper truncates the body presented to Open Policy Agent because the input.truncated_body signal is derived from Content-Length rather than the actual read result. In filters/openpolicyagent/openpolicyagent.go, ExtractHttpBodyOptionally truncates bodies at maxBodyBytes, while filters/openpolicyagent/internal/envoy/skipperadapter.go copies the request headers without adding a Content-Length value that reflects the truncation. For an HTTP/1.1 request using Transfer-Encoding: chunked or an HTTP/2 request without Content-Length, a body-inspecting policy that follows the prior mitigation and permits input.truncated_body equal to false can evaluate only the truncated prefix, allow the request, and then forward the full oversized body to the protected upstream. This residual issue is distinct from CVE-2026-50197. This issue is fixed in version 0.27.37.

Technical POC Analysis

CWE-863 (Incorrect Authorization), with a CWE-444-adjacent Content-Length/Transfer-Encoding confusion underneath.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Zalando Skipper is exposed to an authorization bypass that allows unauthenticated remote attackers to evade Open Policy Agent body-inspection controls and forward oversized requests to protected upstream services. The issue affects only deployments that run Skipper before 0.27.37 and use the opaAuthorizeRequestWithBody filter with a policy that permits requests when the truncated_body signal is false; other configurations are not impacted. Leadership should prioritize identification and mitigation because successful exploitation can undermine access-control enforcement and allow unauthorized payloads to reach sensitive backends, although no public exploit has been identified at time of analysis.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: disable or bypass the opaAuthorizeRequestWithBody filter; modify OPA policy to deny when input.truncated_body is false, absent, or cannot be reliably determined; enforce strict maximum body sizes at the upstream service, API gateway, or WAF; reject HTTP/1.1 chunked requests and HTTP/2 requests without a valid Content-Length for sensitive endpoints; and monitor Skipper and OPA logs for oversized or truncated-body authorization anomalies.

Threat Intelligence Overview

EPSS Score
0.5%
Top 59% exploitable
Prevalence
Medium
Zalando open-source Kubernetes ingress/HTTP router, moderate adoption; OPA body-authz feature niche
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
4 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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 Yes
EPSS 0.5%
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
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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