क्या शेलशॉक बग ZSH को प्रभावित करता है?


38

क्या शेलशॉक बैश बग ZSH को प्रभावित करता है?

क्या बाश को अपग्रेड करना एकमात्र समाधान है?


एक अलग एक्सचेंज पर इस जवाब के अनुसार , ज़ेडएस कार्यों का निर्यात नहीं करता है। चूँकि शेलशॉक बग इस बैश विशिष्ट विशेषता के कारण था, ऐसे अन्य गोले जिनमें इसकी कमी थी शायद प्रभावित नहीं होनी चाहिए।
लज़्ज़म

जवाबों:


36

नहीं, यह ZSH को प्रभावित नहीं करता है।

तुम अब भी चाहिए बैश को अपडेट करते ही प्रणाली लिपियों के सबसे बैश के लिए लिखा और ShellShock बग की चपेट में रहे हैं।

अपने ZSH परीक्षण करने के लिए यह करें:

env x='() { :;}; echo vulnerable' zsh -c 'echo hello'

यह कोड वास्तव में क्या करता है?

  1. env x='() { :;}; echo vulnerable' चर के अंत में कमांड का उपयोग करके ज्ञात बग के साथ एक पर्यावरण चर बनाता है
  2. zsh -c 'echo hello'साधारण हेलो के साथ ZSH शेल लॉन्च किया है (और x सहित सभी एनवी चर का मूल्यांकन )

यदि आप आउटपुट देखते हैं:

vulnerable
hello

तब आपका ZSH असुरक्षित है। मेरा (5.0.2) नहीं है:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello

1
अगर हम zsh का उपयोग करते हैं लेकिन फिर भी हमारे सिस्टम में बैश है! क्या हमें उस बारे में चिंता करने की ज़रूरत है? यदि नहीं तो क्यों?
दिनेशकुमार

16
@ दिनेशकुमार: हाँ, आपको अभी भी चिंता करनी चाहिए। कारण यह है कि यदि आप zsh का उपयोग कर रहे हैं, तो भी अन्य प्रोग्राम (dhcp का उल्लेख किया गया था, कई PHP अनुप्रयोग संभवतः करेंगे, और कई अन्य प्रोग्राम और एक विशिष्ट लिनक्स मशीन पर स्क्रिप्ट) अभी भी बैश कॉल करेंगे। (वास्तव में, उन्हें नहीं करना चाहिए, लेकिन यह एक बुरी आदत बन गई है।)
hans_meine

2
@stephenmurdoch उबंटू 10.10 काफी पुराना है और 2 वर्षों से समर्थित नहीं है ...
इज़्काटा

2
@ महिमा: कॉलिंग bashसिस्टम उपयोगिताओं के लिए एक बुरी आदत है क्योंकि बैश स्थापित होने की गारंटी नहीं है; /bin/shमानक शेल है और एक सही POSIX शेल दुभाषिया होना आवश्यक है।
फोर्ड

2
fwiw - जब bash को / bin / sh के रूप में चलाया जाता है, तो यह POSIX- संगत शेल के रूप में चलता है। इस मोड में, हालांकि, इसमें बग भी है। env x='() { :;}; echo vulnerable' sh -c 'echo hello'
फॉर्ड

6

से इस लिंक :

आप यह निर्धारित कर सकते हैं कि क्या आप इस परीक्षण को अंजाम देकर 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

यह भी ध्यान दें कि जब लिंक zshell पर निर्देशों का पालन करते हुए बैश को पैच किया जा रहा है, तो मुझे लगता है कि zshell अपने मूल में bash का उपयोग करता है।
वेटेराइज करें

9
ध्यान दें कि एक फॉलोअप किया गया है : env X='() { (a)=>\' bash -c "echo date"वसीयत पर, एक थपथपाहट और बहुत सारी त्रुटियों को फेंकने के बावजूद, एक फ़ाइल का उत्पादन करें echoजिसमें तारीख शामिल है। मैं जानना नहीं चाहता कि क्यों।
जोनास श्फर

