
CVE-2026-4372: खतरा मॉडल, मूल-कारण विश्लेषण, प्रतिकृति और पहचान
Hugging Face
transformersमें एक गंभीर रिमोट कोड एक्ज़ीक्यूशन (RCE) बग का रक्षात्मक विश्लेषण।
| फ़ील्ड | मान |
|---|---|
| पहचानकर्ता | CVE-2026-4372 / GHSA-29pf-2h5f-8g72 |
| घटक | Hugging Face transformers |
| वर्ग | रिमोट कोड एक्ज़ीक्यूशन (CWE-94, कोड इंजेक्शन) |
| प्रवेश बिंदु | AutoModelForCausalLM.from_pretrained(), जब कोई मॉडल लोड होता है |
| तंत्र | मॉडल की config.json में एक अटेंशन सेटिंग (attn_implementation / _attn_implementation_internal) लाइब्रेरी को हमलावर का कोड डाउनलोड और चलाने पर मजबूर करती है |
| मुख्य विशेषता | trust_remote_code=False को बायपास करता है, वही सेटिंग जिस पर उपयोगकर्ता ठीक इसी चीज़ को रोकने के लिए भरोसा करते हैं |
| इसमें ठीक किया गया | transformers 5.3.0 |
जिस उपयोगकर्ता ने सुरक्षित रहने के लिए जानबूझकर trust_remote_code=False छोड़ा था, वह भी उजागर था।
नीचे दिए गए विवरणों को अंतिम मानने से पहले आधिकारिक स्रोतों के विरुद्ध जाँचें:
दो ट्रिगर विवरण प्रचलन में हैं:
config.json अटेंशन फ़ील्ड (_attn_implementation_internal)।kernels पैकेज, जो अक्सर transformers[all] के माध्यम से इंस्टॉल होता है।वे संभवतः एक ही पथ हैं: अटेंशन फ़ील्ड एक Hub रिपॉज़िटरी का नाम देता है, और
kernels पैकेज उससे कोड डाउनलोड और चलाता है। यहाँ दिए गए फ़ील्ड नामों को
तब तक अनंतिम मानें जब तक ठीक करने वाला कमिट उनकी पुष्टि न कर दे।
[ Model repo on the Hub ] untrusted source
│ config.json, tokenizer, weights, (code)
▼
[ Download to local cache ]
▼
[ Read config.json ] settings become a config object
▼
[ Pick model class + attention type ]
▼
[ Build model, load weights ]
▼
[ Model runs in the user's process, with the user's permissions ]
| # | सीमा | वह गार्ड जो लागू होना चाहिए |
|---|---|---|
| TB-1 | Hub → स्थानीय डिस्क | विश्वसनीय रेपो, एक निश्चित कमिट पर पिनिंग |
| TB-2 | कॉन्फ़िग फ़ाइल → कॉन्फ़िग ऑब्जेक्ट | केवल ज्ञात, सुरक्षित मानों की अनुमति देना |
| TB-3 | कॉन्फ़िग ऑब्जेक्ट → चल रहा कोड | trust_remote_code |
| TB-4 | मॉडल → ऑपरेटिंग सिस्टम | सैंडबॉक्स, न्यूनतम विशेषाधिकार |
यह बग TB-3 पर एक विफलता है: कॉन्फ़िग फ़ाइल से एक मान trust_remote_code जाँच पास किए बिना कोड निष्पादन तक पहुँच गया।
हर मामले में शिकार केवल सामान्य कॉल चलाता है,
AutoModelForCausalLM.from_pretrained("<repo-id>")।
trust_remote_code रेपो कोड चलाने के एक तरीके की रक्षा करता है: कस्टम modeling_*.py फ़ाइलें।
attention सेटिंग एक दूसरा तरीका था जो कभी उस गार्ड से नहीं गुज़रा।
untrusted config.json attention setting
│
▼
"pick attention type" logic
│ never checks:
✗ ─────────────▶ trust_remote_code
▼
download + run code from the Hub (via `kernels`)
_ उपसर्ग) अभी भी एक अविश्वसनीय फ़ाइल से सेट किया जा सकता था।kernels) ने स्थापित होने पर चुपचाप हमले को सक्षम कर दिया, उदाहरण के लिए transformers[all] के माध्यम से।खतरनाक क्रिया की रक्षा करें, उस तक के किसी एक मार्ग की नहीं। हर वह पथ जो "कोड चलाने" तक ले जा सकता है, उसे उसी जाँच से गुज़रना चाहिए।
रक्षा एक स्व-निहित स्क्रिप्ट है, defence/safe_load.py।
इसका फ़ंक्शन safe_from_pretrained() from_pretrained() को प्रतिस्थापित करता है और किसी भी मॉडल के लोड होने से पहले चार जाँचें चलाता है। यदि कोई एक विफल हो जाती है, तो यह UnsafeModelLoad उठाता है और कुछ भी लोड नहीं होता।
| # | जाँच | यह क्या करता है |
|---|---|---|
| 1 | संस्करण | यदि transformers 5.3.0 से पुराना है तो मना कर देता है। यही असली समाधान है। |
| 2 | Kernels | पुराने संस्करण पर, यदि kernels पैकेज स्थापित है तो मना कर देता है, क्योंकि हमले को इसकी आवश्यकता होती है। |
| 3 | Config | मॉडल की config फ़ाइलें पढ़ता है और यदि उनमें कोई जोखिम भरी सेटिंग है (नीचे देखें) तो मना कर देता है। Hub मॉडल एक ही commit पर जाँचे और लोड किए जाते हैं। |
| 4 | रिमोट कोड | हमेशा trust_remote_code=False सेट करता है। केवल अच्छा अभ्यास: यह CVE इसे बायपास कर देता है। |
पुराने संस्करण को जाँच 1 पर मना कर दिया जाता है। जाँच 2 और 3 केवल पुराने संस्करण पर तभी चलती हैं जब लैब-केवल विकल्प allow_vulnerable_env=True सेट हो।
जाँच 3 क्या रोकती है:
attn_implementation, _attn_implementation,
_attn_implementation_internal) जो अंतर्निहित नहीं है। केवल eager, sdpa,
flash_attention_2, flash_attention_3 और flex_attention की अनुमति है, इसलिए
attacker-org/evil-kernel जैसा मान अवरुद्ध हो जाता है, भले ही वह किसी नेस्टेड सब-कॉन्फ़िग के अंदर हो।_attn_implementation_internal, auto_map और custom_pipelines।config= के साथ पास किया गया config, क्योंकि यह जाँच को छोड़ देगा।Hub मॉडल के लिए, केवल config फ़ाइलें डाउनलोड होती हैं, कभी भी weights या कोड नहीं। उन्हें एक निश्चित commit पर डाउनलोड किया जाता है, और फिर मॉडल उसी commit से लोड किया जाता है, इसलिए जाँच और लोड के बीच फ़ाइलें बदली नहीं जा सकतीं। चेतावनियों की समीक्षा के बाद, कोई व्यक्ति accept_findings=True के साथ जाँच 3 को ओवरराइड कर सकता है।
| स्थिति | हमले को क्या रोकता है |
|---|---|
transformers 5.3.0 या नया | जाँच 1 |
पुराना संस्करण, kernels स्थापित | जाँच 2 |
| पुराना संस्करण, config में जोखिम भरी सेटिंग | जाँच 3 |
| जाँच के बाद रेपो बदला गया | जाँच 3 (एक ही commit जाँचा और लोड किया गया) |
सीमा: जाँच 3 केवल ऊपर सूचीबद्ध सेटिंग्स को जानती है, इसलिए यह किसी नए हमले को नहीं पकड़ सकती। transformers>=5.3.0 में अपग्रेड करना ही एकमात्र पूर्ण समाधान है।
पहचान घटक CVE-2026-4372 से जुड़े संभावित असुरक्षित Hugging Face मॉडल कॉन्फ़िगरेशन और कमजोर निर्भरताओं की पहचान करता है। यह दो स्वतंत्र पहचान तंत्र प्रदान करता है: स्थिर कॉन्फ़िगरेशन स्कैनिंग और निर्भरता विश्लेषण।
रक्षा घटक के विपरीत, ये उपकरण मॉडल लोड किए बिना या अविश्वसनीय कोड निष्पादित किए बिना संभावित सुरक्षा जोखिमों की रिपोर्ट करते हैं।
फ़ाइल: src/detection/static_detector.py
स्थिर डिटेक्टर config.json फ़ाइलों को पार्स करता है और सुरक्षा-संवेदनशील फ़ील्ड के लिए नेस्टेड JSON ऑब्जेक्ट्स और ऐरे की पुनरावर्ती रूप से जाँच करता है।
निम्नलिखित फ़ील्ड की निगरानी की जाती है:
| कॉन्फ़िगरेशन फ़ील्ड | पहचान का उद्देश्य |
|---|---|
_attn_implementation_internal | CVE-2026-4372 से जुड़ा आंतरिक attention कॉन्फ़िगरेशन फ़ील्ड |
_experts_implementation_internal | समीक्षा आवश्यक अतिरिक्त आंतरिक कार्यान्वयन फ़ील्ड |
auto_map | कस्टम मॉडल कार्यान्वयन कोड का संदर्भ दे सकता है |
custom_pipelines | कस्टम पाइपलाइन कार्यान्वयन का संदर्भ दे सकता है |
उपयोग: