CVE-2024-24576
Rust का std::process::Command Windows पर बैच फ़ाइलों के तर्कों को ठीक से escape नहीं करता था।
- प्रकाशित
- 9 अप्रैल 2024
- अद्यतन
- 4 नव॰ 2025
- सीएनए असाइन करना
- GitHub_M
- साक्ष्य देखे गए
- 8 अग॰ 2026
प्राथमिक सीवीएसएस
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:Hमध्यम · अगले 30 दिन
- प्रतिशत
- 97.4%
- मॉडल दिनांक
- 21 सित॰ 2026
ईपीएसएस एक सांख्यिकीय अनुमान है, कोई निश्चितता या प्रभाव का माप नहीं। इसे सीवीएसएस, केईवी स्थिति, एक्सपोज़र और अपने वातावरण के साथ मिलाएं।
सारांश
Rust एक प्रोग्रामिंग भाषा है। Rust Security Response WG को सूचित किया गया कि Rust मानक पुस्तकालय (standard library) संस्करण 1.77.2 से पहले Windows पर `Command` का उपयोग करके बैच फ़ाइलों (`bat` और `cmd` एक्सटेंशन वाली) को चलाते समय आर्ग्युमेंट्स को सही ढंग से escape नहीं करता था। स्पॉन की गई प्रक्रिया (spawned process) को पारित आर्ग्युमेंट्स को नियंत्रित करने में सक्षम एक हमलावर escape को दरकिनार करके मनमाने शेल कमांड निष्पादित कर सकता था। इस भेद्यता की गंभीरता उन लोगों के लिए क्रिटिकल है जो Windows पर अविश्वसनीय आर्ग्युमेंट्स के साथ बैच फ़ाइलों को चलाते हैं। कोई अन्य प्लेटफ़ॉर्म या उपयोग प्रभावित नहीं है। `Command::arg` और `Command::args` API अपने दस्तावेज़ीकरण में बताते हैं कि आर्ग्युमेंट्स स्पॉन की गई प्रक्रिया को यथावत पारित किए जाएंगे, चाहे आर्ग्युमेंट्स की सामग्री कुछ भी हो, और किसी शेल द्वारा उनका मूल्यांकन नहीं किया जाएगा। इसका अर्थ है कि अविश्वसनीय इनपुट को आर्ग्युमेंट के रूप में पारित करना सुरक्षित होना चाहिए। Windows पर, इसका कार्यान्वयन अन्य प्लेटफ़ॉर्म की तुलना में अधिक जटिल है, क्योंकि Windows API स्पॉन की गई प्रक्रिया को केवल एक एकल स्ट्रिंग प्रदान करता है जिसमें सभी आर्ग्युमेंट्स होते हैं, और उन्हें विभाजित करना स्पॉन की गई प्रक्रिया पर निर्भर है। अधिकांश प्रोग्राम मानक C रन-टाइम argv का उपयोग करते हैं, जो व्यवहार में आर्ग्युमेंट्स को विभाजित करने का अधिकतर सुसंगत तरीका देता है। हालाँकि एक अपवाद `cmd.exe` है (जिसका उपयोग अन्य चीजों के अलावा बैच फ़ाइलों को निष्पादित करने के लिए किया जाता है), जिसके पास अपना स्वयं का आर्ग्युमेंट विभाजन लॉजिक है। यह मानक पुस्तकालय को बैच फ़ाइलों में पारित आर्ग्युमेंट्स के लिए कस्टम escape लागू करने के लिए मजबूर करता है। दुर्भाग्य से यह रिपोर्ट किया गया कि हमारा escape लॉजिक पर्याप्त गहन नहीं था, और दुर्भावनापूर्ण आर्ग्युमेंट्स को पारित करना संभव था जिसके परिणामस्वरूप मनमाना शेल निष्पादन हो सकता था। `cmd.exe` की जटिलता के कारण, हमने कोई ऐसा समाधान नहीं पहचाना जो सभी मामलों में आर्ग्युमेंट्स को सही ढंग से escape कर सके। अपनी API गारंटियों को बनाए रखने के लिए, हमने escape कोड की मजबूती में सुधार किया, और `Command` API को बदल दिया ताकि जब वह किसी आर्ग्युमेंट को सुरक्षित रूप से escape न कर सके तो `InvalidInput` त्रुटि लौटाए। यह त्रुटि प्रक्रिया को स्पॉन करते समय उत्सर्जित होगी। यह सुधार Rust 1.77.2 में शामिल है। ध्यान दें कि बैच फ़ाइलों के लिए नया escape लॉजिक रूढ़िवादी पक्ष में त्रुटि करता है, और वैध आर्ग्युमेंट्स को अस्वीकार कर सकता है। जो लोग स्वयं escape लागू करते हैं या Windows पर केवल विश्वसनीय इनपुट संभालते हैं, वे मानक पुस्तकालय की escape लॉजिक को दरकिनार करने के लिए `CommandExt::raw_arg` विधि का भी उपयोग कर सकते हैं।
स्रोत
जिम्मेदारीपूर्ण उपयोग
भेद्यता जानकारी का उपयोग केवल उन प्रणालियों पर करें जिनके मालिक आप हैं या परीक्षण के लिए अधिकृत हैं। किटप्लॉइट सार्वजनिक अनुसंधान मेटाडेटा से लिंक करता है और शोषण कोड या दुर्भावनापूर्ण पेलोड को संग्रहीत नहीं करता है।