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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2026-47627 — إثبات مفهوم لاستغلال CVE-2026-47627، وهي ثغرة اجتياز المسار في خادم NVIDIA Triton للاستدلال تؤدي إلى كتابة ملفات تعسفية عبر Zip-Slip. يتضمن تحليلاً مفصلاً، وبيئة مختبرية، ونصوص استغلال بنقرة واحدة. | Kitploit
أدوات/GitHubGitHub/anekazek/cve-2026-47627
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubanekazek/cve-2026-47627

cve-2026-47627

إثبات مفهوم لاستغلال CVE-2026-47627، وهي ثغرة اجتياز المسار في خادم NVIDIA Triton للاستدلال تؤدي إلى كتابة ملفات تعسفية عبر Zip-Slip. يتضمن تحليلاً مفصلاً، وبيئة مختبرية، ونصوص استغلال بنقرة واحدة.

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

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

CVE-2026-47627 — NVIDIA Triton Inference Server Path Traversal → DoS (Zip-Slip)

كتابة كاملة لنتائج البحث وPoC في هذا المستودع (صورة nvcr.io/nvidia/tritonserver:26.05-py3 / server v2.69.0). المستودع مُهيّأ ليكون دائمًا explicit لتمكين PoC بدون إعادة تشغيل عبر gRPC.


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

  1. ملخص CVE
  2. بيئة المختبر
  3. تشريح الثغرة
  4. تحليل السبب الجذري (Diff 26.05 ← 26.06)
  5. مسارات الاستغلال: أيها يتأثر فعلاً؟
  6. PoC الرئيسي: Zip-Slip عبر EXECUTION_ENV_PATH
  7. طريقة تشغيل PoC (بنقرة واحدة)
  8. دليل الاجتياز (وليس 500 وهمي)
  9. تأثير DoS
  10. التخفيف
  11. هيكل المستودع (بعد التنظيف)
  12. المراجع والجدول الزمني

1. ملخص CVE

الحقلالقيمة
CVECVE-2026-47627
CNA[email protected]
النشر2026-08-18 (NVD بانتظار التحليل)
النشرةNV 5865 ← https://github.com/NVIDIA/product-security/tree/main/2026/5865
CVSS 3.19.8 حرجة AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-22 اجتياز المسار
المتأثر0.0-26.05 (server v2.69.0 / core r26.05)
المُصلَح26.06 (server v2.70.0 / core r26.06)
التأثيرDoS (وصف CNA) — هذا البحث يثبت كتابة ملف خارج /models عبر Zip-Slip، والتي يمكن توسيعها إلى DoS/استنزاف الموارد
الفضلMartin Brodeur

ملاحظة صادقة: وصف CNA هو فقط path traversal ← DoS بدون تفاصيل. هذه الكتابة تعيد بناء موقع الخلل عبر diff r26.05..r26.06 والاختبار المباشر في حاوية 26.05-py3.


2. بيئة المختبر

الصورة: nvcr.io/nvidia/tritonserver:26.05-py3 (TRITON_VERSION 2.69.0)

Compose دائمًا explicit (مُعدّل في هذا المستودع):

# docker-compose.yml:12
command: ["tritonserver", "--model-repository=/models", "--model-control-mode=explicit", "--log-verbose=0"]

run_triton.bat:10، run_triton.ps1:11، run_triton.sh:12 أيضًا explicit.

وضع Triton:

  • NONE (الافتراضي upstream) ← تحميل مرة واحدة عند البدء، POST /v2/repository/models/.../load ← 503، يجب إعادة التشغيل لتحميل نموذج جديد.
  • POLL ← فحص المستودع كل ثانية، تحميل تلقائي، يظل يحظر التحميل الصريح.
  • EXPLICIT (هذا المستودع) ← لا يفحص، لكنه يفتح gRPC load_model / POST /load ← PoC بدون إعادة تشغيل عبر gRPC.

المنافذ: | 8000 | HTTP REST | v2/health، v2/models، v2/repository | | 8001 | gRPC | RepositoryModelLoad، ModelInfer | | 8002 | Metrics | Prometheus |

النموذج الأولي:

model_repository/
├── echo_python/ (python backend, model.py)
│   └── 1/model.py
└── identity_onnx/ (onnxruntime, model.onnx ~1KB)

بدء سريع:

docker compose up -d
docker compose logs -f
py scripts/client_test.py  # health + infer identity_onnx

3. تشريح الثغرة

User input (model_name / tar entry) ──► join(parent, child) ──► canonicalize ──► cek "child di dalam parent?" ──► buka file
         │                                    │                     │                         │                     │
         └──► "../tmp/pwn"               /models + "/../tmp/pwn" = /models/../tmp/pwn → /tmp/pwn    rfind vs find + '/' check    FileExists / extract
  • إذا كان join بدون canonicalize أو فحص rfind(parent,0)==0 خاطئ (مطابقة جزئية /models مقابل /models_evil)، فإن ../ يمكن أن يهرب.
  • DoS يحدث إذا كان الملف المُجتاز هو FIFO أو /dev/zero أو /proc/self/mem أو tar يحتوي على ../../ يكتب فوق ملفات النظام ← تعليق / OOM / انهيار.

