
PoC en Python para CVE-2026-102425: RCE no autenticado en Joomla Balbooa Forms (com_baforms) mediante inyección de shortcode de campo en eval() de PHP tras el envío. Modos de comprobación, explotación y masivo.
PoC en Python 3 para CVE-2026-102425 — extensión Balbooa Forms de balbooa.com para Joomla — ejecución remota de código no autenticada mediante inyección de shortcode de campo en acciones opcionales de PHP tras el envío (eval()).
| | |
|---|---|
| PoCbit | https://pocbit.org/pocs/cve-2026-102425 |
| CVE.org | https://www.cve.org/CVERecord?id=CVE-2026-102425 (PUBLICADO 2026-09-29) |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-102425 |
| CNA | Joomla! Project |
| Componente | com_baforms |
| Afectados | 1.0.0 – 2.4.3.3 |
| Corrección | ≥ 2.4.3.4 |
| CWE | CWE-94 (Inyección de código) |
| CVSS 4.0 | 9.5 Crítico — 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 |
| Descubridores | Łukasz Rybak, Sergiy Tryzhychynskyi |
Balbooa Forms permite a los administradores definir código PHP que se ejecuta tras el envío de un formulario público. Ese PHP puede contener shortcodes de campos de formulario. Antes de eval(), el componente reemplaza cada shortcode con el valor sin procesar enviado por el visitante (sin escape).
CVE-2026-102425 es explotable cuando se cumplen todas las condiciones siguientes:
Versión de la extensión < 2.4.3.4.
Un formulario público utiliza la acción opcional de PHP tras el envío.
Ese PHP interpola un shortcode de campo controlado por el atacante dentro de una cadena PHP entre comillas dobles (ruptura clásica: ";echo …;//).
CVSS AT:P (Attack Requirements: Present) significa que debe existir la configuración vulnerable — instalar el componente por sí solo no es suficiente.
Esto no es CVE-2026-67364 (shortcode de consulta [parámetro URL = X], corregido en 2.4.3.2). Utilice --include-67364 solo si prueba intencionadamente ese problema aparte.
Mismo componente, misma línea de versiones: también parchee CVE-2026-102424, -101127, -101112, -101126 (véase mySites.guru).
| Modo | Comportamiento |
|------|----------|
| check | com_baforms, versión del manifiesto, affected_version (< 2.4.3.4), public_form_detected mediante loadAjaxForm / embed |
| check hits por defecto | hits.txt solo si está afectado y carga el HTML de un formulario público (cola de explotación) |
| check --all-affected | También lista cualquier host en versión vulnerable (triaje FOFA ruidoso) |
| check --aggressive | Más rutas, escaneo de ID de loadAjaxForm, más sondeos de formularios |
| exploit | Envío de form.message (moderno) + tareas heredadas; payloads de shortcode de campo (ruptura con comillas dobles) |
| exploit --include-67364 | Añade intentos de shortcode por parámetro URL (clase 67364) |
| exploit --aggressive | Scraping completo + descubrimiento de loadAjaxForm (más lento) |
| --lab | Simulación local: eval entre comillas dobles + inyección de campo |
| mass | --list + -j → JSONL, hits.txt, exploited.txt |
Las filas JSONL incluyen cve_state, cve_record, nvd, cvss_v4_vector, attack_requirements, pocbit_page.
En exploit, el PoC intenta primero file_put_contents mediante el mismo RCE de shortcode de campo para depositar el up.php local (cargador multipart) en rutas comunes de Joomla (images/baforms/uploads/, images/, …), y después confirma POCBIT-102425-OK en la respuesta del envío. Si el archivo es visible desde la web, se imprime shell_url y se añade a 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 masivo interactivo (hits.txt, 12 hilos, verbose):

| Paso | Petición |
|------|---------|
| Cargar formulario | GET index.php?option=com_baforms&task=form.loadAjaxForm&id=N |
| Enviar | POST al action del formulario con task=form.message, form-id, campos (véase ba-form.js) |
| Evitar | format=json en tareas de frontend en muchos sitios J4 (JSON de controlador inválido) |
Los sitios heredados pueden usar view=form&form_id=N o form.submitForm.
Actualice Balbooa Forms a 2.4.3.4+.
Elimine las acciones de PHP tras el envío que incorporen shortcodes de campo o de URL hasta que se parchee.
Active reCAPTCHA en los envíos públicos.
Audite los formularios, los usuarios administradores y images/baforms/uploads/.
Solo pruebas de seguridad autorizadas.
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