LibreNMS告警规则API跨站脚本漏洞技术分析

本文详细分析了CVE-2025-68614漏洞,这是一个影响LibreNMS的存储型跨站脚本漏洞。攻击者可通过API创建包含恶意脚本的告警规则名称,当用户访问告警规则页面时触发代码执行。

LibreNMS 告警规则 API 跨站脚本漏洞 · CVE-2025-68614

漏洞详情

包信息

  • 包管理器: Composer
  • 包名称: librenms/librenms
  • 受影响版本: < 25.12.0
  • 已修复版本: 25.12.0

漏洞描述

POC文件可在以下链接找到:https://trendmicro-my.sharepoint.com/:u:/p/kholoud_altookhy/IQCfcnOE5ykQSb6Fm-HFI872AZ_zeIJxU-3aDk0jh_eX_NE?e=zkN76d

ZDI-CAN-28575: LibreNMS 告警规则 API 跨站脚本漏洞

CVSS评分: 4.3 (AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L)

漏洞分析

测试环境

  • 测试版本: 25.10.0
  • 安装文件: NA
  • 测试平台: NA

技术分析

LibreNMS 告警规则 API 存储型跨站脚本漏洞

概述 可以通过 LibreNMS API 创建或更新告警规则。告警规则名称未经过适当清理,可用于注入 HTML 代码。

受影响版本 撰写本文时的最新版本(25.10.0)存在漏洞。

根本原因 通过 API 创建或更新告警规则时,会调用 includes/html/api_functions.inc.php 中的 add_edit_rule() 函数来添加/更新数据库中的条目。通过 Web 界面创建告警规则时,会从规则名称中剥离 HTML 标签,但使用 API 时不会这样做。

因此,可以创建名称为以下内容的告警规则:

1
<script>alert(1)</script>

之后,当受害者浏览到“告警 > 告警规则”页面时,会调用 PHP 脚本 includes/html/print-alert/rules.php。该脚本特别包含文件 includes/html/modal/alert_rule_list.inc.php,该文件返回用于搜索告警规则的模态窗口的 HTML 代码。

该模态窗口包含一个包含所有规则的 HTML 表格,包括它们的名称,以及一个内联 JavaScript,该脚本调用 bootgrid() 函数(http://www.jquery-bootgrid.com/)来对表格进行样式设置和增强。

alert_rule.list.inc.php 在将规则名称包含到表格中之前,使用函数 e() 对其进行清理,该函数对所有特殊字符进行 XML 编码。但是,bootgrid() 函数在增强表格时会重写表格单元格的内容,作为副作用,XML 字符引用会被解码。脚本更新表格后,浏览器现在将有效负载解释为 HTML 标签并将代码包含到 DOM 中。

检测指导

  • 检查 HTTP POST 和 PUT 请求到包含字符串 /api/v0/rules 的请求 URI
  • 检查 name JSON 值是否包含 < 字符

PoC

概念验证可以按如下方式运行:

1
python3 poc.py ip_addr -T <token>

漏洞信息

致谢

该漏洞由以下人员发现: Trend Micro 趋势研究的 Simon Humbert

进一步详情

支持文件: 如果本报告中包含支持文件,则它们将在受密码保护的 ZIP 文件中提供。密码是 ZDI 候选编号,格式为:ZDI-CAN-XXXX,其中 XXXX 是 ID 号。

披露政策

我们的漏洞披露政策可在以下网址在线获取: http://www.zerodayinitiative.com/advisories/disclosure_policy/

参考链接

安全评分

CVSS v3.1 基准指标

  • 攻击向量: 网络(AV:N)
  • 攻击复杂度: 低(AC:L)
  • 所需权限: 高(PR:H)
  • 用户交互: 需要(UI:R)
  • 影响范围: 未改变(S:U)
  • 机密性影响: 低(C:L)
  • 完整性影响: 低(I:L)
  • 可用性影响: 低(A:L)

CVSS向量: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L

EPSS 评分

  • 评分: 0.002%(第 0 百分位)
  • 该分数估计此漏洞在未来 30 天内被利用的概率

弱点

  • CWE-ID: CWE-79
  • 描述: 在网页生成过程中对输入的不当中和(跨站脚本)
  • 该产品在将用户可控的输入放置到用作提供给其他用户的网页的输出中之前,没有对其进行中和或中和不正确。

元数据

  • CVE ID: CVE-2025-68614
  • GHSA ID: GHSA-c89f-8g7g-59wj
  • 源代码: librenms/librenms
  • 报告者: zdi-disclosures
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计