मैं थोड़ी देर के लिए जाले के आसपास खुदाई कर रहा हूं क्योंकि मैंने पहली बार इस प्रश्न को पोस्ट किया था।
बग के मूल खोजकर्ता के अनुसार , 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
- दूसरा कमांड केवल नई बनाई गई फ़ाइल की सामग्री को प्रदर्शित करता है।