近期,开源服务器监控项目 Nezha Monitoring(哪吒监控)披露了一项严重安全漏洞。安全研究人员发现,攻击者无需任何身份验证,仅通过构造特殊 URL,即可读取服务器上的敏感文件,包括配置文件和数据库文件,最终实现管理员账户接管。
该漏洞已被分配编号 CVE-2026-53519,CVSS 评分高达 9.1(Critical),受影响版本为 2.0.13 之前的所有版本。
对于大量将哪吒监控面板直接暴露在公网的用户而言,该漏洞具有极高的实际风险。
漏洞概述
此次漏洞属于典型的路径遍历(Path Traversal)漏洞。
问题出现在 Dashboard 前端资源的路由处理逻辑中。
程序原本希望将以下路径识别为前端页面资源:
/dashboard/login /dashboard/settings /dashboard/server
但由于开发过程中采用了简单的字符串前缀判断:
strings.HasPrefix(path, "/dashboard")
攻击者可以构造如下特殊路径:
/dashboard../data/config.yaml
由于 /dashboard.. 同样满足前缀匹配条件,程序会错误地将其当作 Dashboard 请求进行处理。
随后路径经过内部拼接和规范化处理后,最终访问到了:
data/config.yaml
从而导致服务器直接返回配置文件内容。
简单来说,本应访问前端页面资源的请求,被攻击者利用实现了目录跳转,进而读取服务器上的敏感文件。
漏洞利用方式
研究人员公布的验证请求如下:
curl --path-as-is \ http://example.com/dashboard../data/config.yaml
如果目标存在漏洞,将直接返回:
debug: false listen_port: 8008 jwt_secret_key: xxxxxxxxxxxxx agent_secret_key: xxxxxxxxxxxxx
除此之外,攻击者还可以访问:
/dashboard../data/sqlite.db
从而下载整个数据库文件。
更值得注意的是,部分 URL 编码形式同样能够成功绕过检测,例如:
/dashboard%2e%2e/data/config.yaml /dashboard..%2fdata/config.yaml
这意味着许多常见的 Web 防护规则可能无法有效拦截此类攻击请求。
可以泄露哪些数据?
1、配置文件(config.yaml)
默认路径:
data/config.yaml
通常包含:
- JWT 密钥(jwt_secret_key)
- Agent 密钥(agent_secret_key)
- OAuth 客户端密钥
- GitHub Token
- GeoIP API Key
- 第三方通知服务密钥
- 邮件服务配置
其中最关键的是:
jwt_secret_key:
因为该密钥直接决定 Dashboard 登录身份验证的安全性。
2、数据库文件(sqlite.db)
默认路径:
data/sqlite.db
数据库中可能包含:
- 管理员账户信息
- 用户列表
- 节点服务器信息
- API Token
- 监控任务配置
- 告警通知配置
- OAuth 登录配置
攻击者可以离线分析数据库内容,获取更多敏感信息。
为什么这个漏洞如此危险?
很多文件读取漏洞仅会造成信息泄露。
但此次漏洞可以进一步升级为后台管理员权限接管。
完整攻击链如下:
第一步:读取配置文件
攻击者获取:
jwt_secret_key
第二步:读取数据库
攻击者获取管理员账户对应的用户 ID。
第三步:伪造 JWT
哪吒监控默认采用:
HS256
算法签发 JWT。
HS256 属于对称加密算法,只要掌握签名密钥,就能够自行生成合法 Token。
第四步:伪造管理员身份
攻击者使用泄露的 JWT 密钥签发新的管理员 Token。
然后将其写入:
nz-jwt
Cookie 中。
系统会将攻击者视为已登录管理员。
第五步:完全控制 Dashboard
成功登录后可执行:
- 新增节点
- 删除服务器
- 修改用户
- 配置通知渠道
- 修改 OAuth 设置
- 导出监控数据
- 获取 API Token
整个过程无需密码爆破、无需社会工程学攻击,也无需用户交互。
受影响版本
受影响版本:
Nezha Monitoring < 2.0.13
已修复版本:
Nezha Monitoring 2.0.13
官方已在 2.0.13 版本中修复该问题。
如何检查自己是否受到影响?
如果满足以下条件:
- 使用官方默认部署方式
- Dashboard 可从公网访问
- 当前版本低于 2.0.13
则建议立即检查。
同时可以查看 Web 访问日志中是否出现过以下异常请求:
/dashboard../
/dashboard%2e%2e/
/dashboard..%2f
/../data/
这些访问记录都可能代表有人尝试利用该漏洞。
官方修复方案
官方修复主要包括两个方向。
1、严格匹配 Dashboard 路径
原有逻辑:
strings.HasPrefix(path, "/dashboard")
修复后仅允许:
/dashboard/ /dashboard/login /dashboard/settings
等合法路径访问。
2、防止目录逃逸
在路径拼接完成后再次验证目标路径。
确保最终访问路径仍位于:
admin-dist/
目录内部。
防止:
../
导致目录跳出。
用户应立即采取哪些措施?
1、升级至 2.0.13 或更高版本
这是最重要也是最有效的修复方式。
2、更换所有密钥
即使已经升级,也建议重新生成:
- jwt_secret_key
- agent_secret_key
- OAuth Secret
- GitHub Token
- 第三方 API Key
因为无法确认漏洞披露前是否已经遭到访问。
3、重置管理员密码
如果数据库文件可能已经泄露,建议重置所有后台账户密码。
4、限制后台公网访问
推荐使用:
- Cloudflare Access
- Zero Trust
- VPN
- IP 白名单
- WAF
避免直接将管理面板暴露在互联网。
站长点评
从技术角度来看,这并不是一个复杂的漏洞。
问题根源在于开发过程中将字符串前缀匹配误当成了安全边界。
例如:
/dashboard /dashboard..
都会满足前缀判断条件。
当这种逻辑与路径拼接函数组合使用时,就可能产生目录遍历风险。
值得注意的是,此类漏洞往往比远程代码执行漏洞更容易被大规模利用。攻击者不需要登录账户,不需要特殊权限,也无需复杂利用链,仅通过一个精心构造的 HTTP 请求即可获取敏感数据。
对于正在使用哪吒监控的用户来说,如果当前运行版本低于 2.0.13,建议尽快完成升级,并同步更换 JWT 密钥及其他敏感凭据。同时检查历史访问日志,确认是否存在异常的 /dashboard../ 访问记录,以降低潜在安全风险。










