
Apache Struts 2.0 RCE vulnerability - Permite a un atacante inyectar comandos del sistema operativo en una aplicación web a través del encabezado content-type
Vulnerabilidad RCE en Apache Struts 2.0
Este es un script para explotar CVE-2017-5638 - Permite a un atacante inyectar comandos del sistema operativo en una aplicación web a través del encabezado content-type Apache Struts 2 es un framework de aplicaciones web de código abierto para desarrollar aplicaciones web Java EE. Utiliza y extiende la API de Java Servlet para alentar a los desarrolladores a adoptar una arquitectura modelo-vista-controlador (MVC).
Durante la última semana de marzo de 2017, un hacker de Apache Struts que se hace llamar "Nike Zheng" publicó un exploit público de prueba de concepto que muestra con qué facilidad alguien puede ejecutar comandos del sistema operativo de forma remota en un servidor vulnerable de Apache Struts 2.
La vulnerabilidad, CVE-2017-5638 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638, permite la ejecución remota de código (RCE) no autenticada a través de un valor Content-Type especialmente manipulado en una solicitud HTTP. Un atacante puede crear un valor inválido para Content-Type que hará que el software vulnerable lance una excepción. Cuando el software prepara el mensaje de error para mostrarlo, un fallo en el analizador Jakarta Multipart de Apache Struts provoca que el valor malicioso de Content-Type se ejecute en lugar de mostrarse.
Desde la publicación de este exploit público, se observaron un gran número de escaneos buscando servidores Apache vulnerables. Como el exploit es realmente fácil de ejecutar, cualquiera puede explotar máquinas vulnerables de forma remota con total facilidad. Por lo tanto, se reportaron explotaciones frecuentes después del gran número de escaneos.
Uno de nuestros clientes nos pidió escanear todas sus IPs, ya que estaban usando en gran medida el framework vulnerable Apache Struts 2 y no tenían registros exactos de qué IP's(Web Servers) estaban ejecutando un framework apache vulnerable. Había cerca de mil IPs que debían ser probadas. El cliente exigió presentar todos los dominios vulnerables junto con la información de si es un servidor Linux o Windows. Para evitar la tediosa tarea de escanear cada IP individualmente, escribí un pequeño script.
El script combina las siguientes funciones/tareas: