CVE-2014-6271 बैश भेद्यता (शेलशॉक) क्या है और मैं इसे कैसे ठीक करूं?


141

हाल ही में, "CVE-2014-6271" ( USN-2362-1 देखें ) के बारे में खबरें आ रही हैं , जो बैश में एक भेद्यता है। मुझे कैसे पता चलेगा कि मैं इससे प्रभावित हूं, मैं इसे कैसे ठीक कर सकता हूं, और मुझे क्यों परवाह करनी चाहिए?

यह इस भेद्यता के लिए एक विहित जवाब के रूप में डिज़ाइन किया गया है, इसकी गुंजाइश और गंभीरता के कारण।


18
"मैं इसे कैसे ठीक करूं?" -> बस अपने उन्नयन प्रबंधक चलाते हैं! वास्तव में, उबंटू सुरक्षा अपडेट जारी करता है, एक समर्पित सुरक्षा टीम है। कृपया स्रोत से बैश बनाने के बारे में उत्तर न दें! ; भविष्य में अपने सिस्टम को बनाए रखने के लिए यह अनावश्यक रूप से जटिल और कठिन है।
gertvdijk

5
साथ ही, अधूरे निर्धारण के लिए अतिरिक्त सीवीई भी। CVE-2014-7169
gertvdijk

18
कृपया ऐसा स्रोत से निर्माण के बारे में पोस्ट जवाब। चाहे वे हों या न हों, कुछ लोगों के पास प्राचीन उबंटू सर्वर होते हैं, और स्रोत से निर्माण उनका एकमात्र विकल्प हो सकता है।
गैरीओ

3
ओह, माफ करना, मुझे सिर्फ एहसास हुआ कि मैंने टेस्ट में डैश के बजाय बैश लगाया। कोई बात नहीं यह ठीक है।
मैट एच से

जवाबों:


126

बैश क्या है?

बश उबंटू में डिफ़ॉल्ट इंटरैक्टिव शेल है। जब आप टर्मिनल के साथ इंटरफेस कर रहे हैं (या तो टर्मिनल एमुलेटर के माध्यम से, एक ट्टी या एसएचएस पर), तो आप आमतौर पर कमांड टाइप कर रहे हैं जो bashपढ़ेंगे, और निष्पादित करेंगे। यदि आप टर्मिनल का उपयोग बिल्कुल नहीं करते हैं, तो भी आपके पास बैश है।

उबंटू पर, /bin/shबैश नहीं है (यह डैश है)। इस भेद्यता से केवल बैश प्रभावित होता है।

शोषण मुझे कैसे प्रभावित करता है?

बैश और ओएस पर्यावरण चर के एक सेट का ट्रैक रखते हैं जो वर्तमान लॉग-ऑन उपयोगकर्ता का वर्णन करते हैं, जहां हार्ड डिस्क पर प्रोग्राम और इस तरह के अन्य कार्यों को देखना है। एक विशिष्ट संरचना के साथ एक पर्यावरण चर का क्राफ्टिंग करके, एक हमलावर अगली बार बैश शुरू होने पर कोड निष्पादित करने में सक्षम हो सकता है।

हमलावर उस वातावरण चर को कई तरीकों से सेट कर सकता है:

  • दूरस्थ रूप से SSH जैसे सेवा से कनेक्ट करें जैसे ssh पर git जैसे विशिष्ट सेटअप के साथ। जैसा कि मेटर चेतावनी देता है, sshd ForceCommandविकल्प का उपयोग एक हमला वेक्टर है। ऐसे खाते जिनके खोल नहीं हैं वे प्रभावित नहीं होते हैं।
  • आपको पर्यावरण चर सेट करने में धोखा दे रहा है।
  • एक अन्य कार्यक्रम के कारण उस तैयार किए गए मान के लिए एक पर्यावरण चर निर्धारित करना। उदाहरण के लिए, आपके पास एक वेबसर्वर और स्क्रिप्ट हो सकती है जिसे विशिष्ट उपयोगकर्ता सामग्री के साथ एक पर्यावरण चर सेट करना होगा। यहां तक ​​कि अगर वह स्क्रिप्ट अपनी खुद की बनाता है, और अन्य पर्यावरण चर को नहीं छूता है, तो यह पर्याप्त है। किसी भी नाम और एक तैयार किए गए मूल्य के साथ एक एकल पर्यावरण चर, शोषण के सफल होने के लिए पर्याप्त है
  • अन्य तरीके जिनका मैंने यहां उल्लेख नहीं किया है।

