
uproot <= 5.7.4 حقن كود عبر توليد مصدر Python غير آمن من بيانات TStreamerInfo الوصفية الخاصة بـ ROOT.
الخطورة: عالية، CVSS 4.0 8.5، CVSS 3.1 7.8 (مُعيَّنة من قِبل VulnCheck، الجهة المانحة لمعرّف CVE)
المتجه (v4.0): CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
المتجه (v3.1): CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
المتأثر: uproot <= 5.7.4
تم إصلاحه في: 5.7.5 / الالتزام c045c28
CWE: CWE-94 (التحكم غير السليم في توليد الشيفرة، حقن الشيفرة)؛ CWE-95 الثانوي (حقن Eval)
اكتُشف وأُبلغ عنه بواسطة: Sai Teja Erukude
نُشر: 18 يوليو 2026
يقوم uproot 5.7.4 والإصدارات الأقدم بتوليد شيفرة مصدرية لفئات Python ديناميكيًا من بيانات ROOT الوصفية TStreamerInfo ويقوم بتجميعها وقت التشغيل.
تُدرَج بعض حقول البيانات الوصفية للـ streamer التي يتحكم بها الملف داخل الشيفرة المصدرية المولَّدة لـ Python دون اقتباس آمن. يمكن للمهاجم الذي يستطيع تقديم ملف ROOT مصمَّم خصيصًا أن يحقن محتوى يكسر تعبيرات Python داخل البيانات الوصفية للـ streamer، مثل اسم عنصر مصمَّم خصيصًا.
عندما يفتح تطبيق متأثر ملف ROOT المصمَّم ويقوم uproot بتوليد واستدعاء دالة القراءة المقابلة، يمكن للتعبير المحقون في Python أن يُنفَّذ في سياق العملية المضيفة.
قد ينفّذ المهاجم شيفرة Python عشوائية في التطبيقات التي تفتح أو تعالج ملفات ROOT يتحكم بها المهاجم عبر مسارات الشيفرة المتأثرة في uproot.
اعتمادًا على التطبيق، قد يسمح ذلك بما يلي:
تقع المشكلة في مسار الشيفرة المولَّدة في uproot الخاص ببيانات ROOT الوصفية للـ streamer.
ينشئ PoC ملف ROOT يحتوي على بيانات TStreamerInfo وصفية مصمَّمة لفئة ExploitTarget. يكسر اسم عنصر الـ streamer المصمَّم التعبير المولَّد ويحقن استدعاءً حميدًا لـ pathlib.
السلوك المُبلَّغ عنه هو:
TStreamerInfo الوصفية المدعومة بالملف.ExploitTarget.read_members المولَّدة إلى تنفيذ التعبير المحقون.root_file_builder.py ينشئ malicious_tstreamerinfo.root ببيانات streamer وصفية مصمَّمة.
run_poc.py يفتح الملف باستخدام uproot، ويفرض توليد فئة ExploitTarget المدعومة بالملف، ويستدعي دالة read_members المولَّدة، ويتحقق من دليل ملف العلامة.
شغّله في بيئة اختبار محلية فقط:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
الأدلة المتوقعة على الإصدارات المصابة:
uproot_version: 5.7.4
file_backed_element_name_contains_payload: True
class_code_contains_injected_pathlib_call: True
expected_exception: True
exception_type: DeserializationError
marker_exists: True
marker_contents:
executed through uproot generated read_members
success: True
تُكتب الحمولة عن قصد لتكون غير ضارة. فهي تكتب فقط سلسلة العلامة المحلية هذه:
executed through uproot generated read_members
لا يقوم بتشغيل صدفة (shell)، ولا يتصل بخدمة شبكية، ولا يقرأ أسرارًا، ولا يحذف بيانات، ولا يعدّل ملفات خارج دليل PoC.
قم بالترقية إلى uproot 5.7.5 أو أحدث.
إذا لم تكن الترقية الفورية ممكنة:
TStreamerInfo الوصفية غير المتوقعة أو ارفضها قبل المعالجة.| التاريخ | الحدث |
|---|---|
| 20 مايو 2026 | تم تقديم الثغرة إلى VulnCheck |
| 20 مايو 2026 | بدأت VulnCheck التواصل؛ تم تخصيص CVE-2026-9147 مبدئيًا |
| 5 يوليو 2026 | صدر uproot 5.7.5 مع التصحيح |
| 18 يوليو 2026 | نُشر CVE-2026-9147 |
اكتُشفت وأُبلغ عنها بواسطة Sai Teja Erukude.
تم تنسيق الإفصاح عبر VulnCheck.