| 字段 | 值 |
|---|
| 产品 | LibreNMS |
| 厂商 | LibreNMS 项目 |
| 漏洞类型 | 本地文件包含(LFI)/ 路径遍历 |
| CWE | CWE-98, CWE-22 |
| CVSS 评分 | 7.5 - 8.5(高危) |
| 是否需要认证 | 是 |
| 发现日期 | 2026-02-01 |
文件: includes/html/pages/device/nfsen.inc.php
行号: 46-48
if (is_file('includes/html/pages/device/nfsen/' . $vars['nfsen'] . '.inc.php')) {
include 'includes/html/pages/device/nfsen/' . $vars['nfsen'] . '.inc.php';
} else {
include 'includes/html/pages/device/nfsen/general.inc.php';
}
$vars['nfsen'] 参数来源于用户输入($_GET/$_POST),并被直接拼接进 include() 语句中,且未经过适当的净化处理。唯一执行的验证是 is_file() 检查,该检查无法阻止路径遍历序列。
../)进行净化处理is_file() 仅检查文件是否存在,而不检查路径安全性以任意已认证用户身份登录 LibreNMS
导航至任意设备的 Netflow 标签页:
https://[TARGET]/device/[DEVICE_ID]/tab=netflow
附加恶意参数:
https://[TARGET]/device/[DEVICE_ID]/tab=netflow?nfsen=..%2f..%2fapi-access
观察发现 API Access 页面内容被加载,而非 NFSen 内容
| 场景 | 预期 | 实际 |
|---|---|---|
| 正常请求 | NFSen 常规页面(流量、数据包、通信量) | NFSen 常规页面 |
| 恶意请求 | NFSen 常规页面 | API Access 页面内容 |
| 影响类型 | 描述 |
|---|---|
| 信息泄露 | 包含并执行任意 .inc.php 文件 |
| 权限提升 | 以低权限用户身份访问仅限管理员访问的页面 |
| 潜在远程代码执行(RCE) | 如果攻击者能够控制任意 .inc.php 文件的内容 |
URL: https://[REDACTED]/about
版本: 22.11.0-23-gd091788f2(2022 年 12 月 15 日,周四)
描述: 显示所测试版本的 LibreNMS 版本信息。该版本晚于 CVE-2021-44278 补丁版本(v21.12.0),确认这是一个新的、未修补的漏洞。

URL: https://[REDACTED]/device/114/tab=netflow
描述: 显示流量、数据包和通信量部分的正常 NFSen/Netflow 页面。这是未进行利用时的预期行为。

URL: https://[REDACTED]/device/114/tab=netflow?nfsen=..%2f..%2fapi-access
载荷: ..%2f..%2fapi-access(URL 编码的路径遍历)
描述: 当注入恶意载荷时,API Access 页面内容被加载,而非 NFSen 内容。这证明了本地文件包含攻击成功——api-access.inc.php 文件被包含,而非 general.inc.php。

URL: https://[REDACTED]/device/114/tab=netflow?nfsen=..%2f..%2fapi-access
载荷: ..%2f..%2fapi-access(URL 编码的路径遍历)
描述: 使用低权限用户(全局只读)尝试相同的利用方式。页面显示“您没有足够的权限查看此页面”的错误。这确认了:

showconfig.inc.php,已在 v21.12.0 中修复)。此漏洞影响 nfsen.inc.php,且尚未修补。实施基于白名单的验证:
$allowed_pages = ['general', 'stats', 'channel'];
if (in_array($vars['nfsen'], $allowed_pages, true)) {
include 'includes/html/pages/device/nfsen/' . $vars['nfsen'] . '.inc.php';
} else {
include 'includes/html/pages/device/nfsen/general.inc.php';
}
使用 basename() 去除路径遍历:
$nfsen_page = basename($vars['nfsen']);
if (is_file('includes/html/pages/device/nfsen/' . $nfsen_page . '.inc.php')) {
include 'includes/html/pages/device/nfsen/' . $nfsen_page . '.inc.php';
}
| 日期 | 操作 |
|---|---|
| 2026-02-01 | 发现漏洞 |
| 2026-04-14 | CVE 发布,通知厂商 |
| 2026-04-14 | 公开披露 |
本漏洞报告仅供教育和授权的安全研究目的使用。研究人员遵循了负责任披露原则,在公开披露之前已通知厂商。
发现者: Ömer Baran Parlak
联系方式: [email protected]
GitHub: parlakbarann