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

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

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 مدمرة.

عرض المستودع
17منذ 28 أياملم تتم المراجعة بعد

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) مطلق إلى هدف المضيف ( على macOS أو على Linux) عبر استدعاءَي ذرّيين مع تراجع (rollback).

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


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

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

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

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


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

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│  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.


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

root@kitploit:~
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، غير ضار)

root@kitploit:~
cd poc-v2
./run-poc.sh

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

  1. تنزيل CLI المعيبة 29.6.1 إذا لم تكن موجودة.
  2. بناء صورة Docker copyescape-macos-pocv2:local.
  3. تشغيل الحاوية المجهَّزة مع COPYESCAPE_HOST_HOME=$HOME.
  4. انتظار أن يصبح /watched/file.txt قابلًا للقراءة داخل الحاوية.
  5. تنفيذ docker cp باستخدام CLI المعيبة.
  6. التحقق من إنشاء العلامة ~/pwnd.

2. خيارات المُشغِّل

root@kitploit:~
./run-poc.sh 10         # 10 intentos (la carrera es probabilistica)
./run-poc.sh --cleanup  # 5 intentos y borra la imagen al final

3. المخرجات المتوقعة

root@kitploit:~
[run-poc] CLI vulnerable: 29.6.1
[run-poc] Intento 1/5 (contenedor copyescape-pocv2-NNNN-RRRR)
[run-poc]   /watched/file.txt lee: top-level file
[run-poc]   docker cp (CLI 29.6.1)...
[run-poc]   EXITO en intento 1: se creo /Users/<tu-usuario>/pwnd
  Contenido del marcador: COPYESCAPE_MACOS_DEMO
[run-poc]   Logs del monitor:
    [monitor] plataforma=macos target_dir=/Users/<tu-usuario> target_file=/Users/<tu-usuario>/pwnd quiet_ms=400 trigger=aaa.txt
    [monitor] pivoted /watched/file.txt/escape -> /Users/<tu-usuario>
[run-poc] Resumen: 1 exito en 1 intento(s).

4. التنظيف

root@kitploit:~
rm -f -- "$HOME/pwnd"
rm -rf -- poc-v2/file.txt
docker image rm copyescape-macos-pocv2:local

التحقق من الاستغلال

بمجرد اكتمال السلسلة، تُعدّ العناصر التالية دليلًا:


مقارنة مع الأصل

ما تبقى من الأصل

الفكرة والاستراتيجية تعودان إلى masasron: سباق TOCTOU ضد مُنتِج tar، التمويه عبر LD_PRELOAD، طُعم 16 MiB، الالتفاف باستدعاءَي rename(2)، والبنية escape/ + .swap-escape. بدون ذلك التصميم، لما وُجدت إعادة الكتابة هذه. المخطط المفاهيمي مطابق.

ما أُعيدت كتابته

تقريبًا 15-20 % هي أسطر متطابقة حرفيًا (أدوات مساعدة قصيرة وثوابت التخطيط). والباقي كود جديد.


التخفيف

  • تحديث CLI لـ Docker إلى 29.7.0 أو أعلى. يتوقف إثبات المفهوم عن العمل (تم التحقق مع 29.7.2).
  • عدم تنفيذ docker cp من حاوية لا يُوثَق بها، وأبدًا بصلاحيات root على Linux.
  • كشف بسيط: مراقبة إنشاء اختصارات رمزية (symlinks) مطلقة داخل وجهة docker cp أثناء الاستخراج، أو حظر ملفات tar على مستوى البرنامج الخفي إذا احتوت إدخالات فرعية تحت اختصار رمزي.
  • جذر الخلل هو الفئة نفسها من العيوب مثل TarSlip / ZipSlip: لا تتحقق CLI من أن الإدخالات التالية لا تهرب عبر اختصار رمزي أُنشئ بالفعل.

الاعتمادات

  • البحث الأصلي والنشر: masasron — https://github.com/masasron/CopyEscape-CVE-2026-17106
  • إثبات المفهوم وتغليف هذا المستودع: عمل خاص لأغراض تعليمية، أُعيدت كتابته من الصفر انطلاقًا من الفكرة الأصلية.

الترخيص

موزَّع بموجب رخصة MIT. راجع ملف LICENSE لمزيد من التفاصيل.

تنزيل الأداة
/Users/<usuario>
/usr/bin
rename(2)
  • ملف tar الناتج يحتوي على الاختصار الرمزي escape متبوعًا بإدخال فرعي escape/<basename>؛ CLI المعيبة تنشئ الاختصار الرمزي على العميل وتستخرج الإدخال الفرعي من خلاله، فتُكتب خارج الوجهة التي اختارها المستخدم.
  • الموردالدليل المتوقع
    ~/pwndملف بمحتوى COPYESCAPE_MACOS_DEMO\n
    poc-v2/file.txt/دليل (ليس ملفًا) يحتوي escape -> /Users/<tu-usuario> (اختصار رمزي) و aaa.txt (16 MiB)
    docker logs <contenedor>سطر pivoted /watched/file.txt/escape -> /Users/<tu-usuario>
    CLI 29.7.2 (docker cp مع CLI مصحَّحة)العلامة لا تُنشأ؛ يفشل إثبات المفهوم
    الملفالأسطر الأصليةالأسطر الجديدةالتغيير
    watched_preload.c89257أُعيدت كتابته: أغلفة openat2, fstatat, statx, stat64, lstat64, open64, fopen64؛ مُنشئ آمن للخيوط؛ حارس ضد dlsym == NULL؛ O_TMPFILE
    monitor.c (macos + linux)259 + 233 = 492 (مكررة)344 (موحَّد)أُعيدت كتابته وتوحيده مع -DCOPYESCAPE_TARGET_*؛ تراجع في try_pivot؛ exit_quiet_ms و trigger قابلان للضبط؛ كشف قوي
    entrypoint.sh35env -u LD_PRELOAD بدلًا من unset
    Dockerfile2243موحَّد؛ تثبيت digest؛ --platform؛ بدون -Werror؛ -static؛ LABEL
    demo-macos.sh → run-poc.sh88166أُعيدت كتابته: إعادة محاولات السباق؛ سجلات عند الفشل؛ --cleanup؛ تحقق مُوكَل إلى الثنائي