parlakbarann/CVE-2026-30480

GitHub: parlakbarann/CVE-2026-30480

针对 LibreNMS 中路径遍历导致的本地文件包含漏洞的复现与验证工具。

Stars: 1 | Forks: 0

# CVE-2026-30480:LibreNMS 通过路径遍历的本地文件包含(LFI)漏洞 ## 概述 LibreNMS 的 NFSen 模块中存在本地文件包含(LFI)漏洞。认证攻击者可以利用路径遍历序列包含服务器文件系统中的任意 PHP 文件。 | 字段 | 值 | |------|----| | **产品** | 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()` 检查,该检查无法防止路径遍历序列。 ### 根本原因 1. 用户输入直接流入文件路径构造 2. 未对路径遍历字符(`../`)进行清理 3. 未对允许的值进行白名单验证 4. `is_file()` 仅检查存在性,不检查路径安全性 ## 概念验证(PoC) ### 先决条件 - 已认证的 LibreNMS 用户 - 可访问至少一个带有 Netflow/NFSen 标签的设备 ### 复现步骤 1. 以任意认证用户身份登录 LibreNMS 2. 访问任意设备的 Netflow 标签页: https://[TARGET]/device/[DEVICE_ID]/tab=netflow 3. 添加恶意参数: https://[TARGET]/device/[DEVICE_ID]/tab=netflow?nfsen=..%2f..%2fapi-access 4. 观察到 API Access 页面内容被加载,而非 NFSen 内容 ### 预期行为与实际行为 | 场景 | 预期 | 实际 | |------|------|------| | 正常请求 | NFSen 通用页面(流量、数据包、流量统计) | NFSen 通用页面 | | 恶意请求 | NFSen 通用页面 | **API Access 页面内容** | ## 影响 | 影响类型 | 描述 | |----------|------| | **信息泄露** | 包含并执行任意 `.inc.php` 文件 | | **权限提升** | 以低权限用户身份访问仅限管理员页面 | | **潜在 RCE** | 若攻击者可控制任意 `.inc.php` 文件内容 | ## 截图 ### 0. LibreNMS 版本 **URL:** `https://[REDACTED]/about` **版本:** `22.11.0-23-gd091788f2`(2022年12月15日) **描述:** 显示测试版本的 LibreNMS 版本信息。该版本在 CVE-2021-44278 补丁(v21.12.0)之后,确认这是一个新的、未修补的漏洞。 ![版本](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/582a4084b0120656.png) ### 1. 正常的 NFSen 页面 **URL:** `https://[REDACTED]/device/114/tab=netflow` **描述:** 显示流量、数据包和流量统计部分的正常 NFSen/Netflow 页面。这是未利用时的预期行为。 ![正常](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8e7f362d65120657.png) ### 2. 被利用 - API Access 页面(管理员用户) **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`。 ![利用-管理员](https://raw.githubusercontent.com/parlakbarann/CVE-2026-30480/main/screenshots/exploit-admin.png) ### 3. 被利用 - 权限错误(全局只读用户) **URL:** `https://[REDACTED]/device/114/tab=netflow?nfsen=..%2f..%2fapi-access` **载荷:** `..%2f..%2fapi-access`(URL 编码的路径遍历) **描述:** 使用权限较低的用户(全局只读)尝试相同载荷。页面显示“您没有足够的权限查看此页面”错误。这确认了: 1. LFI 漏洞有效(文件已被包含) 2. 目标文件的内部权限检查被触发 3. 与正常 NFSen 页面显示的内容不同 ![利用-用户](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4dc31de16b120729.png) ## 受影响版本 - 包含 NFSen 模块的 LibreNMS 版本 - **测试版本:** 22.11.0-23-gd091788f2(2022年12月15日) - 漏洞存在于当前主分支 - **注意:** 这与 CVE-2021-44278(影响 `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 | 公开披露 | ## 参考链接 - [CWE-98:包含/要求语句中文件名控制不当](https://cwe.mitre.org/data/definitions/98.html) - [CWE-22:路径名未正确限制在受限目录内](https://cwe.mitre.org/data/definitions/22.html) - [OWASP 路径遍历](https://owasp.org/www-community/attacks/Path_Traversal) - [LibreNMS 官方网站](https://www.librenms.org/) ## 免责声明 本漏洞报告仅供教育和授权安全研究使用。研究人员在公开披露前已遵循负责任披露流程通知厂商。 ## 致谢 **发现者:** Ömer Baran Parlak **联系:** omerbaranparlak@gmail.com **GitHub:** [parlakbarann](https://github.com/parlakbarann)
标签:API密钥检测, CVE-2026-30480, ffuf, is_file, LFI, LibreNMS, Local File Inclusion, NFSen, OpenVAS, PHP, traversal, Web安全, 包含漏洞, 文件包含, 服务端文件读取, 漏洞, 白名单校验, 网络安全研究, 蓝队分析, 认证绕过, 路径拼接, 路径遍历, 输入验证