RabbitMQ rabbitmqadmin 管理脚本未授权下载漏洞复现
RabbitMQ rabbitmqadmin 管理脚本未授权下载漏洞复现
0x00 背景概述
RabbitMQ 是一款基于 AMQP 协议的开源消息中间件,广泛用于业务系统之间的异步消息传递。为了方便运维管理,官方提供了 management(管理)插件,启用后会开放一个 Web 管理控制台(默认监听 15672 端口),同时内置一套基于 HTTP API 的命令行管理工具 rabbitmqadmin。按照官方文档的说明,rabbitmqadmin 本身是一个 Python 编写的单文件脚本,管理员通常从管理控制台的 /cli/ 页面下载后放到本机 PATH 中使用。
问题在于,这个脚本文件在管理控制台的 Web 服务上是以静态资源形式直接托管的,访问路径为 /cli/rabbitmqadmin。在不少实际部署中,运维人员将管理控制台端口直接映射到了公网,或者只做了基础的页面访问限制,导致该脚本文件可以被任意访问者直接下载。本篇记录一次针对该问题的完整验证过程:通过一个未携带任何认证信息的 GET 请求,即可从目标服务器上拉取 rabbitmqadmin 管理脚本的完整 Python 源码文本,属于典型的信息泄露问题。
0x01 漏洞成因
management 插件在提供 HTTP API 的同时,把 rabbitmqadmin 脚本作为控制台的配套下载资源挂载在 /cli/rabbitmqadmin 路径下。与 HTTP API 的其他接口不同,API 中的队列、交换机、用户等操作接口通常需要 HTTP Basic 认证,而脚本文件本身作为静态资源被 Web 服务直接返回,这一路径没有强制走认证流程。
正常场景下这只是给管理员提供的便利下载入口;但在管理控制台暴露面失控的场景下,这个入口就变成了一个未授权的文件下载点。虽然泄露的脚本本身是 RabbitMQ 发行版自带的通用代码,不直接包含目标环境的口令或数据,但它的存在至少说明两点:其一,目标的 management 插件已启用且管理控制台可达;其二,攻击者可以据此确认管理接口版本特征,并进一步把该控制台作为后续尝试的跳板。
0x02 影响范围
原始描述未给出明确的受影响版本号区间。从成因看,凡是启用了 management 插件、且将管理控制台(默认 15672 端口)暴露在公网或不可信网络中的 RabbitMQ 部署,理论上均可通过该路径无需认证获取 rabbitmqadmin 脚本,具体版本差异未逐一核验,此为基于成因的推断。互联网上存在大量标题为 "RabbitMQ Management" 的暴露控制台,攻击者批量探测的成本很低。
需要强调的是,该问题本身危害有限——泄露内容为发行版自带的通用管理脚本;真正的风险在于它暴露了管理面的可达性。若运维同时存在 guest 等默认口令未改、控制台弱口令等情况,攻击者可借道管理 API 完成队列数据读取、用户篡改乃至进一步渗透,这部分属于组合利用的延伸推断,需结合目标实际配置判断。
0x03 复现环境
验证在受控测试环境完成:一台部署了 RabbitMQ 并启用 management 插件的 Linux 主机,管理控制台监听 15672 端口;验证机与目标同处隔离网段。以下请求与响应均来自该受控环境的实际交互,涉及的具体主机地址统一以 192.0.2.10 代指。无需任何账号口令,直接用 curl 或 HTTP 工具发起请求即可。
0x04 复现过程
第一步,确认目标管理控制台可达。访问目标 15672 端口的 Web 页面,标题中带有 "RabbitMQ Management" 字样即说明管理插件已启用。
第二步,向脚本托管路径发起未认证请求,请求包原文如下:
GET /cli/rabbitmqadmin HTTP/1.1
Host: 192.0.2.10:15672
User-Agent: Mozilla/5.0 (X11; Linux x86_64) curl/8.4.0
Accept: */*
Connection: close
该请求不携带任何 Authorization 头。若目标存在此问题,服务端会直接返回 HTTP 200,响应体即为 rabbitmqadmin 脚本的 Python 源码文本,开头形如:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
...(后续为脚本正文,此处省略)第三步,判定。满足以下全部条件即可确认:响应状态码为 200;响应体以 #!/usr/bin/env python 开头;响应体中同时包含 import 语句与 def main(): 函数定义。四个条件同时成立,说明泄露的确实是 rabbitmqadmin 脚本原文而非其他页面内容。
第四步,拿到脚本后将其保存为本地文件并加上可执行权限,即可用其访问目标管理 API(此步涉及后续认证利用,超出本篇验证范围,仅作边界说明)。
修复建议:不要将 15672 端口暴露到公网,通过防火墙、ACL 或 VPN 限制管理控制台的访问来源;确实需要脚本下载功能的,可离线分发 rabbitmqadmin;升级至官方新版本;最后检查 Web 访问日志,发现异常访问后及时轮换管理口令与凭据。
0x05 参考信息
1. RabbitMQ 官方文档 —— rabbitmqadmin 命令行工具说明:https://www.rabbitmq.com/docs/management-cli
2. RabbitMQ 中文文档 —— 管理插件与 rabbitmqadmin 获取方式:https://rabbitmq.cn/docs/management-cli

Wayyt 6小时前
最新评论