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.5%
- मॉडल दिनांक
- 17 अक्टू॰ 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` विधि का भी उपयोग कर सकते हैं।
स्रोत
CVE-2024-24576 कमांड इंजेक्शन भेद्यता के लिए प्रूफ ऑफ कॉन्सेप्ट जो Windows पर Rust में है, Julia में कार्यान्वित।
Windows BAT फ़ाइल निष्पादन में तैयार तर्कों के माध्यम से कमांड इंजेक्शन प्रदर्शित करने वाला प्रूफ-ऑफ-कॉन्सेप्ट, मनमाना कमांड निष्पादन प्राप्त करने के लिए CVE-2024-24576 का शोषण।
CVE-2024-24576 अवधारणा का प्रमाण
Windows पर Nim में कमांड इंजेक्शन (BatBadBut) भेद्यता प्रदर्शित करने वाला प्रूफ-ऑफ-कॉन्सेप्ट, execProcess और execShellCmd फ़ंक्शन में पेलोड परीक्षण के साथ।
CVE-2024-24576 उपयोग केस का उदाहरण।
CVE-2024-24576 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Rust में लागू किया गया है, प्रभावित सिस्टमों में कमजोरी को प्रदर्शित और परीक्षण करने के लिए।
CVE-2024-24576 भेद्यता "BatBadBut" के लिए PoC
जिम्मेदारीपूर्ण उपयोग
भेद्यता जानकारी का उपयोग केवल उन प्रणालियों पर करें जिनके मालिक आप हैं या परीक्षण के लिए अधिकृत हैं। किटप्लॉइट सार्वजनिक अनुसंधान मेटाडेटा से लिंक करता है और शोषण कोड या दुर्भावनापूर्ण पेलोड को संग्रहीत नहीं करता है।