CVE-2017-5638: RCE por Content-Type en Apache Struts 2, comprobar y corregir
Última actualización:
En Apache Struts 2, el parser multipart Jakarta construye el mensaje de error de una subida fallida a partir de la cabecera Content-Type y lo evalúa como OGNL. Un atacante envía una petición con una expresión OGNL en esa cabecera y ejecuta comandos en el servidor, sin iniciar sesión.
Se explotó de forma activa desde marzo de 2017 y se usó en grandes robos de datos. Muchas empresas siguen ejecutando aplicaciones Struts antiguas, así que los escaneos continúan.
De un vistazo
- CVE
- CVE-2017-5638
- Software
- Apache Struts 2
- Versiones afectadas
- De 2.3.5 a 2.3.31, de 2.5 a 2.5.10
- Corregida en
- 2.3.32, 2.5.10.1
- Puntuación CVSS
- 9.8 Crítica (NVD, CVSS 3.1) ·
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CISA Known Exploited Vulnerabilities
- Sí, añadida el 3 de noviembre de 2021
- Publicada por NVD
- 11 de marzo de 2017
- Parche virtual de InfraFence
vp-cve-2017-5638(ModSecurity id 9920007)
Qué está afectado
Según el boletín S2-045 de Apache: Struts de 2.3.5 a 2.3.31 y de 2.5 a 2.5.10, con el parser multipart Jakarta predeterminado. Struts es una biblioteca dentro de aplicaciones web Java (struts2-core-*.jar), no un paquete del sistema.
Comprobar si un servidor lo tiene
Busca la biblioteca y las aplicaciones que la incluyen; la versión está en el nombre:
sudo nice -n 19 ionice -c3 find / -xdev -type f -name 'struts2-core-*.jar' 2>/dev/nullsudo nice -n 19 ionice -c3 find / -xdev -type f \( -name '*.war' -o -name '*.ear' \) 2>/dev/null \
| while read -r f; do
unzip -l "$f" 2>/dev/null | grep -oE 'struts2-core-[0-9][^/ ]*\.jar' | sed "s|^|$f: |"
doneCorregirlo
- Actualiza Struts como mínimo a 2.3.32 o 2.5.10.1, las versiones que lo corrigieron. Las dos ramas llevan mucho tiempo sin soporte: planifica el paso a una versión de Struts con soporte, que además cierra las vulnerabilidades posteriores.
- Recompila y vuelve a desplegar la aplicación, y después reiníciala.
- Si no puedes actualizar enseguida, el boletín de Apache da dos soluciones alternativas: un filtro de servlet que rechace las peticiones cuyo
Content-Typeno sea un simplemultipart/form-data, o cambiar a otro parser multipart.
Atención: Una aplicación que tuvo un Struts vulnerable expuesto a internet puede haber sido comprometida hace años: busca cuentas desconocidas, tareas programadas y web shells.
Cómo la bloquea InfraFence mientras actualizas
El parche virtual para CVE-2017-5638 es una regla ModSecurity sobre la cabecera Content-Type de la petición: bloquea una cabecera que contenga %{ o ${, el comienzo de una expresión OGNL. Un Content-Type legítimo nunca contiene ninguno de los dos.
Nota: Al mismo fallo también se llega a través de las cabeceras Content-Disposition y Content-Length de una subida (CVE-2017-5638 las incluye; el S2-046 de Apache las describe). El parche solo comprueba Content-Type, la forma explotada de forma activa. La actualización las cubre todas.
Cómo se aplica el parche
- El agente anota qué puertos SSH y qué sitios responden.
- Escribe la regla (id de ModSecurity 9920007) entre sus propios marcadores en su archivo de ModSecurity, ejecuta
apachectl configtesty recarga Apache de forma ordenada. Si la prueba falla, vuelve a poner el archivo anterior. - Comprueba que SSH y los sitios siguen respondiendo, y quita el parche si no es así.
- Comprueba que ModSecurity bloquea de verdad con la regla, con una petición de prueba local inofensiva. Un ModSecurity en
DetectionOnlysolo registra: en ese caso el parche se quita y se notifica como ineficaz, nunca como aplicado.
Cada petición que bloquea el parche se notifica con CVE-2017-5638 (agente 1.0.37 o posterior): ves los intentos en la actividad del servidor y en la página Explotación del panel, así sabes que están probando la vulnerabilidad contra ti.
Atención: Un parche virtual bloquea la forma conocida del ataque en las peticiones que pasan por Apache en ese servidor. No sustituye a la actualización: instala la versión corregida y después quita el parche desde Actividad con Deshacer si ya no lo necesitas.
Los parches virtuales necesitan Apache con ModSecurity, el ajuste Permitir cambios en la configuración del servidor web y ningún panel de hosting ni herramienta de gestión de la configuración a cargo del servidor web; forman parte del plan Pro y de AutoMode. Los aplica una persona desde el análisis con IA, o AutoMode. Consulta Parches virtuales.
Fuentes
Los datos de esta página vienen de estas fuentes; consúltalas por si hay cambios.
Pruébalo gratis en 1 servidor
Starter es gratuito para un servidor, con protección completa y bloqueo automático. Sin tarjeta de crédito.
Instala el agente como root, con tu token en lugar de <TOKEN>:
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>El token se crea en el panel, en Servidores › Añadir servidor.
