Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
POC-CopyEscape-CVE-2026-17106 — إثبات مفهوم وظيفي لـ CVE-2026-17106 (CopyEscape): سباق TOCTOU في docker cp يتيح الكتابة الاعتباطية على مضيف Docker. مختبر Docker + مراقب inotify + LD_PRELOAD. نسخة macOS غير ضارة ونسخة Linux مدمرة. | Kitploit
أدوات/GitHubGitHub/686f6c61/poc-copyescape-cve-2026-17106
تصعيد الامتيازاتأمن الحاوياتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليمالهروب من الحاويةالهجوم العدائيمختبرات وتدريب عملي

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHub
686f6c61/poc-copyescape-cve-2026-17106

POC-CopyEscape-CVE-2026-17106

إثبات مفهوم وظيفي لـ CVE-2026-17106 (CopyEscape): سباق TOCTOU في docker cp يتيح الكتابة الاعتباطية على مضيف Docker. مختبر Docker + مراقب inotify + LD_PRELOAD. نسخة macOS غير ضارة ونسخة Linux مدمرة.

عرض المستودع
123منذ شهر واحدلم تتم المراجعة بعد

CopyEscape — إثبات المفهوم لـ CVE-2026-17106

إثبات مفهوم تعليمي لـ CopyEscape (CVE-2026-17106)، ثغرة سباق TOCTOU في docker cp تسمح لحاوية خبيثة بكتابة ملفات عشوائية على مضيف Docker. مستوحاة من العمل الأصلي لـ masasron، الذي اكتشف ووثّق الثغرة في مدونة "CopyEscape: Taking Over Docker Hosts with docker cp".


جدول المحتويات

  1. الملخص التنفيذي
  2. إخلاء مسؤولية قانوني
  3. هندسة السلسلة
  4. المتطلبات
  5. بنية المستودع
  6. دليل الاستخدام السريع
  7. التحقق من الاستغلال
  8. مقارنة مع الأصل
  9. التخفيف
  10. الاعتمادات
  11. الترخيص

الملخص التنفيذي

CVE-2026-17106 هو ثغرة سباق (TOCTOU) في استخراج ملف tar الذي يولّده برنامج Docker الخفي أثناء docker cp <contenedor>:<ruta> <destino>. تؤثر على Docker CLI 29.6.1 والإصدارات الأقدم؛ وتم إصلاحها بدءًا من 29.7.0. يقع الخلل في CLI (استخراج tar على المضيف)، وليس في البرنامج الخفي.

السلسلة المسماة CopyEscape تبيّن كيف يمكن لمهاجم، انطلاقًا فقط من حاوية قيد التشغيل دون صلاحيات إضافية، أن:

  1. يُخفي دليلًا حقيقيًا /watched/file.txt/ كملف عادي أمام أي عملية تفتحه داخل الحاوية، عبر مكتبة LD_PRELOAD تعترض open, openat, openat2, fopen, stat, lstat, fstatat, statx وإصدارات 64.
  2. يُبقي ملف طُعم aaa.txt بحجم 16 MiB يجبر البرنامج الخفي على التأخر بما يكفي في إنتاج tar ليتمكن المراقب من الفوز بالسباق.
  3. يراقب وصول البرنامج الخفي عبر inotify، وفي نافذة السباق، يستبدل دليلًا فرعيًا escape/ باختصار رمزي (symlink) مطلق إلى هدف المضيف (/Users/<usuario> على macOS أو /usr/bin على Linux) عبر استدعاءَي rename(2) ذرّيين مع تراجع (rollback).
  4. ملف tar الناتج يحتوي على الاختصار الرمزي escape متبوعًا بإدخال فرعي escape/<basename>؛ CLI المعيبة تنشئ الاختصار الرمزي على العميل وتستخرج الإدخال الفرعي من خلاله، فتُكتب خارج الوجهة التي اختارها المستخدم.

النتيجة هي كتابة ملفات عشوائية على المضيف بصلاحيات العملية التي تنفّذ docker cp. بديل Linux يكتب فوق /usr/bin/runc ويحقق تنفيذ كود بصلاحيات root على المضيف عند أول docker run / exec لاحق.


إخلاء مسؤولية قانوني

يحتوي هذا المستودع على مواد تعليمية ودفاعية بشكل صارم.

  • الغرض: إظهار سلسلة الاستغلال لأغراض التدريب والتدقيق الذاتي والتحقق من التصحيحات (patches).
  • الاستخدام المصرح به: شغّله فقط ضد أنظمة تملكها أو لديك إذن كتابي صريح بشأنها.
  • محظور: أي استخدام ضد أنظمة أطراف ثالثة دون موافقة. لا يتحمّل مؤلف المستودع مسؤولية إساءة استخدام المواد الواردة هنا.
  • المسؤولية: المشغّل هو المسؤول الوحيد عن الامتثال للتشريعات المعمول بها (LOPD/RGPD في إسبانيا، CFAA في الولايات المتحدة، إلخ).
  • بديل Linux يدمّر runc على المضيف: استخدمه فقط في جهاز افتراضي (VM) قابل للتخلص مع نسخة احتياطية موثّقة.

يُسلَّم إثبات المفهوم مع بديل macOS غير ضار (يكتب ~/pwnd كعلامة) هدفه الوحيد أن يكون بمثابة عرض توضيحي قابل لإعادة الإنتاج.


هندسة السلسلة

┌─────────────────────────────────────────────────────────────────────┐
│  1. LD_PRELOAD camufla /watched/file.txt como archivo regular       │
│     open/openat/openat2/fopen/stat/lstat/fstatat/statx → decoy       │
│     docker exec ... cat /watched/file.txt  →  "top-level file"       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. Layout real dentro del contenedor                               │
│     /watched/file.txt/                                               │
│     ├── aaa.txt            (16 MiB de 'B', cebo lento)               │
│     ├── escape/            (directorio real inicial)                 │
│     ├── escape/<basename>  (payload: runc o pwnd)                    │
│     └── .swap-escape       (symlink → /Users/<usr> o /usr/bin)       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. docker cp pide tar al daemon                                    │
│     daemon recorre /watched/file.txt/ y abre aaa.txt                │
│     inotify detecta IN_OPEN sobre aaa.txt                           │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. Monitor pivot: dos rename(2) atomicos con rollback              │
│     escape/ → .old-escape/   (backup)                                │
│     .swap-escape → escape/   (symlink al target del host)            │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. Tar resultante contiene:                                        │
│     escape → /Users/<usr>   (symlink absoluto)                       │
│     escape/<basename>        (entrada hija que atraviesa el symlink) │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. CLI vulnerable extrae symlink + hija                            │
│     crea escape → /Users/<usr> en el destino local                   │
│     extrae escape/<basename> A TRAVES del symlink                    │
│     escribe /Users/<usr>/<basename> en el host                       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  macOS: ~/pwnd con "COPYESCAPE_MACOS_DEMO"  (demo inocua)           │
│  Linux: /usr/bin/runc sobrescrito          (RCE como root)          │
└─────────────────────────────────────────────────────────────────────┘

المتطلبات

تم بناء إثبات المفهوم ليُشغَّل على macOS مع:

  • Docker Desktop 4.81+ قيد التشغيل (يمكن أن يكون البرنامج الخفي أي إصدار؛ الخلل في CLI).
  • curl, tar, git و docker في PATH.
  • اتصال بالإنترنت لتنزيل CLI المعيبة 29.6.1 (حوالي 18 MB) والصورة الأساسية alpine:3.21.
  • HOME بالصيغة /Users/<usuario>.

لا حاجة لصلاحيات root لبديل macOS. يتطلب بديل Linux صلاحيات root وجهازًا افتراضيًا (VM) قابلًا للتخلص.

يقوم المُشغِّل run-poc.sh بتنزيل ثنائي CLI المعيبة 29.6.1 تلقائيًا من الموقع الرسمي لـ Docker (download.docker.com). لا يعدّل تثبيت Docker Desktop على النظام: يستخدم البرنامج الخفي الحالي لكنه يستدعي الثنائي المُنزَّل لعملية docker cp.


بنية المستودع

POC CopyEscape (CVE-2026-17106)/
├── README.md                 ← Este archivo
├── LICENSE                   ← Licencia MIT
├── .gitignore
├── Dockerfile                ← Dockerfile unificado (macos | linux)
├── entrypoint.sh             ← Arranque del monitor sin LD_PRELOAD
├── monitor.c                 ← Monitor inotify unificado (una sola fuente)
├── watched_preload.c         ← LD_PRELOAD con cobertura ampliada
└── run-poc.sh                ← Runner robusto con reintentos

يتم استبعاد دليل cli-vulnerable/ (CLI 29.6.1 المُنزَّلة) من المستودع عبر .gitignore. يقوم المُشغِّل بتنزيلها تلقائيًا إذا لم تكن موجودة.


دليل الاستخدام السريع

1. تشغيل إثبات المفهوم (بديل macOS، غير ضار)

cd poc-v2
./run-poc.sh

يقوم المُشغِّل بـ:

تنزيل الأداة