क्या शेलशॉक बैश बग ZSH को प्रभावित करता है?
क्या बाश को अपग्रेड करना एकमात्र समाधान है?
क्या शेलशॉक बैश बग ZSH को प्रभावित करता है?
क्या बाश को अपग्रेड करना एकमात्र समाधान है?
जवाबों:
नहीं, यह ZSH को प्रभावित नहीं करता है।
तुम अब भी चाहिए बैश को अपडेट करते ही प्रणाली लिपियों के सबसे बैश के लिए लिखा और ShellShock बग की चपेट में रहे हैं।
अपने ZSH परीक्षण करने के लिए यह करें:
env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
यह कोड वास्तव में क्या करता है?
env x='() { :;}; echo vulnerable'
चर के अंत में कमांड का उपयोग करके ज्ञात बग के साथ एक पर्यावरण चर बनाता हैzsh -c 'echo hello'
साधारण हेलो के साथ ZSH शेल लॉन्च किया है (और x सहित सभी एनवी चर का मूल्यांकन )यदि आप आउटपुट देखते हैं:
vulnerable
hello
तब आपका ZSH असुरक्षित है। मेरा (5.0.2) नहीं है:
$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
bash
सिस्टम उपयोगिताओं के लिए एक बुरी आदत है क्योंकि बैश स्थापित होने की गारंटी नहीं है; /bin/sh
मानक शेल है और एक सही POSIX शेल दुभाषिया होना आवश्यक है।
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
से इस लिंक :
आप यह निर्धारित कर सकते हैं कि क्या आप इस परीक्षण को अंजाम देकर CVE-2014-6271 में मूल समस्या के प्रति संवेदनशील हैं:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'
यदि आप उस कमांड के आउटपुट में शब्द को कमजोर देखते हैं तो आपका बैश असुरक्षित है और आपको अपडेट करना चाहिए। नीचे OS X 10.8.5 से एक कमजोर संस्करण है:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'
vulnerable
hello
निम्न आउटपुट गैर-असुरक्षित बैश संस्करण का एक उदाहरण है।
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
env X='() { (a)=>\' bash -c "echo date"
वसीयत पर, एक थपथपाहट और बहुत सारी त्रुटियों को फेंकने के बावजूद, एक फ़ाइल का उत्पादन करें echo
जिसमें तारीख शामिल है। मैं जानना नहीं चाहता कि क्यों।
zsh
करता है । स्पष्ट रूप से आपके उदाहरणों में कहा जाता है। इससे कोई फर्क नहीं पड़ता कि आप इन पंक्तियों को चलाने के लिए किस शेल का उपयोग कर रहे हैं। यह भेद्यता नए शुरू किए गए बैश शेल को प्रभावित करती है, न कि उस शेल से जिसे इसे चलाया जाता है। bash
bash
bash
उदाहरणों द्वारा प्रतिस्थापित करना चाहेगा $SHELL
।
यह zsh
शेल निष्पादन योग्य के रूप में प्रभावित नहीं करता है , क्योंकि यह स्रोत कोड में कभी भी त्रुटि नहीं होती है।
वहाँ के बीच कई similaritys हैं bash
और zsh
है, लेकिन वे एक दूसरे से स्वतंत्र कार्यान्वित werer। एक ही विशेषता को दो अलग-अलग तरीकों से लागू किया जाता है, और - इस संदर्भ में अधिक महत्वपूर्ण है - आमतौर पर विभिन्न त्रुटियों के साथ।
अप्रत्यक्ष रूप से यह zsh
एक टर्मिनल में शेल के साथ अंतःक्रियात्मक रूप से काम करने को प्रभावित करता है जितना लगभग साथ काम कर रहा है bash
।
इसका उपयोग bash
सिर्फ इतना सामान्य है कि कोई भी इसे कॉल करने से बच सकता है।
zsh
, लेकिन वास्तव में होते हैं bash
। #!/bin/bash
निर्दिष्ट करने के लिए उपयोग करने वाले शेल स्क्रिप्ट के बहुत सारे bash
।बहुत सारी कमांड्स जो आप मानते हैं कि बायनेरी हैं, लेकिन शेल स्क्रिप्ट हैं, उनमें से कुछ का उपयोग कर रहे हैं bash
।
कई स्थानों पर जहां एक शेल को स्पष्ट रूप से निष्पादित bash
किया जाता है, उपयोग किया जा सकता है, और संभवतः आवश्यक हो सकता है।
xargs
आदेशों की तरह , या git
तर्क से जुड़े उपनामनहीं, Shellshock सीधे Zsh को प्रभावित नहीं करती है।
हालाँकि कई वातावरण जो डिफ़ॉल्ट शेल के रूप में zsh का उपयोग करते हैं, उनमें भी बैश स्थापित है। Zsh सहित किसी भी शेल का उपयोग एक समझौता बैश शेल को स्पॉन करने के लिए किया जा सकता है:
zsh ❯ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Fri 26 Sep 2014 12:05:57 BST
इससे बचाव के लिए आपको बैश के किसी भी अनावश्यक संस्करण को पैच, अनइंस्टॉल या डिसेबल करना चाहिए। आप सिस्टम बैश को इसके साथ अक्षम कर सकते हैं chmod
:
$ chmod a-x /bin/bash
हालाँकि, स्क्रिप्ट के लिए स्पष्ट रूप से बैश कॉल करना आम है। ऐसा करने वाले स्क्रिप्ट, और जो बैश-विशिष्ट स्क्रिप्टिंग सुविधाओं का उपयोग करते हैं, वे विफल होंगे यदि बैश उपलब्ध नहीं है। पैचिंग सबसे अच्छा उपाय है।
importing function definition
" के लिए बैश का उपयोग करते हैं ? मैंने ssh- सर्वर इंजेक्शन के साथ भी परीक्षण किया: ssh testuser@localhost '() { :;}; echo "$SHELL"'
जहाँ मैंने testuser
's' लॉगिन शेल सेट किया है /bin/zsh
, और यह /bin/zsh