A wrong policy can be an open door.
You have to check input.attributes.request.http.truncated_body in your policy.
Incomplete fix for CVE-2026-50197: an oversized declared-Content-Length body still hands OPA an empty parsed_body, so deny-on-presence Rego policies fail OPEN while the full payload reaches upstream.
The CVE-2026-50197 fix (commit 3152f3b0, PR #4041, v0.26.10) substituted expectedSize = maxBodyBytes
only when req.ContentLength < 0 (chunked / HTTP/2 without content-length). But when a request declares a
Content-Length larger than maxBodyBytes, expectedSize > maxBodyBytes, the body-extraction if is
skipped entirely, and ExtractHttpBodyOptionally returns rawBodyBytes = nil — so OPA evaluates an empty
parsed_body, while the full forbidden payload still flows to the upstream. A deny-on-presence policy
(default allow = true; allow = false if input.parsed_body.<forbidden>) — the exact Rego shape the
advisory describes — fails OPEN. The fix's own comment reasons only about ContentLength == -1; the
oversized branch was never considered, and the added PoC test only covers small bodies.
filters/openpolicyagent/openpolicyagent.go ExtractHttpBodyOptionally: the
expectedSize <= maxBodyBytes gate lets an oversized declared body fall through to
return req.Body, nil, func() {}, nil (OPA sees an empty document).{ "welcome": "world" },
maxBodySize: 5 → bodyInPolicy: "").See attached docker-compose.yml (official golang image) + setup.sh + exploit.sh, which run a real
Skipper proxy (proxytest) with a real OPA control plane (opasdktest),
WithMaxRequestBodyBytes(32), policy allow = false if input.parsed_body.action == "delete", route
* -> opaAuthorizeRequestWithBody("test") -> upstream:
{"action":"delete"} (19B ≤ 32) → 403 (denied).
-...0.27.26Exploitability
AV:NAC:LPR:NUI:NScope
S:UImpact
C:HI:LA:N8.2/CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:NOther