Glance欺骗身份验证暴力保护绕过CVE-2026-63770
Glance 是 Go 语言开发、开源可私有化部署的轻量化聚合仪表盘,主打一站式整合各类资讯、服务监控信息,单文件二进制开箱即用。
一、基本情况
Glance内置40余种组件,支持RSS资讯、天气、日历、股票、YouTube/Twitch动态、Docker容器状态、服务器监控、自定义API数据。

Glance 多套主题、自由拖拽网格布局,支持多分页分类管理;所有数据自行托管,不经三方平台,适合自建家庭实验室、个人工作台。
Glance 单页面统一展示信息,自托管玩家监控 NAS/服务器、程序员聚合技术资讯、打造私人浏览器起始页、家庭统一信息中控面板。
栋科技漏洞库关注到 Glance 0.8.5 及以下版本的身份验证处理程序存在 IP 伪造漏洞,已追踪为CVE-2026-63770,CVSS 3.X评分8.5。
二、漏洞分析
该漏洞源于当服务端开启代理模式时,未认证攻击者可通过在 X-Forwarded-For 请求头中传入任意内容,绕过暴力破解锁定防护机制。
攻击者篡改 X-Forwarded-For 头部最左侧 IP 值,让每次登录尝试都显示来自不同 IP 地址,
使得单 IP 登录失败计数器永远无法达到锁定阈值,从而无限制对登录接口爆破猜解账号密码。
当服务配置项proxied设置为true(官方文档推荐反向代理部署时启用),通过伪造X-Forwarded-For请求头即可完全绕过登录频率限制。
登录接口的暴力破解防护彻底失效,攻击者可无限制枚举密码。
(一)详细原理
Glance 默认安全策略:单个IP每5分钟最多允许5次登录失败。
用于统计限流的IP由addressOfRequest函数解析(文件 internal/glance/glance.go 369-396行),核心逻辑代码:
func (a *application) addressOfRequest(r *http.Request) string {
// ...
if !a.Config.Server.Proxied {
return remoteAddrWithoutPort()
}
forwardedFor := r.Header.Get("X-Forwarded-For")
if forwardedFor == "" {
return remoteAddrWithoutPort()
}
ips := strings.Split(forwardedFor, ",")
if len(ips) == 0 || ips[0] == "" {
return remoteAddrWithoutPort()
}
return ips[0]
}
开启Proxied: true后,函数直接取X-Forwarded-For头部最左侧第一个IP作为客户端真实地址。
该头部内容由客户端可控,可自定义任意字符串。
Nginx、Traefik等标准反向代理使用$proxy_add_x_forwarded_for时,只会在原有头部末尾追加真实客户端IP,保留前端传入的伪造IP。
例如攻击者传入X-Forwarded-For: 1.2.3.4,代理转发后头部变为1.2.3.4, 真实公网IP,程序仍会读取攻击者自定义的伪造IP。
官方配置文档(docs/configuration.md 269-273行)明确要求使用反向代理(Nginx/Traefik/NPM)时必须开启proxied: true。
也就是说官方推荐的生产部署方案,恰好存在可被绕过限流的漏洞。
身份认证处理函数handleAuthenticationAttempt(internal/glance/auth.go 134-248行)第142行调用addressOfRequest获取IP,
并以此作为失败登录计数器的索引。
攻击者每次请求更换伪造IP,每次登录尝试都会使用全新的空计数器,永远不会触发锁定。
三、POC概念验证
(一)前置条件:
Glance部署在反向代理后端,配置文件glance.yml开启proxied: true
循环脚本每次请求更换伪造IP,绕过限流爆破密码:
管理员已设置登录后刷新可查看每次请求传入唯一伪造IP,无论发送多少次登录请求,都不会触发频率限制。
(二)漏洞危害
任何能够访问Glance登录接口的攻击者,均可无限制暴力猜解任意账号密码。
风险程度取决于目标账号密码强度,弱口令、通用密码账号会被完全攻陷。
登录成功后可完整访问Glance控制面板,读取各类敏感组件数据:自定义API组件中的密钥、Docker容器信息、内网服务地址等。
公网可直接访问登录页面的部署环境风险最高,这也是文档中最常见的自托管使用场景。
四、影响范围
Glance ≤ 0.8.5
五、修复建议
Glance > 0.8.5
六、参考链接
管理员已设置登录后刷新可查看