शेलशॉक बैश भेद्यता कैसे पाई गई?


19

चूंकि यह बग इतने सारे प्लेटफार्मों को प्रभावित करता है, इसलिए हम उस प्रक्रिया से कुछ सीख सकते हैं जिसके द्वारा यह भेद्यता पाई गई थी: क्या यह एक eρkaα (यूरेका) पल था या सुरक्षा जांच का परिणाम था?

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


5
संबंधित: "जब शेलशॉक (CVE-2014-6271 / 7169) बग का जवाब दिया गया था, और पैच क्या है जो इसे पूरी तरह से ठीक करता है?"।
क्रिस्टियन सियुपिटु

यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह किसी व्यक्ति विशेष की विचार प्रक्रिया के बारे में है न कि किसी विशिष्ट * निक्स मुद्दे के बारे में।
terdon

@Anthon क्यों लिनक्स के बारे में होना चाहिए? किसी ऐसे व्यक्ति की राय को क्यों स्वीकार करता है जो ओपी का था?
मुरु

@ मरमू मुझे यह एक सुधार मिला, सौभाग्य से एक सुझाए गए संपादन को स्वीकृत करने में एक से अधिक लोगों को लगता है। लेकिन मुझे स्वीकार करना होगा कि मैंने याद किया कि प्रश्न पहले से ही बंद था, अन्यथा मैं इसे लिनक्स, यूनिक्स नहीं छोड़ सकता था, मुझे ज्यादा परवाह नहीं है, अन्यथा हमें साइट के शीर्षक में भी बीएसडी आदि की आवश्यकता है।
एंथन

1
यह मत मानो कि मैं इस साइट पर प्रत्येक प्रश्न को पढ़ता हूं। एक छोटे से उत्तर के लिए देखें थ्रेडgmane.org/gmane.comp.security.oss.general/14177/…
स्टीफन चेज़लस

जवाबों:


23

कुछ आश्वस्त करने के लिए, मुझे कारनामों को देखकर बग नहीं मिला, मेरे पास यह मानने का कोई कारण नहीं है कि इसका खुलासा होने से पहले इसका शोषण किया गया है (हालांकि निश्चित रूप से मैं इसे खारिज नहीं कर सकता)। मुझे यह bashभी कोड को देखकर नहीं मिला ।

मैं यह नहीं कह सकता कि मुझे उस समय अपने विचारों की ट्रेन बिल्कुल याद है।

कि कमोबेश कुछ सॉफ़्टवेयर के कुछ व्यवहारों पर कुछ प्रतिबिंब मुझे खतरनाक (व्यवहार, सॉफ़्टवेयर नहीं) से मिले। जिस तरह का व्यवहार आपको लगता है कि: यह एक अच्छा विचार नहीं है

इस मामले में, मैं ssh के सामान्य विन्यास पर प्रतिबिंबित कर रहा था जो क्लाइंट से असंगत पर्यावरणीय चर को पार करने की अनुमति देता है बशर्ते कि उनके साथ शुरुआत हो LC_। विचार इतना है कि लोग sshअन्य मशीनों में प्रवेश करते समय अपनी भाषा का उपयोग कर सकते हैं। एक अच्छा विचार जब तक आप यह विचार करना शुरू नहीं करते हैं कि विशेष रूप से कैसे स्थानीयकरण से निपटने के लिए यूटीएफ -8 को समीकरण में लाया जाता है (और यह देखते हुए कि यह कई अनुप्रयोगों द्वारा कितनी बुरी तरह से नियंत्रित किया जाता है)।

जुलाई 2014 के वापस, मैं पहले से ही glibc स्थानीयकरण से निपटने में एक जोखिम है कि के साथ संयुक्त बताया था sshd config, और दो अन्य खतरनाक व्यवहार के bashखोल बशर्ते कि वे वहाँ फ़ाइलों को अपलोड करने में सक्षम थे (प्रमाणीकृत) हमलावरों Git सर्वर को हैक करने की अनुमति दी और bashइस्तेमाल किया गया था गिट यूनिक्स उपयोगकर्ता (CVE-2014-0475) के लॉगिन शेल के रूप में।

