
Diógenes Rettori
2019年4月6日 · 5分钟阅读
在Envoy代理中发现两个漏洞,可能允许对后端资源的未授权访问。根据CVSS方法,它们被归类为高危级别,需要立即采取措施。
在解析HTTP/1.x头部值时,Envoy 1.9及之前版本未拒绝嵌入的空字符(NUL,ASCII 0x0)。这使得远程攻击者可以构造包含嵌入式空字符的头部值,从而可能绕过头部匹配规则,获得对未授权资源的访问权限。
Envoy未遵循HTTP 1.1规范中关于在出现无效头部(表示请求格式错误)时重置或关闭连接的要求(规范见此处)。Envoy依赖于一个名为http-parser的C库来处理请求和响应,漏洞最终存在于该库中。该解析器库的团队已被通知,但截至本通讯发布时尚未提供修复。这可能会影响到依赖同一库的其他组件。
为了提供修复,Envoy产品安全团队在Envoy上实现了所需的更改。
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路径中,直接运行:
$ 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的路径:
$ 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容器镜像测试该工具:
$ 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内运行。
$ 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–9900Solo.io建议Gloo项目和Gloo Enterprise产品的用户立即更新其版本:
Gloo社区版 — 更新至 v0.13.10-patch1
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 删除。