
OpenMed < 1.5.2 में PII गोपनीयता-फ़िल्टर मॉडल लोडिंग और trust_remote_code=True के माध्यम से बिना प्रमाणीकरण के RCE
गंभीरता: क्रिटिकल, CVSS 4.0 9.3, CVSS 3.1 9.8 (VulnCheck, CNA द्वारा निर्धारित)
वेक्टर (v4.0): CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
वेक्टर (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
प्रभावित: OpenMed < 1.5.2
में ठीक किया गया: 1.5.2
CWE: CWE-94 (कोड जनरेशन का अनुचित नियंत्रण, कोड इंजेक्शन)
खोजा और रिपोर्ट किया गया: Sai Teja Erukude द्वारा
प्रकाशित: 2 जून, 2026
OpenMed 1.5.2 से पहले के संस्करणों में PII प्राइवेसी-फ़िल्टर मॉडल लोडिंग पथ में एक अनधिकृत रिमोट कोड निष्पादन भेद्यता मौजूद है।
REST API एंडपॉइंट POST /pii/extract और POST /pii/deidentify अनुरोध बॉडी से model_name मान स्वीकार करते हैं। भेद्य संस्करणों में, प्राइवेसी-फ़िल्टर डिस्पैचर इस हमलावर-नियंत्रित मान पर व्यापक सबस्ट्रिंग मिलान का उपयोग करता था। इसलिए attacker/foo-privacy-filter-bar जैसा मॉडल नाम प्राइवेसी-फ़िल्टर बैकएंड में रूट हो सकता था।
गैर-MLX/Torch परिनियोजनों पर, वह बैकएंड trust_remote_code=True के साथ Transformers के माध्यम से Hugging Face मॉडल आर्टिफ़ैक्ट लोड करता था। यदि हमलावर-नियंत्रित मॉडल रिपॉज़िटरी में config.json या tokenizer_config.json में auto_map के माध्यम से संदर्भित कस्टम Transformers कोड शामिल होता, तो Transformers मॉडल या टोकनाइज़र लोडिंग के दौरान उस Python कोड को आयात और निष्पादित करता था।
आयातित कोड OpenMed सेवा प्रक्रिया के विशेषाधिकारों के साथ निष्पादित होता था।
एक अनधिकृत रिमोट हमलावर जो OpenMed REST API तक पहुँच सकता है, model_name में एक दुर्भावनापूर्ण Hugging Face-शैली मॉडल पहचानकर्ता प्रदान करके सर्वर पर मनमाना Python कोड निष्पादित कर सकता है।
सेवा परिनियोजन के आधार पर, यह निम्नलिखित की अनुमति दे सकता है:
यह समस्या दोनों PII एंडपॉइंट के माध्यम से सुलभ है क्योंकि दोनों model_name स्वीकार करते हैं और समान PII निष्कर्षण/मॉडल लोडिंग पथ का उपयोग करते हैं:
POST /pii/extract
Content-Type: application/json
{
"text": "John Doe called 555-1212",
"model_name": "attacker/foo-privacy-filter-bar",
"confidence_threshold": 0.0
}
POST /pii/deidentify
Content-Type: application/json
{
"text": "John Doe called 555-1212",
"model_name": "attacker/foo-privacy-filter-bar",
"confidence_threshold": 0.0
}
इस असुरक्षित नियंत्रण प्रवाह में दो विश्वास-सीमा विफलताएँ हैं:
model_name पर भरोसा किया।trust_remote_code=True के साथ Transformers आर्टिफ़ैक्ट्स लोड करके रिमोट मॉडल रिपॉज़िटरी कोड पर भरोसा किया।डिस्पैचर ने privacy-filter युक्त किसी भी मॉडल पहचानकर्ता को प्राइवेसी-फ़िल्टर परिवार का हिस्सा माना। इससे हमलावर-नियंत्रित पहचानकर्ताओं, उदाहरण के लिए attacker/foo-privacy-filter-bar, को उस कोड पथ तक पहुँचने की अनुमति मिल गई जो विश्वसनीय प्रथम-पक्ष Privacy Filter मॉडल के लिए अभिप्रेत था।
एक बार वहाँ रूट होने के बाद, Transformers auto_map के माध्यम से हमलावर-नियंत्रित कस्टम कोड लोड कर सकता था। यह आयात मॉडल/टोकनाइज़र लोडिंग के दौरान होता है, इससे पहले कि कोई भी उपयोगी इन्फ़रेंस सफल होनी आवश्यक हो। इसलिए एक प्रूफ़ पेलोड इतना छोटा हो सकता है:
from pathlib import Path
Path("marker.txt").write_text(
"custom Transformers code executed via trust_remote_code\n",
encoding="utf-8",
)
poc_exploit.py एक हानिरहित स्थानीय Hugging Face-शैली की मॉडल निर्देशिका बनाता है जिसका नाम privacy-filter शामिल है। उत्पन्न कस्टम Transformers मॉड्यूल आयात होने पर एक मार्कर फ़ाइल लिखते हैं। स्क्रिप्ट फिर उस निर्देशिका को model_name के रूप में उपयोग करके एक परीक्षण OpenMed API इंस्टेंस को अनुरोध भेजती है।
कमजोर OpenMed संस्करणों पर अपेक्षित व्यवहार है:
model_name को स्वीकार करता है।trust_remote_code=True है।केवल स्थानीय परीक्षण इंस्टेंस के विरुद्ध चलाएँ:
pip install -r requirements.txt
python poc_exploit.py --target http://127.0.0.1:8000 --endpoint /pii/extract
यदि OpenMed सेवा कहीं ऐसी जगह चल रही है जहाँ जनरेट की गई स्थानीय डायरेक्टरी तक पहुँच नहीं है, तो एक समतुल्य परीक्षण मॉडल को नियंत्रित Hugging Face रिपॉज़िटरी में प्रकाशित करें और उस पहचानकर्ता को स्पष्ट रूप से पास करें:
python poc_exploit.py \
--target http://127.0.0.1:8000 \
--model-name your-org/foo-privacy-filter-bar \
--marker marker.txt
OpenMed 1.5.2 या उससे नए संस्करण में अपग्रेड करें।
OpenMed 1.5.2 रूटिंग को विश्वास से अलग करता है:
privacy-filter युक्त मनमाने रिपॉज़िटरी नाम अब विश्वसनीय privacy-filter पथ से रूट नहीं होते।PrivacyFilterTorchPipeline में trust_remote_code का डिफ़ॉल्ट False है।OPENMED_TRUSTED_REMOTE_CODE_MODELS के माध्यम से allowlist कर सकते हैं।यदि तत्काल अपग्रेड संभव न हो:
model_name मानों को trust_remote_code=True के साथ Transformers को न भेजें।| तिथि | घटना |
|---|---|
| 18 मई, 2026 | कमज़ोरी VulnCheck को सबमिट की गई |
| 20 मई, 2026 | VulnCheck ने समन्वित प्रकटीकरण आउटरीच शुरू किया |
| 22 मई, 2026 | CVE-2026-47117 अस्थायी रूप से आवंटित |
| 1 जून, 2026 | OpenMed 1.5.2 फ़िक्स की समीक्षा और पुष्टि की गई |
| 2 जून, 2026 | CVE-2026-47117 प्रकाशित |
Sai Teja Erukude द्वारा खोजा और रिपोर्ट किया गया।
प्रकटीकरण VulnCheck के माध्यम से समन्वित किया गया।