एक बार जब वे इस चर को सेट करते हैं, तो अगली बार किसी भी कारण से bashखुलता है , आपके हमलावर का कोड चलाया जाएगा। यह विशेष रूप से डरावना है , क्योंकि यह सुपर-उपयोगकर्ता (एक प्रशासनिक उपयोगकर्ता नियम जो आपके कंप्यूटर के डेटा और कार्यक्रमों पर पूर्ण नियंत्रण रखता है) के रूप में बैश करता है । यहां तक ​​कि अगर आप केवल एक मानक उपयोगकर्ता के रूप में बैश करना शुरू करते हैं, तो उस उपयोगकर्ता की फ़ाइलों को हटाया जा सकता है।sudo -s

यह ध्यान रखना महत्वपूर्ण है कि भले ही आप स्वयं बैश का उपयोग न करें, लेकिन कई कार्यक्रम अपने ऑपरेशन के हिस्से के रूप में खुद को बैश करेंगे। इस मामले में भी, आप कमजोर हैं। हालांकि, उबंटू /bin/shबैश नहीं है, इसलिए केवल ऐसे प्रोग्राम जो स्पष्ट रूप से बैश को लागू करते हैं और डिफ़ॉल्ट स्क्रिप्टिंग शेल को प्रभावित नहीं करते हैं।

मेटर के अनुसार:

OpenSSH sshd में ForceCommand फ़ीचर को शामिल करने वाले वैक्टर, Apache HTTP सर्वर में mod_cgi और mod_cgid मॉड्यूल, अनिर्दिष्ट डीएचसीपी क्लाइंट द्वारा निष्पादित स्क्रिप्ट, और अन्य परिस्थितियाँ जिसमें बैश निष्पादन से विशेषाधिकार सीमा पार पर्यावरण की स्थापना होती है।

क्या मैं असुरक्षित हूं?

अपने स्थापित पैकेज संस्करण की जांच करने के लिए dpkg का उपयोग करें:

dpkg -s bash | grep Version

यह आपके bashपैकेज की जानकारी देखेगा , और केवल आपको संस्करण दिखाने के लिए आउटपुट को फ़िल्टर करेगा। तय संस्करण हैं 4.3-7ubuntu1.4, 4.2-2ubuntu2.5, और 4.1-2ubuntu3.4

उदाहरण के लिए, मैं देखता हूं:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

और यह निर्धारित कर सकता हूं कि मैं कमजोर नहीं हूं।

मैं कैसे अपडेट करूं?

मानक अद्यतन प्रबंधक आपको यह अद्यतन प्रदान करेगा। यह एक प्रमुख उदाहरण है कि सुरक्षा अपडेट कैसे महत्वपूर्ण हैं, इससे कोई फर्क नहीं पड़ता कि आप किस ओएस का उपयोग करते हैं या यह कितनी अच्छी तरह से बनाए रखा गया है।

USN बुलेटिन कहा गया है कि नए संस्करण Ubuntu 14.04 भरोसेमंद तहर, 12.04 सटीक छिपकली, और 10.04 स्पष्ट लिंक्स के लिए जारी किया गया है। यदि आप इन एलटीएस संस्करणों में से एक पर नहीं हैं, लेकिन एक यथोचित-हाल के संस्करण पर हैं, तो आप सबसे अधिक संभावना एक पैच पैकेज पा सकते हैं।

पहले, अगर आप की जाँच करें

यदि आप असुरक्षित हैं, तो आपको सबसे पहले नवीनतम पैकेज सूचियों को पकड़ना चाहिए:

sudo apt-get update && sudo apt-get install bash

पहला कमांड सुनिश्चित करता है कि आपके पास नवीनतम पैकेज सूची है जिसमें निश्चित संस्करण शामिल है, और दूसरी कमांड बैश के नवीनतम (निश्चित) संस्करण को स्थापित करती है।

हालांकि बग केवल खेल में आने के लिए प्रतीत होता है जब बैश को मार दिया जाता है, फिर भी संभव होने पर तुरंत रिबूट करना एक अच्छा विचार है।


20
क्षमा करें, आप कमजोर हैं । मूल पैच पूरी समस्या को ठीक नहीं करता है। Cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA देखें , वर्तमान में कोई सार्वजनिक रूप से उपलब्ध फ़िक्सेस नहीं है । देखें जैसे people.canonical.com/~ubuntu-security/cve/pkg/bash.html
Mormegil

