Google 漏洞奖励计划 (VRP)

Envoy 是 Google 漏洞奖励计划 (VRP) 的参与者。该计划对所有安全研究人员开放,并根据以下规则为发现和报告的漏洞提供奖励。

规则

VRP 的目标是为表彰外部安全研究人员对 Envoy 安全性的贡献提供一个正式流程。漏洞必须满足以下条件才能符合该计划的资格

  1. 漏洞必须满足以下一个或多个 目标,使用提供的基于 Docker 的 执行环境 进行演示,并且与该计划的 威胁模型 一致。

  2. 必须将漏洞报告给 **同时** envoy-security@googlegroups.comhttps://bughunters.google.com/report。在进行漏洞分类和潜在的安全版本发布期间,必须对漏洞进行保密。在提交报告时,请遵循 披露指南。披露 SLO 文档位于 这里。通常,安全披露受 Linux 基金会的隐私政策 的约束,并且另外规定可以将 VRP 报告(包括报告人电子邮件地址和姓名)自由地与 Google 共享,以用于 VRP 目的。

  3. 漏洞在公开论坛(例如 GitHub 问题跟踪器、CVE 数据库(当以前与 Envoy 相关联时)等)中不得已知。先前未与 Envoy 漏洞相关联的现有 CVE 是可接受的。

  4. 漏洞不得同时提交给 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 的 边缘强化原则 进行配置。它具有黑洞、直接响应和请求转发路由规则(按顺序)

    1. /content/*:路由到原始 Envoy 服务器。

    2. /*:返回 403(拒绝)。

  • 原始 Envoy 是边缘 Envoy 的上游。它有一个 静态配置,仅提供直接响应,实际上充当 HTTP 原始服务器。有两个路由规则(按顺序)

    1. /blockedz:返回 200 hidden treasure。除非存在符合条件的漏洞,否则 Envoy 边缘服务器的 10000 端口上的流量永远无法收到此响应。

    2. /*:返回 200 normal

运行 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

在调试时,额外的参数可能很有用,例如,为了获得跟踪日志,请使用 wiresharkgdb

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 镜像包含 gdbstracetshark(欢迎通过 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