CVE-2014-7169 के लिए अपडेट किया गया शेलशॉक भेद्यता परीक्षण कैसे करता है?


11

मैं CVE-2014-6271 के मूल परीक्षण को समझता हूं, जो था:

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

लेकिन मैं अद्यतन परीक्षण और CVE-2014-7169 के लिए इसी उत्पादन से उलझन में हूँ:

$ 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

क्या कोई संक्षेप में बता सकता है कि यहां क्या हो रहा है और यह CVE-2014-6271 के लिए पैच को कैसे दरकिनार करता है?


जरा देखिए: security.stackexchange.com/q/68122/45915
Cyrus

जवाबों:


13

मैं थोड़ी देर के लिए जाले के आसपास खुदाई कर रहा हूं क्योंकि मैंने पहली बार इस प्रश्न को पोस्ट किया था।

बग के मूल खोजकर्ता के अनुसार , CVE-2014-6271 पैच से पहले बैश एक फ़ंक्शन को आयात करता है जैसे:

foo=() {
  code
}

एक स्थान के साथ बराबर चिह्न की जगह ले कर और उसकी व्याख्या करके ... जिसका मतलब था कि फ़ंक्शन परिभाषा से परे व्याख्या करना संभव था।

पैच CVE-2014-6271 के लिए parse_and_execute () फ़ंक्शन का एक विशेष मोड शुरू की समारोह परिभाषा के लिए सीमा मूल्यांकन करने के लिए, और यह परे नहीं।

हालाँकि, जैसा कि इस थ्रेड में बताया गया है , CVE-2014-7169 भेद्यता परीक्षण का विशेष रूप से तैयार किया गया पर्यावरण चर 1) पार्सर को मौत के लिए भ्रमित करता है 2) बफर 3 में स्क्रैप छोड़ें) पूरी तरह से बदल दें कि मूल बॉर्डर कमांड क्या करता है यह पहले से ही बफर में स्क्रैप के साथ जोड़ती है।

तो पर्यावरण चर को विच्छेदित करने के लिए:

X='() { (a)=>\'

  • पार्सर विश्लेषण करेगा () { (a)=>\। ध्यान दें कि \स्ट्रिंग का हिस्सा है; यह अनुगामी एकल उद्धरण से बच नहीं रहा है ।

() {

  • पार्सर इसे फ़ंक्शन परिभाषा के रूप में पहचानता है।

(a)=

  • यह पार्सर को मौत के लिए भ्रमित करता है।

>\

  • पार्सर बफर में बैठे अंतिम दो पात्रों को छोड़ देता है।

>\[NEWLINE]

  • shकमांड चलाने से पहले कुछ बिंदु पर , बफर में एक नई रेखा रखी जाती है।

>\[NEWLINE]echo date

  • जब shकहा जाता है (जो शायद इस मामले में काटने के लिए एक सहानुभूति है), यह अपने कमांड तर्कों echo dateको बफर में पहले से मौजूद पात्रों को जोड़ता है ।

>echo date

  • चूंकि नई रेखा बच जाती है, बैश बफर को पार्स कर देगा >echo date, जिसका प्रभाव उसी के समान है date > echo। नाम की एक फाइल echoबनाई गई है और dateकमांड के स्टडआउट को इसमें रीडायरेक्ट किया गया है।

; cat echo

  • दूसरा कमांड केवल नई बनाई गई फ़ाइल की सामग्री को प्रदर्शित करता है।


2

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

बग के साथ, पर्यावरण चर Xको अनदेखा नहीं किया जाना चाहिए, बैश चलना चाहिए echo date, और बिल्ली को शिकायत करनी चाहिए कि कोई फ़ाइल नहीं है जिसे इको कहा जाता है। उदाहरण पर विचार करें कि डैश कैसे व्यवहार करता है:

me@myserver$ rm -f echo && env -i  X='() { (a)=>\' dash -c 'echo date'; cat echo
date
cat: echo: No such file or directory

मैं आपके प्रश्न में दिखाए गए आउटपुट को नहीं दोहराऊँगा, और मैं यह समझने का नाटक नहीं करूँगा कि यह कैसे काम करता है, लेकिन बैश चल रहा है dateऔर आउटपुट को 'इको' नामक फ़ाइल में डाल रहा है । आप dateखुद को समझाने के लिए विकल्पों के साथ खेल सकते हैं कि यह प्रयोग करने योग्य और खतरनाक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.