
Joomla Balbooa Forms(com_baforms)의 제출 후 PHP eval()에서 필드 숏코드 인젝션을 통한 인증 없는 RCE인 CVE-2026-102425에 대한 Python PoC입니다. check, exploit, mass 모드를 지원합니다.
Python 3 PoC for CVE-2026-102425 — balbooa.com Balbooa Forms Joomla 확장 — 선택적 제출 후 PHP 액션(eval())의 필드 숏코드 주입을 통한 비인증 원격 코드 실행.
| | |
|---|---|
| PoCbit | https://pocbit.org/pocs/cve-2026-102425 |
| CVE.org | https://www.cve.org/CVERecord?id=CVE-2026-102425 (PUBLISHED 2026-09-29) |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-102425 |
| CNA | Joomla! Project |
| Component | com_baforms |
| Affected | 1.0.0 – 2.4.3.3 |
| Fix | ≥ 2.4.3.4 |
| CWE | CWE-94 (Code Injection) |
| CVSS 4.0 | 9.5 Critical — 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 |
| Finders | Łukasz Rybak, Sergiy Tryzhychynskyi |
Balbooa Forms는 관리자가 공개 양식 제출 후 실행되는 PHP 코드를 정의할 수 있게 합니다. 해당 PHP에는 양식 필드 숏코드가 포함될 수 있습니다. eval() 전에 컴포넌트는 각 숏코드를 방문자가 제출한 원시 값으로 대체합니다(이스케이프 없음).
CVE-2026-102425는 다음 조건이 모두 충족될 때 악용 가능합니다:
확장 버전 < 2.4.3.4.
공개 양식이 선택적 제출 후 PHP 액션을 사용.
해당 PHP가 큰따옴표로 묶인 PHP 문자열 내부에서 공격자가 제어하는 필드 숏코드를 보간 (고전적 탈출: ";echo …;//).
CVSS AT:P (Attack Requirements: Present)는 취약한 구성이 존재해야 함을 의미합니다 — 컴포넌트를 설치하는 것만으로는 충분하지 않습니다.
이것은 CVE-2026-67364 ([URL parameter = X] 쿼리 숏코드, 2.4.3.2에서 수정)가 아닙니다. 해당 별개 이슈를 의도적으로 테스트하는 경우에만 --include-67364를 사용하십시오.
동일 컴포넌트, 동일 릴리스 트레인: CVE-2026-102424, -101127, -101112, -101126도 패치하십시오 (mySites.guru 참조).
| Mode | Behavior |
|------|----------|
| check | com_baforms, manifest version, affected_version (< 2.4.3.4), loadAjaxForm / embed를 통한 public_form_detected |
| check default hits | hits.txt only if affected and a public form HTML loads (exploit queue) |
| check --all-affected | Also list any host on vulnerable version (noisy FOFA triage) |
| check --aggressive | More paths, loadAjaxForm ID scan, more form probes |
| exploit | form.message submit (modern) + legacy tasks; field shortcode payloads (double-quote breakout) |
| exploit --include-67364 | Adds URL-parameter shortcode attempts (67364 class) |
| exploit --aggressive | Full scrape + loadAjaxForm discovery (slower) |
| --lab | Local mock: double-quoted eval + field injection |
| mass | --list + -j → JSONL, hits.txt, exploited.txt |
JSONL 행에는 cve_state, cve_record, nvd, cvss_v4_vector, attack_requirements, pocbit_page가 포함됩니다.
exploit 시, PoC는 먼저 동일한 필드 숏코드 RCE를 통해 **file_put_contents**를 시도하여 일반적인 Joomla 경로(images/baforms/uploads/, images/, …) 아래에 로컬 up.php(멀티파트 업로더)를 드롭한 다음, 제출 응답에서 **POCBIT-102425-OK**를 확인합니다. 파일이 웹에서 접근 가능하면 **shell_url**이 출력되고 **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 (hits.txt, 12 스레드, verbose):

| Step | Request |
|------|---------|
| Load form | GET index.php?option=com_baforms&task=form.loadAjaxForm&id=N |
| Submit | POST to form action with task=form.message, form-id, fields (see ba-form.js) |
| Avoid | format=json on front tasks on many J4 sites (invalid controller JSON) |
레거시 사이트는 view=form&form_id=N 또는 form.submitForm을 사용할 수 있습니다.
Balbooa Forms를 **2.4.3.4+**로 업그레이드하십시오.
패치될 때까지 필드 또는 URL 숏코드를 포함하는 제출 후 PHP 액션을 제거하십시오.
공개 제출에 reCAPTCHA를 활성화하십시오.
양식, 관리자 사용자, images/baforms/uploads/를 감사하십시오.
승인된 보안 테스트 전용.
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