Google 漏洞奖励计划 (VRP)
Envoy 是 Google 漏洞奖励计划 (VRP) 的参与者。该计划对所有安全研究人员开放,并根据以下规则为发现和报告的漏洞提供奖励。
规则
VRP 的目标是为表彰外部安全研究人员对 Envoy 安全性的贡献提供一个正式流程。漏洞必须满足以下条件才能符合该计划的资格
漏洞必须满足以下一个或多个 目标,使用提供的基于 Docker 的 执行环境 进行演示,并且与该计划的 威胁模型 一致。
必须将漏洞报告给 **同时** envoy-security@googlegroups.com 和 https://bughunters.google.com/report。在进行漏洞分类和潜在的安全版本发布期间,必须对漏洞进行保密。在提交报告时,请遵循 披露指南。披露 SLO 文档位于 这里。通常,安全披露受 Linux 基金会的隐私政策 的约束,并且另外规定可以将 VRP 报告(包括报告人电子邮件地址和姓名)自由地与 Google 共享,以用于 VRP 目的。
漏洞在公开论坛(例如 GitHub 问题跟踪器、CVE 数据库(当以前与 Envoy 相关联时)等)中不得已知。先前未与 Envoy 漏洞相关联的现有 CVE 是可接受的。
漏洞不得同时提交给 Google 或 Lyft 运行的平行奖励计划。
奖励由 Envoy OSS 安全团队和 Google 决定。奖励将取决于上述标准。如果独立研究人员同时报告了同一个漏洞的多个实例,或者 OSS Envoy 安全团队已经在保密状态下跟踪了该漏洞,我们将努力公平地将奖励分配给报告人。
在相应的 Envoy 安全版本发布后,应从 Google VRP 领取奖励。
威胁模型
基本威胁模型与 Envoy 的 OSS 安全态势 相匹配。我们添加了一些临时限制,为该计划的初始阶段提供受限的攻击面。我们排除了来自以下方面的任何威胁
不受信任的控制平面。
运行时服务,例如访问日志记录、外部授权等。
不受信任的上游。
DoS 攻击,除非以下列出的情况除外。
除 HTTP 连接管理器网络过滤器和 HTTP 路由器过滤器以外的任何过滤器。
管理控制台;在执行环境中已禁用该控制台。
我们还明确排除了对 Envoy 进程进行的任何本地攻击(例如,通过本地进程、shell 等)。所有攻击必须通过端口 10000 上的网络数据平面进行。同样,内核和 Docker 漏洞也不在威胁模型范围内。
将来,随着我们提高该计划执行环境的复杂性,我们可能会放宽其中一些限制。
执行环境
我们提供充当该计划参考环境的 Docker 镜像
envoyproxy/envoy-google-vrp 镜像基于 Envoy 版本发布。仅在漏洞提交时可用的最新版本发布符合该计划的资格。第一个可用于 VRP 的版本发布将是 1.15.0 Envoy 版本。
envoyproxy/envoy-google-vrp-dev 镜像基于 Envoy 主分支构建。在漏洞提交时,仅最近 5 天内的构建符合该计划的资格。这些构建在那时不得受到任何公开披露的漏洞的影响。
通过 docker run
启动这些镜像时,将提供两个 Envoy 进程
边缘 Envoy 在端口 10000(HTTPS)上监听。它有一个 静态配置,根据 Envoy 的 边缘强化原则 进行配置。它具有黑洞、直接响应和请求转发路由规则(按顺序)
/content/*
:路由到原始 Envoy 服务器。/*
:返回 403(拒绝)。
原始 Envoy 是边缘 Envoy 的上游。它有一个 静态配置,仅提供直接响应,实际上充当 HTTP 原始服务器。有两个路由规则(按顺序)
/blockedz
:返回 200hidden treasure
。除非存在符合条件的漏洞,否则 Envoy 边缘服务器的 10000 端口上的流量永远无法收到此响应。/*
:返回 200normal
。
运行 Docker 镜像时,应提供以下命令行选项
-m 3g
以确保将内存限制为 3GB。执行环境至少应有这么多内存可用。每个 Envoy 进程都配置了过载管理器,限制为 1GB。-e ENVOY_EDGE_EXTRA_ARGS="<...>"
为边缘 Envoy 提供额外的 CLI 参数。需要设置此参数,但可以为空。-e ENVOY_ORIGIN_EXTRA_ARGS="<...>"
为原始 Envoy 提供额外的 CLI 参数。需要设置此参数,但可以为空。
目标
漏洞将通过在 10000 上触发的请求进行证明,这些请求会触发以下类别之一的故障模式
死亡查询:导致 Envoy 进程立即以某种方式发生段错误或中止的请求。
OOM:导致边缘 Envoy 进程发生 OOM 的请求。总共涉及的连接和流不应超过 100 个(即,排除暴力连接/流 DoS)。
路由规则绕过:能够访问
hidden treasure
的请求。TLS 证书泄露:能够获取边缘 Envoy 的
serverkey.pem
的请求。远程代码利用:通过网络数据平面获得的任何 root shell。
由 OSS Envoy 安全团队决定,足够有趣的漏洞不符合上述类别,但可能属于高危或严重漏洞类别。
使用 Docker 镜像
执行环境的基本调用将在本地端口 10000 上启动边缘 Envoy,如下所示
docker run -m 3g -p 10000:10000 --name envoy-google-vrp \
-e ENVOY_EDGE_EXTRA_ARGS="" \
-e ENVOY_ORIGIN_EXTRA_ARGS="" \
envoyproxy/envoy-google-vrp-dev:latest
在调试时,额外的参数可能很有用,例如,为了获得跟踪日志,请使用 wireshark
和 gdb
docker run -m 3g -p 10000:10000 --name envoy-google-vrp \
-e ENVOY_EDGE_EXTRA_ARGS="-l trace" \
-e ENVOY_ORIGIN_EXTRA_ARGS="-l trace" \
--cap-add SYS_PTRACE --cap-add NET_RAW --cap-add NET_ADMIN \
envoyproxy/envoy-google-vrp-dev:latest
可以使用以下命令在 Docker 容器中获得 shell
docker exec -it envoy-google-vrp /bin/bash
Docker 镜像包含 gdb
、strace
、tshark
(欢迎通过 PR 贡献其他建议,以更新 Docker 构建文件)。
重新构建 Docker 镜像
能够为研究目的重新生成自己的 Docker 基本镜像很有帮助。要执行此操作而不依赖于 CI,请按照 ci/docker_rebuild_google-vrp.sh 开头处的说明进行操作。此流程的示例如下所示
bazel build //source/exe:envoy-static
./ci/docker_rebuild_google-vrp.sh bazel-bin/source/exe/envoy-static
docker run -m 3g -p 10000:10000 --name envoy-google-vrp \
-e ENVOY_EDGE_EXTRA_ARGS="" \
-e ENVOY_ORIGIN_EXTRA_ARGS="" \
envoy-google-vrp:local