4
@hexafraction आप कहां पढ़ते हैं कि 12.10 इसके लिए अपडेट प्राप्त करता है? मुझे ऐसा नहीं लगता, १२.१०, १३.०४, १३.१० बहुत ज्यादा एंड-ऑफ-लाइफ हैं ! और यह भी, सुरक्षा अद्यतन के लिए बैकपोर्ट रिपॉजिटरी का उपयोग नहीं किया जाता है
gertvdijk

2
@hexafraction नहीं, वे नहीं! यह एंड-ऑफ-लाइफ होने का पूरा बिंदु है: अब कोई समर्थन नहीं।
gertvdijk

1
@ MichaelHärtl यदि आप उबंटू 12.10 पर हैं, तो आप संकुल से 12.04 संस्करण bash डाउनलोड कर सकते हैं ।ubuntu.com/precise/bash और इसे मैन्युअल रूप से इंस्टॉल करें।
डेविड

2
CVE-2014-7169 के लिए फिक्स अपडेट मैनेजर (मेरे लिए) में उपलब्ध है।
कैलमेरियस

27

हैकर न्यूज पर चोरी के इस बंद चुरा लिया । यदि आपको मेरे (ओड्रोइड-एक्सयू) जैसे रिपोज से परेशानी है, तो यह अच्छी तरह से काम करना चाहिए यदि आप स्रोत से पैच / निर्माण करना चाहते हैं।

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

तो भागो:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

और अगर आपको मिलता है:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

फिर तुम सब अच्छे हो!


चेतावनी: मेक इन बीश को स्थापित करेगा /usr/local/bin, इसलिए /bin/bashसंशोधित नहीं किया जा सकता है और इसे कर्ल से लगाया जा सकता है !!


1
यहां बताया गया है कि डेबियन लेन
मैट व्हाइट

13
-1। स्रोत से निर्माण करने की आवश्यकता नहीं है। उबंटू में रिपॉजिटरी में एक सुरक्षा पैच है। यदि आपको "अपने रेपो से परेशानी है", तो इसके बजाय इसे ठीक करें। यदि आपको सुरक्षा अपग्रेड प्राप्त नहीं होता है, तो आप कई और तरीकों से असुरक्षित होंगे!
gertvdijk

1
@ मैट व्हाइट थैंक यू! आपने मुझे केवल कुछ घंटे बचाए :)
फ्लोरियन फिदा

5
@FlorianFida यह AskUbuntu है! इस साइट पर हर किसी को उबंटू का उपयोग करने के दायरे में उत्तर पोस्ट करने की उम्मीद है।
gertvdijk

6
@ माइकलहार्टल 12.10 एंड-ऑफ-लाइफ है। यह लंबे समय से पहले से अब तक कोई सुरक्षा अद्यतन प्राप्त नहीं करता है। अपग्रेड !!!
gertvdijk

9

नोट: CVE-2014-7169 के लिए सुरक्षा पैच एक मानक सुरक्षा अद्यतन के रूप में जारी किया गया है। इस पैच को प्राप्त करने के लिए अतिरिक्त ppa जोड़ने की आवश्यकता नहीं है। केवल निम्नलिखित की आवश्यकता है।

sudo apt-get update

sudo apt-get upgrade

यह सुनिश्चित करने के लिए कि आपने बैश को सही ढंग से पैच किया है, निम्नलिखित कमांड चलाएँ

dpkg -s bash | grep Version

यदि आप 14.04 LTS पर हैं, तो आपको इसका आउटपुट देखना चाहिए:

Version: 4.3-7ubuntu1.4

यदि आप 12.04 एलटीएस पर हैं, तो आपका आउटपुट होना चाहिए:

 Version: 4.2-2ubuntu2.5

1
यह सही था, लेकिन अब एक आधिकारिक पैच उपलब्ध कराया गया है, इसलिए सुरक्षा अद्यतन जारी किया गया है। नतीजतन ये कदम अब जरूरी नहीं हैं।
रॉबी बसाक

यह सही है। मैं उपरोक्त पोस्ट को संपादित करूंगा। धन्यवाद।
शाखा। छिपकली

1

यदि आप 11.04 पर हैं: नीचे दिए गए चरणों का उपयोग करें (यह मेरे लिए काम किया)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