मैं सोच रहा था कि यह संभवतः bashउपयोगकर्ताओं के लॉगिन शेल के रूप में उपयोग करने के लिए एक बुरा विचार था , जो ssh पर सेवाएं दे रहा है, यह देखते हुए कि यह काफी जटिल शेल है (जब आप सभी की जरूरत है, बस एक बहुत ही सरल कमांड लाइन पार्स कर रहा है) और अधिकांश गलतियां विरासत में मिली हैं ksh का। चूँकि मैंने bashउस संदर्भ में उपयोग किए जाने के साथ कुछ समस्याओं की पहले ही पहचान कर ली थी (ssh ForceCommands की व्याख्या करने के लिए ), मैं सोच रहा था कि क्या वहाँ संभावित रूप से अधिक थे।

AcceptEnv LC_*ऐसे किसी भी चर की अनुमति देता है जिसका नाम शुरू होता है LC_और मेरे पास अस्पष्ट पुनरावृत्ति थी जो bash निर्यात किए गए कार्य ( समय उपयोगी सुविधा पर एक खतरनाक यद्यपि) पर्यावरण चर का उपयोग कर रहे थे, जिसका नाम कुछ ऐसा myfunction()था और सोच रहा था कि अगर वहाँ देखने के लिए कुछ दिलचस्प नहीं था।

मैं इसे इस आधार पर खारिज करने वाला था कि सबसे खराब चीज यह हो सकती है कि एक कमांड को फिर से परिभाषित किया जाए, LC_something जो वास्तव में एक समस्या नहीं हो सकती है क्योंकि वे मौजूदा कमांड नाम नहीं हैं, लेकिन फिर मुझे आश्चर्य हुआ कि उन पर्यावरण चर को कैसे bash आयात किया जाए

क्या होगा अगर चर को LC_foo;echo test; f()उदाहरण के लिए बुलाया जाए ? इसलिए मैंने करीब से देखने का फैसला किया।

ए:

$ env -i bash -c 'zzz() { :;}; export -f zzz; env'
[...]
zzz=() {  :
}

पता चला कि मेरी याद गलत थी कि चर को नहीं बुलाया गया था ( myfunction()लेकिन myfunctionयह मूल्य है जो इसके साथ शुरू होता है ())।

और एक त्वरित परीक्षण:

$ env 'true;echo test; f=() { :;}' bash -c :
test
bash: error importing function definition for `true;echo test; f'

मेरे संदेह की पुष्टि की है कि चर नाम स्वच्छता नहीं था, और कोड का मूल्यांकन स्टार्टअप पर किया गया था ।

इससे भी बदतर, एक बहुत बुरा, मूल्य या तो sanitized नहीं था:

$ env 'foo=() { :;}; echo test' bash -c :
test

इसका मतलब था कि कोई भी पर्यावरण चर एक वेक्टर हो सकता है।

जब मैंने समस्या की सीमा का एहसास किया, तो पुष्टि की कि यह HTTP ( HTTP_xxx/ QUERYSTRING... env vars) के साथ-साथ मेल प्रोसेसिंग सेवाओं, बाद में डीएचसीपी (और शायद एक लंबी सूची) जैसे अन्य लोगों के लिए शोषक था (इसे ध्यान से) ।


4
दिलचस्प पढ़ना! यद्यपि प्रश्नों पर टिप्पणियों से यह स्पष्ट होता है कि यह इस साइट के लिए थोड़ा ऑफ-टॉपिक हो सकता है, लेकिन मुझे लगता है कि इस तरह की क्यू / ए की थोड़ी मात्रा (उत्तर लिखे गए और साफ-सुथरे तरीके से लिखे गए) वास्तव में एक है साइट के लिए संपत्ति!
जोहान ई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.