CVE-2026-75885: Openshift/console: openshift/console: unauthenticated ssrf and resource exhaustion via devfile parser endpoint
A flaw was found in the OpenShift console. Unauthenticated access to the /api/devfile/ and /api/devfile/samples/ endpoints allows a remote attacker to send crafted devfile payloads. This can lead to Server-Side Request Forgery (SSRF), where the console pod makes requests to internal services and reflects partial responses to the attacker. Additionally, by sending repeated large requests without a specified content length, an attacker can cause unbounded memory growth, leading to a Denial of Service (DoS).
Other sources
The /api/devfile/ and /api/devfile/samples/ endpoints in the OpenShift console (bridge) are registered with handleFunc() directly, without being wrapped in authHandler or authHandlerWithUser like every other /api/ route (pkg/server/server.go:347-348).
DevfileHandler decodes an arbitrary JSON body and passes DevfileContent to devfile.ParseDevfileAndValidate(parser.ParserArgs{Data: ..., HTTPTimeout: &httpTimeout}). The devfile library resolves parent.uri, kubernetes.uri, and remote plugin references over HTTP from the console pod. No request-body size limit is applied (MaxBytesReader is absent).
An unauthenticated attacker on the OpenShift Route can send a crafted devfile payload with parent.uri pointing to internal services (e.g. cloud metadata endpoints, etcd, kubelets). The response body is reflected in the parser error string returned to the client, yielding partial-read SSRF. Repeated large-body POSTs without Content-Length cause unbounded memory growth (DoS).
Tested and reproduced on OCP 5.0 nightly cluster.
Upstream: https://github.com/openshift/console File: pkg/server/server.go:347-348, pkg/devfile/handler.go:37-67
— Red Hat
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Modify pkg/server/server.go handling so that /api/devfile/ and /api/devfile/samples/ endpoints are wrapped in authHandler or authHandlerWithUser (instead of being registered with handleFunc directly) to prevent unauthenticated access.
OpenShift console API routing (/api/devfile/ and /api/devfile/samples/ endpoints) authentication/authorization middleware wrapping for handleFunc-registered routes = Require auth wrapping (authHandler or authHandlerWithUser) instead of unauthenticated handleFunc - Configuration
In pkg/devfile/handler.go where DevfileHandler decodes the request body, add a MaxBytesReader wrapper (MaxBytesReader is absent per report) so repeated large requests without Content-Length cannot cause unbounded memory growth (DoS).
OpenShift console devfile request handling (devfile parser endpoint) request body size limit (MaxBytesReader) = Apply a request-body size limit by adding MaxBytesReader - Compensating control
Network-isolate the OpenShift console pod and restrict egress from the console pod so it cannot reach internal metadata/services (e.g., cloud metadata endpoints, etcd, kubelets), reducing impact of SSRF via devfile parent.uri/kubernetes.uri resolution over HTTP.
Event History
Frequently Asked Questions
Who can exploit this issue?
Any remote attacker who can reach the OpenShift Console route can send requests to the affected endpoints. Authentication and prior privileges are not required.
Which endpoints are involved?
The affected endpoints are /api/devfile/ and /api/devfile/samples/. Unlike other /api/* routes, these endpoints are registered directly and are not wrapped with the console authentication handlers.
What can an attacker make the console pod request?
A crafted devfile can cause the devfile parser to resolve parent.uri, kubernetes.uri, and remote plugin references over HTTP from the console pod. This may permit requests to internal services and expose partial responses to the attacker.
How can this lead to denial of service?
The endpoints decode arbitrary JSON request bodies without a request-body size limit. Repeated large requests that omit a specified content length can cause unbounded memory growth in the console pod.