Google 漏洞獎勵計畫 (VRP)

Envoy 參與了Google 的漏洞獎勵計畫 (VRP)。此計畫開放給所有安全研究人員,並將根據以下規則,針對發現和報告的漏洞提供獎勵。

規則

VRP 的目標是提供一個正式流程,以表彰外部安全研究人員對 Envoy 安全性的貢獻。漏洞應符合以下條件才能符合該計畫的資格

  1. 漏洞必須符合以下其中一個目標,並使用提供的基於 Docker 的執行環境進行示範,並與該計畫的威脅模型保持一致。

  2. 漏洞必須報告給 以下兩者envoy-security@googlegroups.com 和透過 https://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