首页 网络安全 正文
  • 本文约2732字,阅读需14分钟
  • 128
  • 0

AdGuard Home身份验证绕过CVE-2026-32136

摘要

栋科技漏洞库关注到 AdGuard Home 在 0.107.73 之前的版本存在身份验证绕过漏洞,追踪为CVE-2026-32136,CVSS 3.X评分为9.8。

AdGuard Home 是 AdGuard 推出的一款开源、免费、全网级广告拦截与隐私保护 DNS 服务器软件,能全网络范围的广告和追踪拦截。

一、基本情况

AdGuard Home 一次部署全网络生效,无客户端依赖,它在网络入口处通过 DNS 过滤实现全设备防护,无需在终端单独安装客户端。

AdGuard Home身份验证绕过CVE-2026-32136

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

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接