स्थिति
Apple ने शेलशॉक और संबंधित कमजोरियों के लिए बैश सिक्योरिटी फिक्स को " OS X बैश अपडेट 1.0 " के रूप में जारी किया है । उन्हें OS X Mountain Lion v10.8.5 या OS X Mavericks v10.9.5 का उपयोग करने वाले लोगों के लिए सामान्य सिस्टम अपडेट के माध्यम से स्थापित किया जा सकता है (वे सुरक्षा अद्यतन 2014-005 में शामिल हैं ) और मैन्युअल रूप से भी इंस्टॉल किए जा सकते हैं। ओएस एक्स लायन v10.7.5 और ओएस एक्स लायन सर्वर v10.7.5 के लिए आधिकारिक ऐप्पल फिक्स भी उपलब्ध हैं, लेकिन ये केवल मैनुअल डाउनलोड के माध्यम से उपलब्ध हैं। ऑपरेटिंग सिस्टम संस्करण पर आधारित विभिन्न URL के माध्यम से सुरक्षा फ़िक्सेस उपलब्ध हैं:
(यदि नए पैच जारी किए गए हैं, तो उन्हें यहां रखें लेकिन कृपया इन मौजूदा लोगों को संदर्भ के लिए रखें।)
Apple पैच शेलशॉक और कई अन्य कमजोरियों का ख्याल रखता है और ज्यादातर लोगों के लिए ठीक है। tl; dr लोग यहां पढ़ना बंद कर सकते हैं।
फिर भी, शेलशॉक बग पर ध्यान आकर्षित करने के कारण कई शोधकर्ताओं ने बैश पर कठोर नज़र डाली और अधिक से अधिक (शोषण करने के लिए कठिन) कमजोरियों को ढूंढा जा रहा है। यदि आप सुरक्षा के बारे में अत्यधिक चिंतित हैं (क्योंकि हो सकता है कि आप ओएस एक्स सर्वर को सार्वजनिक रूप से उपलब्ध वेब साइट की मेजबानी के लिए चला रहे हों) तो आप चाहते हैं कि वे कमजोरियों और पैच के साथ बने रहें (क्योंकि वे खुद को कोसने से बचते हैं)। अन्यथा, इसके बारे में चिंता न करें।
भविष्य में कुछ समय के लिए किसी अन्य अपडेट को जारी करने के लिए ऐप्पल की तलाश करें जब धूल आगे की कमज़ोरियों का पता लगा ले।
बैश 3.2, पैच 52, 53, और 54 (जो बैश 4.3 पैच 25, 26 और 27 के अनुरूप हैं) के लिए बैश के पैच का एक आधिकारिक सेट उपलब्ध है जो CVE-2014-6271 और CVE-2014 -7169 दोनों को ठीक करता है, साथ ही नीचे 'गेम ओवर' प्रदर्शित किया गया है। यह मेरे ( @alblue ) द्वारा परीक्षण किया गया है और पोस्ट को तदनुसार अपडेट किया गया है (और फिर अतिरिक्त अपडेट किए गए थे: पोस्ट के लिए संशोधन 41 देखें जो पैच 54 पर रुकता है)।
बैश के खिलाफ कई अतिरिक्त कमजोरियां बताई गई हैं। मिशल ज़ाल्वेस्की की पोस्ट के अनुसार यदि आपके पास पैच 54 (और संभवतः एप्पल के आधिकारिक पैच) "इन व्यक्तिगत बगों की स्थिति के बारे में ध्यान देने का कोई मतलब नहीं है, क्योंकि उन्हें अब सुरक्षा जोखिम नहीं उठाना चाहिए:"
CVE-2014-6271 - स्टीफन द्वारा पाया गया मूल RCE। अन्य संस्करणों के लिए bash43-025 और इसी सेप 24 प्रविष्टियों द्वारा निर्धारित।
CVE-2014-7169 - फ़ाइल निर्माण / टोकन खपत बग तावीज़ द्वारा पाया गया। Bash43-026 और सह द्वारा निर्धारित (26 सितंबर)
CVE-2014-7186 - फ्लोरियन और टॉड द्वारा पाया गया संभवतः 10 सेकंड के लिए यहां कोई-सेक-रिस्क-डॉक्स क्रैश। Bash43-028 और सह द्वारा निर्धारित (1 अक्टूबर)।
सीवीई-2014-7187 - एक गैर-दुर्घटनाग्रस्त, शायद फ्लोरियन द्वारा बंद-एक-जोखिम-रहित। Bash43-028 और सह द्वारा निर्धारित (1 अक्टूबर)।
CVE-2014-6277 - अनइंस्टॉलिज्ड मैमोरी इश्यू, लगभग निश्चित रूप से मिशाल ज़ाल्स्की द्वारा पाया गया RCE। अभी तक कोई विशिष्ट पैच नहीं।
CVE-2014-6278 - Michal Zalewski द्वारा पाया गया कमांड इंजेक्शन RCE। अभी तक कोई विशिष्ट पैच नहीं।
यह बहुत भ्रामक हो जाता है। सौभाग्य से, चेत रमी, आधिकारिक बैश अनुचर ने पैच मैपिंग के लिए एक CVE पोस्ट किया । उनके पोस्ट में बैश 4.3 के लिए पैचेज का उल्लेख है, मैंने (@OldPro) ने उन्हें बैश 3.2 के लिए पैच का अनुवाद किया है, जो कि OS X पर लागू होता है।
bash32-052 CVE-2014-6271 2014-09-24
bash32-053 CVE-2014-7169 2014-09-26
bash32-054 exported function namespace change 2014-09-27 ("Game Over")
bash32-055 CVE-2014-7186/CVE-2014-7187 2014-10-01
bash32-056 CVE-2014-6277 2014-10-02
bash32-057 CVE-2014-6278 2014-10-05
एक समय और अधिक विस्तार के लिए डेविड ए व्हीलर की पोस्ट देखें ।
@alblue ने पैच 55 के माध्यम से बिल्ड निर्देशों को पोस्ट किया। I (@OldPro) ने निर्देशों में पैच 56 और 57 को जोड़ा, लेकिन इसका परीक्षण नहीं किया है।
मूल भेद्यता के लिए परीक्षण
आप यह निर्धारित कर सकते हैं कि क्या आप इस परीक्षण को अंजाम देकर CVE-2014-6271 में मूल समस्या के प्रति संवेदनशील हैं :
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
उपरोक्त आउटपुट एक गैर-असुरक्षित bash
संस्करण का एक उदाहरण है । यदि आप vulnerable
उस कमांड के आउटपुट में शब्द देखते हैं, तो आपकी bash
स्थिति कमजोर है और आपको अपडेट करना चाहिए। नीचे OS X 10.8.5 से एक कमजोर संस्करण है:
नई भेद्यता के लिए परीक्षण
मूल पोस्ट और बैश 3.2.52 (1) के लिए एक अद्यतन किया गया है जो अभी भी भेद्यता की भिन्नता के प्रति संवेदनशील है, जिसे CVE-2014-7169 में परिभाषित किया गया है
$ rm -f echo
$ 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'
Thu 25 Sep 2014 08:50:18 BST
उपरोक्त आउटपुट एक कमजोर bash
संस्करण का एक उदाहरण है । यदि आपको उस कमांड के आउटपुट में कोई तारीख दिखाई देती है तो आपकी bash
स्थिति कमजोर है।
"गेम ओवर" को रोकने के लिए ऑटो-आयातित कार्यों को अक्षम करना
शोधकर्ताओं ने इसे भेद्यता के रूप में वर्गीकृत किए बिना नोट किया, कि कोई स्क्रिप्ट ऑटो-इम्पोर्टेड का उपयोग करके एक सब-टाइप में फ़ंक्शन को हाईजैक कर सकती है:
$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over
एक प्रभावित सिस्टम पर उपरोक्त कोड Game Over
उस निर्देशिका सूची के बजाय प्रदर्शित होगा जिसकी आप अपेक्षा करेंगे ls
। जाहिर है, echo 'Game Over'
किसी भी नापाक कोड द्वारा प्रतिस्थापित किया जा सकता है जो आप चाहते हैं। यह "गेम ओवर" बग के रूप में जाना जाता है।
पैच 54 की उपलब्धता से पहले, NetBSD और FreeBSD दोनों ने डिफ़ॉल्ट रूप से ऑटो-इंपोर्टिंग बैश फ़ंक्शन को अक्षम कर दिया, आंशिक रूप से "गेम ओवर" को रोकने के लिए, लेकिन मुख्य रूप से पार्सर में कोई और त्रुटियां शामिल करने के लिए (जैसे CVE-2014-7169 ) निरंतर खोजा जा रहा है, और एक नई कमांड लाइन को जोड़ा गया है--import-functions
पुराने डिफ़ॉल्ट व्यवहार को फिर से सक्षम करने के लिए। मैं (@alblue) ने दूसरों के लिए एक पैच (3.2.53 के खिलाफ) का उपयोग करने के लिए तैयार किया है यदि वे इस व्यवहार को भी अपनाना चाहते हैं और इसे नीचे शामिल किया है। डिफ़ॉल्ट रूप से यह पैच नीचे दी गई स्क्रिप्ट में सक्षम नहीं है। I (@OldPro) का मानना है कि यह पैच अब आवश्यक नहीं है या एक अच्छा विचार है, क्योंकि यह पीछे की संगतता को तोड़ता है और इससे बचाव करने वाली कमजोरियों को पैच 54 और पहले के पैच द्वारा बहुत अच्छी तरह से संबोधित किया जाता है, और इस अनौपचारिक पैच को सक्षम करने से भविष्य के पैच को लागू होने से रोकता है। ।
(प्रश्न संपादकों पर ध्यान दें; कृपया इसे डिफ़ॉल्ट रूप से सक्षम न करें, क्योंकि यह एक अनौपचारिक पैच है।)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
export ADD_IMPORT_FUNCTIONS_PATCH=YES
बिल्ड को चलाने से पहले पैच को चलाकर सक्षम किया जा सकता है । ध्यान दें कि इस पैच को सक्षम करने से पैच 54 और भविष्य के किसी पैच को अक्षम कर दिया जाएगा क्योंकि भविष्य के पैच को अनौपचारिक पैच के साथ संगत होने की गारंटी नहीं दी जा सकती है।
Apple पैच में गेम ओवर भेद्यता है, जैसे
जैसा कि @ake_____ ने ट्विटर पर बताया है कि आधिकारिक एप्पल पैच अभी भी पर्यावरणीय निष्पादन के लिए कमजोर है:
$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over
उपयोगकर्ताओं को यह स्वयं तय करना चाहिए कि यह कितना महत्वपूर्ण है। मुझे (@OldPro) लगता है कि यह चिंता की कोई बात नहीं है क्योंकि इस व्यवहार के लिए कोई ज्ञात कारनाम नहीं है (इसे सीवीई पहचानकर्ता भी नहीं दिया गया था) क्योंकि सामान्य रूप से अनपेक्षित दूरस्थ हमलावरों में एक पर्यावरण चर का नाम निर्धारित नहीं किया जा सकता है और विशेषाधिकारों के साथ हमलावर नहीं कर सकते हैं। इसका उपयोग वे विशेषाधिकार प्राप्त करने के लिए कर सकते हैं जो उनके पास पहले से नहीं हैं (कम से कम एक अतिरिक्त भेद्यता का शोषण किए बिना नहीं)।
थोड़ी पृष्ठभूमि प्रदान करने के लिए, बैश आपको फ़ंक्शंस को परिभाषित करने की अनुमति देता है, और इसके अलावा आप कमांड के माध्यम से उन फ़ंक्शंस को निर्यात करने की अनुमति देता है export -f
। यह फ़ंक्शन नाम के समान मान के साथ फ़ंक्शन के साथ एक पर्यावरण चर बनाकर कार्यान्वित किया जाता था। इसलिए
$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over
ऐसा इसलिए हुआ क्योंकि export -f ls
नाम का एक पर्यावरण चर बनाया गया था ls
। "गेम ओवर" भेद्यता यह थी कि आप सीधे फ़ंक्शन को परिभाषित किए बिना इस पर्यावरण चर को बना सकते थे, जिसका मतलब था कि यदि आप सही चर नाम को इंजेक्ट कर सकते हैं तो आप एक कमांड को हाईजैक कर सकते हैं। Apple ने इसे सही नाम के साथ एक वैरिएबल बनाने के लिए कठिन बनाने की कोशिश की। आधिकारिक बैश पैच 54 वास्तव में चर नाम का उपयोग करके सही नाम के साथ एक चर बनाना असंभव बनाता है, %
जिसमें एक वर्ण है जिसे एक चर नाम की अनुमति नहीं है, प्रभावी रूप से निर्यात की गई फ़ंक्शन परिभाषाओं को एक अलग, आरक्षित नामस्थान में डालते हैं।
यदि उपरोक्त में से कोई भी आपके लिए समझ में नहीं आता है, तो इसके बारे में चिंता न करें। आप अभी के लिए Apple पैच के साथ ठीक हैं।
सिस्टम बायनेरिज़
बाश v3.2.51 के साथ OS X 10.9.5 (फिलहाल नवीनतम स्थिर रिलीज) जहाज:
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
आप इस प्रकार से बैश को प्राप्त कर सकते हैं और पुनः प्राप्त कर सकते हैं , बशर्ते कि आपने Xcode स्थापित किया हो (और xcodebuild
लाइसेंस स्वीकार करने से पहले कम से कम एक बार चला हो):
$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin
(नोट: आप उपरोक्त कोड ब्लॉक को कॉपी-और-पेस्ट करके, टर्मिनल में जाकर और फिर रन करके चला सकते हैं pbpaste | cut -c 2- | sh
। इंटरनेट से रैंडम स्क्रिप्ट को चलाते समय हमेशा ध्यान रखें ...)
इसके बाद, बैश संस्करण v3.2.57 होना चाहिए:
$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
सुरक्षा के लिए, और परीक्षण के बाद, मैं सुझाव देता हूं कि आप chmod -x
यह सुनिश्चित करने के लिए पुराने संस्करणों का उपयोग न करें या उन्हें बैकअप साइट पर स्थानांतरित न करें।
$ sudo chmod a-x /bin/bash.old /bin/sh.old
अन्य उत्तरों में MacPorts या Homebrew का उपयोग करने वालों के लिए समाधान हैं; ये समस्या को ठीक नहीं करते, वे बस बैश के अतिरिक्त संस्करण स्थापित करते हैं। कृपया उन उत्तरों को देखें यदि आप उन्हें विशेष रूप से अपग्रेड करना चाहते हैं।
धन्यवाद
चेत के लिए धन्यवाद, जो बैश की देखभाल करता है, और इन पैच को उपलब्ध करा रहा है। बाकी सभी को धन्यवाद जिन्होंने इस पर टिप्पणी की और समय के साथ इसमें सुधार किया।
अब Apple ने असली फिक्स जारी किया है, हालांकि यह अभी भी उपयोगी हो सकता है। क्योंकि उन्होंने केवल लायन और अप के लिए एक फिक्स जारी किया था, और आधिकारिक पैच GNU बैश, संस्करण 3.2.53 (1) -release (x86_64-apple-darwin13) प्रदान करता है, हालांकि, गेम ओवर बग अभी भी कुछ हद तक कमजोर है। इस बिंदु पर, 3.2.57 के खिलाफ बैश के अपने स्वयं के संस्करण का पुनर्निर्माण शायद एप्पल के पैच पर निर्भर होने से अधिक सुरक्षित है, जब तक कि आप इसे गलत न करें।