首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Envoy代理高危漏洞披露:未授权服务访问风险与修复指南

Envoy代理高危漏洞披露:未授权服务访问风险与修复指南

原创
作者头像
qife122
发布2026-06-16 07:15:00
发布2026-06-16 07:15:00
1200
举报

Envoy代理 — 可导致未授权服务暴露的高危漏洞

Diógenes Rettori

2019年4月6日 · 5分钟阅读

概述

在Envoy代理中发现两个漏洞,可能允许对后端资源的未授权访问。根据CVSS方法,它们被归类为高危级别,需要立即采取措施。

CVE-2019-9900(CVSS评分 8.3)

在解析HTTP/1.x头部值时,Envoy 1.9及之前版本未拒绝嵌入的空字符(NUL,ASCII 0x0)。这使得远程攻击者可以构造包含嵌入式空字符的头部值,从而可能绕过头部匹配规则,获得对未授权资源的访问权限。

Envoy未遵循HTTP 1.1规范中关于在出现无效头部(表示请求格式错误)时重置或关闭连接的要求(规范见此处)。Envoy依赖于一个名为http-parser的C库来处理请求和响应,漏洞最终存在于该库中。该解析器库的团队已被通知,但截至本通讯发布时尚未提供修复。这可能会影响到依赖同一库的其他组件。

为了提供修复,Envoy产品安全团队在Envoy上实现了所需的更改。

CVE-2019-9901(CVSS评分 8.3)

Envoy 1.9及之前版本未对HTTP URL路径进行规范化处理。远程攻击者可以构造包含相对路径的路径,例如 something/../admin,以绕过访问控制(例如对 /admin 的阻止)。后端服务器随后可能解释未规范化的路径,从而使攻击者获得超出访问控制策略所授权范围的访问权限。

影响

这些CVE影响所有Envoy 1.9及更早版本,以及依赖这些版本的相关Envoy发行版。Solo.io Gloo v0.13.10及更早版本、Gloo Enterprise v0.13.8及更早版本也受这些CVE影响。

检测与诊断 — 判断您的系统是否易受攻击

Solo.io开发了一个实验室应用程序来帮助检测这些漏洞的暴露风险。请使用以下链接下载我们的工具并评估您的系统是否易受攻击。该工具已在多个Envoy发行版上进行了测试,源代码可在此处公开获取。我们建议使用提供的哈希值验证二进制文件的真实性。

Linux

SHA-256: dd8074d7843f0e3a8a8370fc604a146327becc808e843c4842ac4f0ab62b1900 envoy-cves-linux

MacOS

SHA-256: 9ad9eb69a280cdd5f717b6ca34aa3ff6787a5a225324efa6fd3f035e0d26ecd0 envoy-cves-darwin

该工具不旨在利用这些漏洞,其主要目的是验证您的系统是否已应用了修复补丁。

下方是针对存在漏洞的Envoy版本运行该工具的示例。

如果您的系统包含补丁,该工具会提示您不受这些CVE影响。

如何使用检测工具?

如果Envoy在您的PATH路径中,直接运行:

代码语言:bash
复制
$ envoy-cves
✔ Success! your envoy was tested and is immune to CVE-2019–9901. Make sure that the option normalize_path is turned on in your HCM settings.
✔ Success! your envoy was tested and is immune to CVE-2019–9900

如果不在PATH中,请通过标志参数提供Envoy的路径:

代码语言:bash
复制
$ envoy-cves --envoy=/path/to/envoy
✘ Fail! your envoy did not normalize the path — it is vulnerable to CVE-2019–9901
✘ Fail! your envoy accepts nil in headers — it is vulnerable to CVE-2019–9900

在容器内运行:

envoy-cves工具是一个独立的静态二进制文件,可以轻松在docker容器中使用。例如,使用官方Envoy容器镜像测试该工具:

代码语言:bash
复制
$ wget https://github.com/solo-io/envoy-cves/releases/download/v0.1.0/envoy-cves-linux
$ chmod +x envoy-cves
$ docker run -v $PWD/envoy-cves:/bin/envoy-cves --entrypoint=/bin/envoy-cves envoyproxy/envoy

在Kubernetes中,附加到已运行的Envoy:

使用kubectl复制并在Kubernetes内运行。

代码语言:bash
复制
$ kubectl -n NAMESPACE cp envoy-cves POD_WITH_ENVOY:/tmp/envoy-cves
$ kubectl -n NAMESPACE exec POD_WITH_ENVOY /tmp/envoy-cves
✔ Success! your envoy was tested and it is immune to CVE-2019–9901. Make sure the option normalize_path is turned on in your HCM settings.
✔ Success! your envoy was tested and it is immune to CVE-2019–9900

解决 — 采取行动

Solo.io建议Gloo项目和Gloo Enterprise产品的用户立即更新其版本:

Gloo社区版 — 更新至 v0.13.10-patch1

代码语言:bash
复制
kubectl apply -f https://github.com/solo-io/gloo/releases/download/v0.13.10-patch1/gloo-gateway.yaml

如果您在默认命名空间 gloo-system 之外的其他命名空间中安装了Gloo,请确保进行必要的更改。

Gloo企业版 — 下载更新的 glooctl

(MacOS / Linux / Windows)

下一步是运行最适合您情况的 glooctl install 命令。如果针对已安装的Gloo Enterprise运行此命令,将应用带有补丁的新定义,受影响的Gloo Enterprise网关将被更新。

补丁版本解决了这两个CVE,从而减少您的暴露风险。

强烈建议依赖Envoy社区发行版的用户也将其系统修补到社区提供的补丁版本。如果您希望运行Envoy并希望利用易于使用的控制平面,我们推荐Gloo。

如需帮助,请加入我们的Slack。

致谢

Solo.io感谢Harvey Tuch和Erlend Oftedal发现这些CVE,并感谢广大Envoy社区共同努力提供修复方案。

CSD0tFqvECLokhw9aBeRqlw6l185wj/r9rb77kv+2c4dy5mli1F9mtbbFzHm1Whz/JL2Yy/4ZEAbYO269XGQtKNvzmz9ovyCqvYPGNs4/QBKWWQPqUj1V8+4hUDgy/qTinh7kPk2PthpHAk7cBZIQsjNTNRKZI7B9yXt+q045LNaC1nXfX8zsH4SIdyOuMeO

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Envoy代理 — 可导致未授权服务暴露的高危漏洞
    • 概述
      • CVE-2019-9900(CVSS评分 8.3)
      • CVE-2019-9901(CVSS评分 8.3)
    • 影响
    • 检测与诊断 — 判断您的系统是否易受攻击
    • 如何使用检测工具?
    • 解决 — 采取行动
    • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档