यदि यह आवश्यक पेटेक डाउनलोड नहीं किया गया है, तो ftp पैकेज स्थापित करें

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

यह देखने के लिए कि क्या पैच लागू किया गया था:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

0

मैं नेट्टी 11.04 का उपयोग कर रहा हूं, जो कि ईओएल है (और मैंने पुराने-releases.ubuntu.com का उपयोग करने के लिए /etc/apt/source.list अपडेट किया है), इसलिए मुझे स्रोत से निर्माण करना होगा। मैं एक -deb का निर्माण करना चाहता था, इसलिए कम से कम पैकेज प्रबंधन "जागरूक" है, जो bash संस्करण डिफ़ॉल्ट नहीं है। मैं 100% सफल नहीं हूँ - हालाँकि, पैकेज को "नया" के रूप में पंजीकृत किया गया है और bashद्विआधारी समाप्त हो गया है, इसलिए यहां वही किया गया है:

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

अब, (उप) निर्देशिका में bash-4.2/, एक फ़ाइल है bash-4.2.tar.xz, जिसे bashस्रोत पर लाने के लिए अनपैक करने की आवश्यकता है ; और एक उपनिर्देशिका कहा जाता है debian

मैं निम्न परिवर्तन पर निर्भरता से बचने के लिए किया जाता texliveमें: bash-4.2/debian/control:

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

... और bash-4.2/debian/rules:

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

इस bash-4.2/निर्देशिका में संस्करण को बदलने के लिए, यह करें:

bash-4.2$ dch --local patchCVE

... और पूछे जाने पर चैंज में नोट भरें। यह सुनिश्चित करेगा कि .deb (और संबंधित मेटाडेटा) को (मेरे मामले में) कहा जाता है bash_4.2-0ubuntu3patchCVE1_i386.deb

फिर आप के साथ dpkg-buildpackage -us -ucया debuildकमांड के निर्माण की कोशिश कर सकते हैं । नोट - इनमें से कोई भी स्रोत को ज़िप से री-अनपैक कर देगा - इस प्रकार आपके पास मौजूद किसी भी पैच को ओवरराइड कर सकता है! फिर भी, इनमें से एक को एक बार चलाएं ताकि स्रोत अनपैक हो और निर्मित हो (नोट debuildअभी भी टेक्सिव के कारण अंत में विफल हो सकता है, लेकिन इसे स्रोत को अनपैक और निर्माण करना चाहिए)।

फिर, पैच लागू करें; ध्यान दें कि आपको -p1यहां उपयोग करना चाहिए , क्योंकि वर्तमान में आप bash-4.2/निर्देशिका में हैं:

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

फिर चलाकर पैच किए गए संस्करण का पुनर्निर्माण करें:

bash-4.2$ fakeroot debian/rules build 

यह निष्पादन योग्य का पुनर्निर्माण करेगा; इसका परीक्षण करने के लिए:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

.Deb फ़ाइलों को बनाने के लिए, चलाएँ:

bash-4.2$ fakeroot debian/rules binary

यह मूल निर्देशिका में .deb फ़ाइलों को बचाएगा; उनकी सामग्री को सूचीबद्ध करने के लिए:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

.Deb स्थापित करने के लिए:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

हालांकि, किसी कारण के लिए, इस .deb में एक अप्रकाशित बाइनरी (!) होता है, इसलिए मुझे इसके अतिरिक्त करना होगा:

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

... और उसके बाद, परीक्षण मेरे लिए सही तरीके से गुजरने लगा:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test

प्रश्न: मूल प्रश्न 1 संभावित हमले के वेक्टर को "अनिर्दिष्ट डीएचसीपी ग्राहकों द्वारा निष्पादित स्क्रिप्ट" के रूप में बताता है। इसका क्या मतलब है? क्या इसका मतलब यह है कि उबंटू के / sbin / dhclient <- कमजोर है?
चोकर

मुझे लगता है कि शायद अनिर्दिष्ट क्लाइंट का मतलब है, कि उबंटू में एक संक्रमित / sbin / dhclient है, जो तब कमांड चलाता है जो बैश स्क्रिप्ट लॉन्च करने वाले शेलशॉक की ओर ले जाता है। क्या डीएचसीपी ग्राहक शेलशॉक के लिए असुरक्षित हैं? (आशा है कि समझ में आता है, 10 अक्टूबर से मेरे उपरोक्त संदेश को देखें)
Bran
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.