@ जोनास रुको, एक फ़ाइल का उत्पादन करें ?! मैं भेद्यता को समझता हूं, लेकिन यह सिर्फ विचित्र है।
डोरकनब सेप

5
@vectorsize अपने मूल में उपयोग नहींzsh करता है । स्पष्ट रूप से आपके उदाहरणों में कहा जाता है। इससे कोई फर्क नहीं पड़ता कि आप इन पंक्तियों को चलाने के लिए किस शेल का उपयोग कर रहे हैं। यह भेद्यता नए शुरू किए गए बैश शेल को प्रभावित करती है, न कि उस शेल से जिसे इसे चलाया जाता है। bashbash
आदेपन

2
@Adaephon तो कोई bashउदाहरणों द्वारा प्रतिस्थापित करना चाहेगा $SHELL
जोनास शफर

6

बाइनरी प्रभावित नहीं है

यह zshशेल निष्पादन योग्य के रूप में प्रभावित नहीं करता है , क्योंकि यह स्रोत कोड में कभी भी त्रुटि नहीं होती है।
वहाँ के बीच कई similaritys हैं bashऔर zshहै, लेकिन वे एक दूसरे से स्वतंत्र कार्यान्वित werer। एक ही विशेषता को दो अलग-अलग तरीकों से लागू किया जाता है, और - इस संदर्भ में अधिक महत्वपूर्ण है - आमतौर पर विभिन्न त्रुटियों के साथ।

लेकिन संवादात्मक उपयोग है

अप्रत्यक्ष रूप से यह zshएक टर्मिनल में शेल के साथ अंतःक्रियात्मक रूप से काम करने को प्रभावित करता है जितना लगभग साथ काम कर रहा है bash

इसका उपयोग bashसिर्फ इतना सामान्य है कि कोई भी इसे कॉल करने से बच सकता है।

बचने के लिए बहुत उपयोग करता है

  • स्क्रिप्ट जिन्हें आप जानते हैं और उपयोग करने की उम्मीद करते हैं zsh, लेकिन वास्तव में होते हैं bash
  • व्याख्याकार के रूप में #!/bin/bashनिर्दिष्ट करने के लिए उपयोग करने वाले शेल स्क्रिप्ट के बहुत सारे bash
  • बहुत सारी कमांड्स जो आप मानते हैं कि बायनेरी हैं, लेकिन शेल स्क्रिप्ट हैं, उनमें से कुछ का उपयोग कर रहे हैं bash

  • कई स्थानों पर जहां एक शेल को स्पष्ट रूप से निष्पादित bashकिया जाता है, उपयोग किया जा सकता है, और संभवतः आवश्यक हो सकता है।

    • जटिल xargsआदेशों की तरह , या gitतर्क से जुड़े उपनाम
    • टर्मिनल एमुलेटर के डिफ़ॉल्ट गोले
    • आप के लिए sudo उपयोगकर्ताओं के खोल
    • आदि।

4

नहीं, 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

हालाँकि, स्क्रिप्ट के लिए स्पष्ट रूप से बैश कॉल करना आम है। ऐसा करने वाले स्क्रिप्ट, और जो बैश-विशिष्ट स्क्रिप्टिंग सुविधाओं का उपयोग करते हैं, वे विफल होंगे यदि बैश उपलब्ध नहीं है। पैचिंग सबसे अच्छा उपाय है।


ऐसा लगता है कि zsh स्पष्ट रूप से " importing function definition" के लिए बैश का उपयोग करते हैं ? मैंने ssh- सर्वर इंजेक्शन के साथ भी परीक्षण किया: ssh testuser@localhost '() { :;}; echo "$SHELL"'जहाँ मैंने testuser's' लॉगिन शेल सेट किया है /bin/zsh, और यह /bin/zsh
गूँजता है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.