
SpeechBrain < 1.1.1 चेकपॉइंट मेटाडेटा में CKPT.yaml के असुरक्षित PyYAML पार्सिंग के माध्यम से RCE।
गंभीरता: उच्च, 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 (अविश्वसनीय डेटा का डिसीरियलाइज़ेशन)
रिपोर्टकर्ता: साई तेजा एरुकुडे
CNA: VulnCheck
प्रकाशित: 27 अगस्त, 2026
SpeechBrain 1.1.1 से पहले चेकपॉइंट पुनर्प्राप्ति के दौरान
चेकपॉइंट मेटाडेटा को पार्स करते समय PyYAML के असुरक्षित लोडर का उपयोग करता है।
CKPT.yamlएक हमलावर जो SpeechBrain चेकपॉइंट निर्देशिका की आपूर्ति या संशोधन कर सकता है, वह
CKPT* चेकपॉइंट निर्देशिका के अंदर एक दुर्भावनापूर्ण CKPT.yaml फ़ाइल रख सकता है। जब कोई पीड़ित
Checkpointer.recover_if_possible() को कॉल करता है, तो SpeechBrain चेकपॉइंट
उम्मीदवारों को सूचीबद्ध करता है और प्रत्येक उम्मीदवार मेटाडेटा फ़ाइल को इसके साथ पार्स करता है:
yaml.load(fi, Loader=yaml.Loader)
क्योंकि yaml.Loader Python ऑब्जेक्ट निर्माण टैग जैसे
!!python/object/apply का समर्थन करता है, हमलावर-नियंत्रित चेकपॉइंट मेटाडेटा
चेकपॉइंट खोज के दौरान Python कोड निष्पादित कर सकता है।
दुर्भावनापूर्ण चेकपॉइंट को चयनित या पुनर्स्थापित करने की आवश्यकता नहीं है। कोड निष्पादन तब होता है जब SpeechBrain चेकपॉइंट उम्मीदवारों की गणना कर रहा होता है।
एक हमलावर SpeechBrain चलाने वाली Python प्रक्रिया के संदर्भ में मनमाना Python कोड निष्पादित कर सकता है।
यह उन वर्कफ़्लो को प्रभावित कर सकता है जहाँ उपयोगकर्ता अविश्वसनीय चेकपॉइंट निर्देशिकाओं, मॉडल आर्टिफैक्ट्स, या अभिलेखागार से डाउनलोड, अनपैक, फिर से शुरू, या प्रशिक्षण/अनुमान चलाते हैं।
होस्टिंग प्रक्रिया के आधार पर, यह अनुमति दे सकता है:
प्रभावित घटक 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)
PoC दो चेकपॉइंट बनाता है:
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
यह शेल नहीं चलाता, नेटवर्क सेवा से कनेक्ट नहीं करता, रहस्य नहीं पढ़ता, डेटा हटाता नहीं, या PoC निर्देशिका के बाहर फ़ाइलों को संशोधित नहीं करता।
SpeechBrain 1.1.1 या बाद के संस्करण में अपग्रेड करें।
स्थायी कोड फिक्स चेकपॉइंट मेटाडेटा के लिए PyYAML के सुरक्षित लोडर का उपयोग करना है:
yaml.safe_load(fi)
या:
yaml.load(fi, Loader=yaml.SafeLoader)
चेकपॉइंट मेटाडेटा को केवल स्केलर मानों जैसे unixtime और
end-of-epoch की आवश्यकता होती है, इसलिए इस पार्स पथ के लिए Python ऑब्जेक्ट निर्माण सक्षम नहीं होना चाहिए।
यदि तत्काल पैच या अपग्रेड उपलब्ध नहीं है:
CKPT.yaml में अप्रत्याशित टैग और फ़ील्ड को मान्य करें या अस्वीकार करें।साई तेजा एरुकुडे द्वारा खोजा और रिपोर्ट किया गया, VulnCheck के माध्यम से समन्वित।
exploit_walkthrough.md