JFrog Artifactory مشروع إعادة إنتاج RCE للسلسلة الكاملة قبل المصادقة (CVE-2026-42018 / CVE-2026-65616 / CVE-2026-65615): تقرير سلسلة الهجوم الكامل، مخرجات إعادة إنتاج Docker 7.146.7 (EXP / النشر / التحقق من خط الأساس / عينات payload / أدوات الاستعادة)
للاستخدام فقط في اختبارات الأمان المصرح بها، وأبحاث الدفاع، والتعليم الأمني. تم إصلاح سلسلة الثغرات هذه من قبل المورد (يُنصح بالترقية إلى 7.161.15+)، لذا يُرجى إعادة إنتاجها فقط في بيئة معملية معزولة لمرة واحدة. أي تنفيذ غير مصرح به لأي من العمليات الموضحة في هذا المستودع على أنظمة الآخرين يُعد عملاً غير قانوني، ويتحمل المنفذ وحده كامل المسؤولية عن أي عواقب تنتج عن ذلك.
هذا المستودع هو مُخرَج إعادة إنتاج كامل لسلسلة ثغرات RCE قبل المصادقة في JFrog Artifactory التي كشفت عنها edrabb.fr: تم إنجاز إعادة إنتاج آلية كاملة لسلسلة هجوم من 5 خطوات بناءً على الصورة الرسمية releases-docker.jfrog.io/jfrog/artifactory-oss:7.146.7 (الشكل الرسمي الوحيد للنشر في 7.146.x: PostgreSQL خارجي)، وأُثبتت مصداقية إعادة الإنتاج عبر تجربة أساسية «تنفيذ RCE مباشرة من بيئة جديدة تمامًا» (التفاصيل في attack-chain-package/baseline/BASELINE-VERIFIED.md).
| الخطوة | المرحلة | CVE |
|---|---|---|
| Step 1 | تجاوز المصادقة عبر الشرطة المائلة اللاحقة، والحصول على JWT مجهول (aud=*@*) | CVE-2026-42018 |
| Step 2 | استبدال زوج رموز access + refresh | CVE-2026-42018 |
| Step 3 | اكتشاف Router لمعرّف خدمة jfrt@ → تزوير تحديث JWT الخاص بالمسؤول → رمز مسؤول موقّع حقيقي | CVE-2026-65616 |
| Step 4 | systemUpload لرفع payload.zip → system import لفك الضغط وكتابة logback.xml الخبيث | — |
| Step 5 | كتابة Logback fileHeader لـ web.xml / مكوّن CGI على القرص → RCE قبل المصادقة عبر Tomcat CGI | CVE-2026-65615 |
├── 漏洞攻击链完整报告.md ← التقرير الشامل (التحقق الأساسي من مصداقية إعادة الإنتاج، المبدأ، المقارنة مع مقال الإفصاح، توصيات الإصلاح)
├── 复现报告.md ← تقرير إعادة إنتاج تقني مفصل من 744 سطرًا (المبدأ على مستوى الشيفرة المصدرية + الخطوات اليدوية)
└── attack-chain-package/
├── README.md ← البدء السريع (نشر البيئة المستهدفة / شن الهجوم / استعادة البيئة)
├── exploit/
│ ├── exp.py ← EXP آلي للسلسلة الكاملة (مكتبة Python 3 القياسية، بدون أي تبعيات خارجية)
│ └── forge_jwt.py ← سكربت تزوير JWT اليدوي للخطوة 3 (مستقل عن exp.py)
├── deploy/system.yaml ← إعدادات تحميل حاوية Artifactory 7.146.7 (الصورة الرسمية تشترط PostgreSQL)
├── baseline/ ← التحقق الأساسي من مصداقية إعادة الإنتاج (سجل التجربة والإعدادات لتنفيذ RCE مباشرة من بيئة جديدة تمامًا)
├── payload-sample/ ← نماذج مكوّنات payload المُنشأة دون اتصال (ناتج exp.py --dump-payload)
└── recovery/ ← سكربتات استعادة البيئة والتحقق منها (مرجع للاستجابة للحوادث)
# 1. 部署靶场(详见 attack-chain-package/README.md;需约 6 GB 磁盘与 8 GB 可用内存)
docker network create jfrog-net
docker run -d --name artifactory-pg --network jfrog-net \
-e POSTGRES_DB=artifactory -e POSTGRES_USER=artifactory -e POSTGRES_PASSWORD=artifactory \
postgres:15
docker run -d --name artifactory-rce --network jfrog-net -p 8081:8081 -p 8082:8082 \
-v <ABS_PATH>/attack-chain-package/deploy/system.yaml:/opt/jfrog/artifactory/var/etc/system.yaml \
releases-docker.jfrog.io/jfrog/artifactory-oss:7.146.7
# 等待 2–4 分钟,ping 返回 OK 即就绪
curl -s http://127.0.0.1:8082/artifactory/api/system/ping
# 2. 发起攻击(一次性模式,默认执行 id;Windows 宿主 python 为 2.x 时用 py -3)
python3 attack-chain-package/exploit/exp.py --target http://127.0.0.1:8082
# 3. 恢复环境(最简:销毁重建;原地恢复见 recovery/recover5.sh)
docker rm -f artifactory-rce
الهجوم تدميري لمرة واحدة بالنسبة لـ webapp: تُقتل وظائف Artifactory الأصلية للويب فور نجاح RCE، لذا احرص على استخدام حاوية تجريبية لمرة واحدة.
attack-chain-package/payload-sample/payload.zip (الملف النهائي المرفوع، الذي يؤدي استيراده إلى تشغيل RCE) مخزّن بصيغة نص base64 باسم payload.zip.b64:
# Windows PowerShell
[IO.File]::WriteAllBytes("payload.zip", [Convert]::FromBase64String((Get-Content "payload.zip.b64" -Raw).Trim()))
# Linux / macOS
base64 -d payload.zip.b64 > payload.zip
admin / password (حساب JFrog الافتراضي الأولي؛ سلسلة الهجوم هذه قبل المصادقة بالكامل، ولا تستخدم أي بيانات اعتماد)