
PoC للكتابة الاعتباطية للملفات في Docker عبر `docker cp`، مستغلًا عيوب الروابط الرمزية واستخراج أرشيفات tar للكتابة فوق ملفات المضيف الثنائية أو تشغيل وكلاء لتحقيق الهروب من الحاوية وتنفيذ كود بصلاحيات الجذر.
docker cpصورة توزيع من HackSpeak. هذا المستودع هو صورة توزيع لـ PoC الخاص بـ CopyEscape (CVE-2026-17106) الذي نشره فريق Imperva الأحمر (Ron Masas)، والكود مطابق للمستودع العلوي؛ المستودع العلوي لا يتضمن ترخيصًا، وبالتالي تعتمد الصورة على MIT License، حقوق النشر (c) 2026 HackSpeak، بينما تعود حقوق الكود المصدري إلى مؤلف الكود الأصلي.
⚠️ للاستخدام في البحث الأمني والاختبار المصرح به فقط؛ العرض التوضيحي على Linux سيؤدي إلى الكتابة فوق
/usr/bin/runc، لذا يُرجى تشغيله داخل جهاز افتراضي لمرة واحدة وإنشاء نسخة احتياطية قابلة للتحقق أولاً، ولا تنفّذه على أنظمة غير مصرح بها أو في بيئات الإنتاج.
CopyEscape (CVE-2026-17106) هي ثغرة كتابة تعسفية للملفات من الحاوية إلى المضيف في أمر docker cp (وكذلك sbx cp في Docker Sandboxes)، وقد اكتشفها فريق Imperva الأحمر (Ron Masas).
docker cp لا يقوم بنسخ مباشر من نظام الملفات — بل ينفّذ الخفي (daemon) دالة filepath.WalkDir على نظام ملفات الحاوية لإنشاء أرشيف tar، ويستلمها CLI ثم يقوم بفك ضغطها واستخراجها على جانب العميل؛addTarFile بعد ذلك رابطًا رمزيًا عند استدعاء Lstat مرة أخرى → يظهر في تدفق tar إدخال غير متناسق (أولًا ترويسة الرابط الرمزي، يليها إدخال "ملف فرعي")؛filepath.Join، لكن دالة os.Symlink الفعلية تستخدم hdr.Linkname الأصلي غير المفحوص (والذي قد يشير إلى مسار مطلق)؛ وعند استخراج الملفات الفرعية لاحقًا، يتبع النواة ذلك الرابط الرمزي، فتتم الكتابة خارج الوجهة التي حددها المستخدم؛docker cp. على macOS يمكن استبدال سكربتات تشغيل الصدفة أو ملفات ~/Library/LaunchAgents للاستمرارية؛ وعلى Linux يمكن استخدام sudo docker cp لاستبدال /usr/bin/runc، ومن ثم تتمكن عمليات دورة حياة Docker اللاحقة من تنفيذ كود بصلاحيات root.sudo docker cp مع حاويات غير موثوقة.عرضان توضيحيان (بيئة الاختبار مطابقة للبيئة الرسمية: Engine 29.6.1 / Desktop 4.81.0):
macOS (غير مدمر، ينشئ ~/pwnd)
cd macos
./demo-macos.sh
Linux (تأثير كبير، يستبدل /usr/bin/runc)
cd linux
# اتبع التعليمات داخل مجلد linux/ لبناء الصورة وتشغيلها؛ ⚠️ تأكد من عمل نسخة احتياطية قبل استبدال runc
الخطوات التفصيلية موجودة في ملفات التعليمات داخل الدليلين الفرعيين
macos/وlinux/في هذا المستودع.
/usr/bin/runc)، ويجب تشغيله داخل جهاز افتراضي لمرة واحدة مع إنشاء نسخة احتياطية.docker cp — https://www.imperva.com/blog/copyescape-taking-over-docker-hosts-with-docker-cp/