ثلاثة أسئلة بحثية (من التقرير الأولي):

  1. أين يتحكم المستخدم في المسار؟ ← model_name في gRPC RepositoryModelLoad، EXECUTION_ENV_PATH tar entry، تجاوز file:، TRITON_BATCH_STRATEGY_PATH.
  2. كيف يُستخدم المسار؟ ← posixpath.join(repo, model_name) / temp_dir + "/" + file_name + IsChildPathEscapingParentPath.
  3. ما التأثير؟ ← DoS عبر استنزاف الموارد / التعليق. في هذا المستودع يُثبت كتابة ملف إلى /tmp/poc_marker.

4. تحليل السبب الجذري (Diff 26.05 ← 26.06)

مستودع core (r26.05..r26.06):

  1. src/filesystem/api.cc:407 IsChildPathEscapingParentPath — إصلاح dcb315d + 72f3d9b:

    // VULN (r26.05):
    absolute_child.rfind(absolute_parent,0) != 0
    // ← خطأ مطابقة جزئية: بادئة "/models" من "/models_evil/file" تُعتبر داخلية
    
    // FIXED (r26.06):
    canonical_child.find(canonical_parent,0)==0 &&
    ((child.size() > parent.size() && child[parent.size()]=='/') || child.size()==parent.size())
    // ← يجب أن يكون '/' بعد البادئة، "/models_evil" الآن خارجي بشكل صحيح
    

    يُستخدم في src/backend_model.cc:196 (TRITON_BATCH_STRATEGY_PATH) وsrc/model_repository_manager/model_repository_manager.cc:162 (file:).

  2. src/model_repository_manager/model_repository_manager.cc:62 ValidateModelName — core#472/#481 (مارس 2026، موجود في 26.05 لكن تم تشديده في 26.06):

    if (trimmed==".." || trimmed.find('/')!=npos) return INVALID_ARG "must not contain path traversal"
    

    هذا ما يجعل gRPC load_model('../tmp/pwn') ← 400 INVALID_ARGUMENT في 26.05 (محظور بالفعل). لكن %2f (المشفر /) يمر لأنه ليس / حرفيًا ← 500 فحص حرفي.

  3. python_be.cc:292 EXECUTION_ENV_PATH — e520f8c7 اختبار zipslip_test.py: يتم استخراج tar بدون فحص .. / المسارات المطلقة. إدخال ../../poc_marker من /models/poc_exploit/malicious_env.tar.gz يُستخرج إلى /tmp/poc_marker (خارج مجلد النموذج). الإصلاح في 26.06: استخدام ARCHIVE_EXTRACT_SECURE_NODOTDOT|NOABSOLUTEPATHS + فحص IsChildPathEscapingParentPath.

مستودع server (r26.05..r26.06): فقط sagemaker_server.cc:1027 (فحص RE2::FullMatch) + http_server.cc:2440 (atoi→stoi)، ليس مسار هذه CVE.

الخلاصة: مسار model_name عبر HTTP/gRPC محظور بالفعل في 26.05 بواسطة ValidateModelName، لكن Zip-Slip tar لم يكن محظورًا — وهذا ما يستغله PoC في هذا المستودع.


5. مسارات الاستغلال: أيها يتأثر فعلاً؟

المتجهالحمولةنتيجة 26.05متأثر؟
HTTP خام ../POST /v2/repository/models/../tmp/pwn/load404 (تطبيع التوجيه)❌
HTTP مشفر ..%2fPOST /v2/repository/models/..%2ftmp%2fpwn/load500 حرفي، فحص /models/..%2ftmp%2fpwn غير موجود❌ (500 وهمي، ليس اجتيازًا)
gRPC خام ../tmp/pwnload_model('../tmp/pwn')400 INVALID_ARGUMENT❌ (محظور بالفعل)
gRPC مشفر ..%2fload_model('..%2ftmp%2fpwn')500 فحص حرفي❌
تجاوز file: ../models_evilfile:../models_evil/pwn400/500 حسب المطابقة الجزئية⚠️ (يعتمد على خطأ IsChildPathEscapingParentPath، لكن محظور بالفعل بواسطة ValidateModelName لـ model_name)
EXECUTION_ENV_PATH tar ../../poc_markermalicious_env.tar.gz إدخال ../../poc_marker200 + ملف في /tmp/poc_marker✅ ثغرة

تشبيه 500 مقابل 400 في الكتابة القديمة خاطئ: 500 = الملف غير موجود (الباب غير موجود)، 400 = مرفوض بالتحقق (الباب مقفل). كلاهما لا يدخل. فقط 200 + ملف في /tmp هو الدليل.


6. PoC الرئيسي: Zip-Slip عبر EXECUTION_ENV_PATH

الفكرة: معامل Python backend EXECUTION_ENV_PATH يشير إلى $$TRITON_MODEL_DIRECTORY/malicious_env.tar.gz. عند load_model('poc_exploit')، يستخرج backend pb_env.cc:292 tar بدون تنقية. إدخال ../../poc_marker يهرب من .../poc_exploit/ إلى /tmp/poc_marker.

تنزيل الأداة