
# SpeechBrain < 1.1.1 — تنفيذ التعليمات البرمجية عن بُعد (RCE) عبر بيانات نقاط التحقق (checkpoint metadata) من خلال تحليل غير آمن لملف CKPT.yaml بواسطة PyYAML.
الخطورة: عالية، CVSS 4.0 8.7، CVSS 3.1 8.8 (مُعيّن من قبل VulnCheck، CNA)
المتجه (v4.0): CVSS:4.0/AV:N/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:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
المتأثر: SpeechBrain < 1.1.1
تم الإصلاح في: 1.1.1 / الالتزام 22a6166
CWE: CWE-502 (إلغاء تسلسل البيانات غير الموثوقة)
أُبلغ من قبل: Sai Teja Erukude
CNA: VulnCheck
نُشر: 27 أغسطس 2026
يستخدم SpeechBrain قبل الإصدار 1.1.1 أداة التحميل غير الآمنة من PyYAML عند تحليل بيانات تعريف الخاصة بنقاط التفتيش أثناء استرداد نقاط التفتيش.
CKPT.yamlيمكن للمهاجم الذي يمكنه توفير أو تعديل دليل نقاط تفتيش SpeechBrain وضع ملف CKPT.yaml خبيث داخل دليل نقاط تفتيش CKPT*. عندما يستدعي الضحية Checkpointer.recover_if_possible()، يقوم SpeechBrain بسرد مرشحي نقاط التفتيش وتحليل كل ملف بيانات تعريف مرشح باستخدام:
yaml.load(fi, Loader=yaml.Loader)
نظرًا لأن yaml.Loader يدعم علامات بناء كائنات Python مثل !!python/object/apply، يمكن لبيانات تعريف نقاط التفتيش التي يتحكم فيها المهاجم تنفيذ كود Python أثناء اكتشاف نقاط التفتيش.
لا يلزم تحديد نقطة التفتيش الخبيثة أو استعادتها. يحدث تنفيذ الكود بينما يقوم SpeechBrain بتعداد مرشحي نقاط التفتيش.
يمكن للمهاجم تنفيذ كود Python تعسفي في سياق عملية Python التي تشغل SpeechBrain.
يمكن أن يؤثر هذا على سير العمل حيث يقوم المستخدمون بتنزيل أو فك ضغط أو استئناف أو تشغيل التدريب/الاستدلال من أدلة نقاط تفتيش أو نماذج أو أرشيفات غير موثوقة.
اعتمادًا على عملية الاستضافة، قد يسمح هذا بما يلي:
المكوّن المتأثر هو تدفق استرداد/سرد نقاط التفتيش في SpeechBrain:
Checkpointer.recover_if_possible()
-> list_checkpoints()
-> _construct_checkpoint_objects()
أثناء سرد نقاط التفتيش، يقوم SpeechBrain بفحص الأدلة الفرعية المسماة CKPT* التي تحتوي على CKPT.yaml. يتم تحليل كل ملف بيانات تعريف مرشح قبل الاختيار النهائي لنقطة التفتيش.
يحدث التحليل غير الآمن في speechbrain.utils.checkpoints.checkpoints.py:
meta = yaml.load(fi, Loader=yaml.Loader)
ينشئ إثبات المفهوم نقطتي تفتيش:
CKPT+poisoned-metadata: نقطة تفتيش خبيثة أقدم يحتوي ملف CKPT.yaml الخاص بها على حمولة تطبيق كائن PyYAML.CKPT+benign-newer: نقطة تفتيش سليمة أحدث يجب تحديدها حسب الأحدثية.يتم تحديد نقطة التفتيش السليمة، ولكن بيانات تعريف نقطة التفتيش الخبيثة لا تزال تُنفذ أثناء سرد المرشحين. يُظهر هذا تنفيذ كود في وقت تحليل البيانات الوصفية بشكل مستقل عن استعادة نقطة التفتيش.
package_builder.py ينشئ تخطيط نقاط التفتيش الذي يتحكم فيه المهاجم.
run_poc.py يشغّل التحقق، ويستدعي Checkpointer.recover_if_possible()، ويطبع دليل التنفيذ.
شغّل في بيئة اختبار محلية فقط:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
الدليل المتوقع على الإصدارات المعرضة للخطر:
speechbrain_version: 1.1.0
installed_package: True
recovery_error: None
benign_checkpoint_selected: True
marker_before_recovery: False
marker_after_recovery: True
marker_contents:
speechbrain_checkpoint_yaml_loader_rce_triggered
success: True
الدليل المهم هو أن benign_checkpoint_selected: True و marker_after_recovery: True يظهران معًا. يُظهر هذا أن نقطة التفتيش الخبيثة الأقدم لم يتم تحديدها للاسترداد، ولكن بياناتها الوصفية لا تزال تُحلل وتُنفذ بينما كان SpeechBrain يسرد مرشحي نقاط التفتيش.
الحمولة غير ضارة عمدًا. تكتب فقط سلسلة العلامة المحلية هذه:
speechbrain_checkpoint_yaml_loader_rce_triggered
لا تفتح غلافًا، ولا تتصل بخدمة شبكة، ولا تقرأ الأسرار، ولا تحذف البيانات، ولا تعدّل الملفات خارج دليل إثبات المفهوم.
قم بالترقية إلى SpeechBrain 1.1.1 أو أحدث.
الإصلاح الدائم للكود هو استخدام أداة التحميل الآمنة من PyYAML لبيانات تعريف نقاط التفتيش:
yaml.safe_load(fi)
أو:
yaml.load(fi, Loader=yaml.SafeLoader)
تحتاج بيانات تعريف نقاط التفتيش فقط إلى قيم عددية مثل unixtime و end-of-epoch، لذلك لا ينبغي تمكين بناء كائنات Python لهذا المسار التحليلي.
إذا لم يتوفر تصحيح أو ترقية فورية:
CKPT.yaml أو ارفضها.اكتشفه وأبلغ عنه Sai Teja Erukude، وتم التنسيق عبر VulnCheck.
exploit_walkthrough.md