
كاشف وقت التشغيل القائم على eBPF لثغرات الهروب من الحاويات في runc وDocker، حيث يراقب استدعاءات النظام واستدعاءات خادم Docker لاكتشاف استغلال CVE-2024-21626 وCVE-2024-23651 وCVE-2024-23652 وCVE-2024-23653 أثناء عمليات البناء ووقت التشغيل.
تمت أرشفة هذا المستودع الآن.
لن يتم إجراء أي تحديثات أخرى على الكود وقد يكون غير آمن أو حتى معطلاً بحلول الوقت الذي تقرأ فيه هذا الإشعار. اعتبره لأغراض تاريخية فقط وتعامل معه بحذر.

في هذا المستودع ستجد تنفيذاً مرجعياً لكشف وقت التشغيل القائم على eBPF لثغرات runc و Docker CVE-2024-21626 و CVE-2024-23651 و CVE-2024-23652 و CVE-2024-23653. يقوم بالربط مع استدعاءات نظام Linux (مثل chdir و mount) واستدعاءات دوال خادم Docker ويربطها بعمليات بناء Docker وعمليات الحاويات لتحديد استغلال هذه الثغرات.
للحصول على نهج قائم على التحليل الثابت، يرجى الاطلاع على هذا.
CVE-2024-21626 هي ثغرة في وقت تشغيل الحاويات runc تسمح للمهاجم بالخروج من عزل الحاوية وتحقيق RCE كامل بصلاحيات الجذر عبر صورة مصممة بعناية تستغل مشكلة في معالجة تعليمة WORKDIR. نظراً لوجود حالة "سباق" بين الوقت الذي يتم فيه فتح وإغلاق بعض واصفات الملفات للمضيف، يمكن للمهاجم إنشاء Dockerfile مع التعليمة التالية WORKDIR /proc/self/fd/[ID] (حيث ID هو واصف ملف يعتمد على النظام) والتي ستشير إلى نظام ملفات الجهاز المضيف الأساسي. يمكن استغلال ذلك عند تشغيل:
docker build - في حالتين:
FROM تحتوي على أمر ONBUILD يطلق الاستغلال مثل ONBUILD WORKDIR /proc/self/fd/[ID]. تعليمة ONBUILD تحقن الأمر ليس في الصورة التي تحتويه بل في الصورة التي تستخدمه كصورة أساسية. هذا يعني أنه إذا تم اختراق صورة أساسية أو كانت خبيثة عمداً أي مستضافة على Dockerhub أو سجلات حاويات عامة أخرى، فإن الاستغلال ممكن حتى لو لم يتغير شيء في الصورة التي يبنيها أمر docker build فعلياً.docker runوبالتالي، يمكن لهذه الثغرة أن تعرض أنظمة البناء وبيئات الإنتاج للخطر.
CVE-2024-23651 هي ثغرة في Docker حيث يستخدم أمر RUN علامة --mount=cache. توجد ثغرة من نوع time-of-check/time-of-use (TOCTOU) بين التحقق من وجود دليل source على مضيف خادم Docker والاستدعاء الفعلي لاستدعاء النظام mount. يمكن للمهاجم تصميم Dockerfile يزرع رابطاً رمزياً بين هذين الاستدعاءين لإحداث ربط تحميل تعسفي يؤدي إلى RCE كامل بصلاحيات الجذر على المضيف.
تؤثر هذه الثغرة فقط على أمر docker build.
CVE-2024-23653 هي ثغرة في Docker تحدث عند استخدام مولّد Buildkit LLB مخصص مع توجيه # syntax. يمكن للمولّد استخدام استدعاءات GRPC الخاصة بـ Client.NewContainer و Container.Start لتنفيذ حاوية جديدة أثناء البناء. لا يتم فحص وسيط StartRequest.SecurityMode بشكل مناسب مقابل توقعات الامتيازات لخادم Docker أو استدعاء docker build، مما يسمح لمستدعي GRPC بإنشاء حاوية مميزة أثناء البناء. يمكن بعد ذلك الهروب من هذه الحاوية المميزة الجديدة لتحقيق RCE كامل بصلاحيات الجذر على مضيف البناء.
تؤثر هذه الثغرة فقط على أمر docker build.
CVE-2024-23652 هي ثغرة حذف تعسفي في Docker. عند استخدام RUN --mount في Dockerfile، إذا لم يكن هدف التحميل موجوداً فسيتم إنشاؤه لتلك البيئة. عند اكتمال التنفيذ سيتم تنظيف هذا الدليل الذي تم إنشاؤه. إذا غيّر الأمر المنفذ المسار المستخدم للتحميل إلى رابط رمزي، فإن إجراء التنظيف سيتجاوز هذا الرابط الرمزي وربما ينظف أدلة تعسفية في نظام ملفات جذر المضيف.
تؤثر هذه الثغرة فقط على أمر docker build.
ينطبق كشف وقت البناء على جميع الثغرات الأربع.
GOOS=linux GOARCH={{amd64/arm64}} go build.sudo (كما هو مطلوب بواسطة eBPF) في بيئة البناء الخاصة بك (أي sudo ebpf-detector &).Leaky vessels vulnerability detected مطبوعة على STDOUT، إلى جانب CVE المعنية واسم الثغرة والأدلة الجنائية الإضافية.ينطبق كشف وقت التشغيل على ثغرة WORKDIR فقط (CVE-2024-21626).
Dockerfile المقدم وادفعها إلى سجل صور.image في detector.yaml (المعلّمة بـ TODO).kubectl apply -f detector.yml.Leaky Vessels vulnerability detected مطبوعة في سجلات pods الخاصة بـ DaemonSet.يجب تشغيل اختبارات الوحدة في sudo، لأنها تعتمد على eBPF: sudo go test ebpf-detector/....
WORKDIR وقت التشغيل (CVE-2024-21626) أثناء تهيئة الحاوية، لذا لن يتم اكتشافه على الحاويات قيد التشغيل. يفترض الكشف أيضاً أن وقت تشغيل الحاوية هو containerd.CVE-2024-23651) و Buildkit Build-time Container Teardown Arbitrary Delete (CVE-2024-23652) قائمة على التوقيت وقد تحتوي على نتائج سلبية خاطئة بسبب حالات السباق.للحصول على قائمة محدثة بالأخطاء والمشكلات راجع مشكلات المشروع.
المساهمات مرحب بها. راجع CONTRIBUTING.md للتفاصيل.
كاشف Leaky Vessels الديناميكي مرخص بموجب ترخيص Apache-2.0. راجع LICENSE لمزيد من المعلومات.