報告安全問題

Apache Spark 使用由 Apache 安全團隊提供的標準流程來報告漏洞。請注意,漏洞在項目回應之前不應公開披露。

如需報告可能的安全漏洞,請發送電子郵件至 security@spark.apache.org。這是一個非公開的列表,將抵達 Apache 安全團隊和 Spark PMC。

已知安全問題

CVE-2023-32007:通過 Spark UI 的 Apache Spark shell 命令注入漏洞

此 CVE 僅對 CVE-2022-33891 進行更新,以澄清版本 3.1.3 也受影響。否則,這不是一個新的漏洞。請注意,Apache Spark 3.1.x 現已停用。

CVE-2023-22946:通過惡意配置類的 Apache Spark 代理用戶權限升級

嚴重性:中

供應商:Apache 軟體基金會

受影響版本

  • 3.4.0 之前的版本

描述

在 Apache Spark 版本 3.4.0 之前,使用 spark-submit 的應用程序可以指定要運行的 ‘代理用戶’,限制權限。但是,通過在類路徑上提供惡意的配置相關類,該應用程序可以以提交用戶的權限執行代碼。這影響了依賴代理用戶的架構,例如使用 Apache Livy 管理提交的應用程序的架構。

此問題正在以 SPARK-41958 追蹤

緩解措施

  • 升級至 Apache Spark 3.4.0 或更新版本,確保 spark.submit.proxyUser.allowCustomClasspathInClusterMode 設置為其默認值“false”,並且不被提交的應用覆蓋。

致謝

  • Hideyuki Furue(發現者)
  • Yi Wu(Databricks)(修復開發者)

CVE-2022-31777:Apache Spark 日誌查看器 UI Javascript 中的跨站腳本(XSS)漏洞

嚴重性:中

供應商:Apache 軟體基金會

受影響版本

  • 3.2.1 及早期版本
  • 3.3.0

描述

Apache Spark 3.2.1 及早期版本,以及 3.3.0 中存在存儲的跨站腳本(XSS)漏洞,允許遠程攻擊者通過將惡意有效載荷包含到日誌中,該有效載荷將在 UI 中呈現的日誌中返回,以執行用戶端的任意 JavaScript。

緩解措施

  • 升級至 Spark 3.2.2 或 3.3.1 或更新版本

致謝

  • Florian Walter(Veracode)

CVE-2022-33891:Apache Spark 通過 Spark UI 的 Shell 命令注入漏洞

嚴重性:重要

供應商:Apache 軟體基金會

受影響版本

  • 3.1.3 及早期版本(以前,此問題被標記為在 3.1.3 中已修復;此更改被追蹤為 CVE-2023-32007
  • 3.2.0 至 3.2.1

描述

Apache Spark UI 通過配置選項 spark.acls.enable 提供啟用 ACL 的可能性。通過身份驗證過濾器,這將檢查用戶是否具有查看或修改應用程序的許可權。如果啟用了 ACL,則 HttpSecurityFilter 中的代碼路徑可以允許某人通過提供任意用戶名來執行模擬。然後,惡意用戶可能能夠到達最終將基於其輸入構建 Unix shell 命令並執行它的權限檢查功能。這將導致作為當前 Spark 用戶運行的任意 shell 命令執行。

緩解措施

  • 升級至 Spark 3.2.2 或 3.3.0 或更新版本

致謝

  • Kostya Torchinsky(Databricks)

CVE-2021-38296:Apache Spark 金鑰協商漏洞

嚴重性:中

供應商:Apache 軟體基金會

受影響版本

  • Apache Spark 3.1.2 及早期版本

描述

Apache Spark 通過 spark.authenticatespark.network.crypto.enabled 支持 RPC 連接的端對端加密。在版本 3.1.2 及早期版本中,它使用自定義的互斥認證協議,允許完整的加密密鑰恢復。在初始交互式攻擊之後,這將允許某人離線解密明文流量。請注意,這不影響由 spark.authenticate.enableSaslEncryptionspark.io.encryption.enabledspark.sslspark.ui.strictTransportSecurity 控制的安全機制。

緩解措施

  • 升級至 Spark 3.1.3 或更新版本

致謝

  • Steve Weis(Databricks)

CVE-2020-9480:Apache Spark 在啟用身份驗證的獨立主機中的遠程代碼執行(RCE)漏洞

嚴重性:重要

供應商:Apache 軟體基金會

受影響版本

  • Apache Spark 2.4.5 及早期版本

描述

在 Apache Spark 2.4.5 及更早版本中,獨立的資源管理器主節點可能會被配置為需要通過共享密鑰進行身份驗證(spark.authenticate)。然而,當啟用時,一個特殊設計的 RPC 可以成功地在沒有共享密鑰的情況下在 Spark 集群上啟動應用程式的資源。這可被利用來在主機上執行 shell 命令。

這不會影響使用其他資源管理器(YARN、Mesos 等)的 Spark 集群。

緩解措施

  • 用戶應該升級到 Spark 2.4.6 或 3.0.0。
  • 在可能的情況下,應將對集群機器的網絡訪問限制為僅信任的主機。

致謝

  • Ayoub Elaassal

CVE-2019-10099: Apache Spark本地磁碟上的未加密數據

嚴重性:重要

供應商:Apache 軟體基金會

受影響的版本

  • 所有 Spark 1.x、Spark 2.0.x、Spark 2.1.x 和 2.2.x 版本
  • Spark 2.3.0 到 2.3.2

描述

在 Spark 2.3.3 之前的某些情況下,即使 spark.io.encryption.enabled=true,Spark 也會將用戶數據未加密地寫入本地磁碟。這包括被緩存到磁碟的塊(由 spark.maxRemoteBlockSizeFetchToMem 控制);在 SparkR 中,使用 parallelize;在 Pyspark 中,使用 broadcast 和 parallelize;以及使用 Python udfs。

緩解措施

  • 1.x、2.0.x、2.1.x、2.2.x、2.3.x 用戶應升級到 2.3.3 或更新版本,包括 2.4.x

致謝

  • 此問題由 NVIDIA 的 Thomas Graves 報告。

CVE-2018-11760: Apache Spark本地特權升級漏洞

嚴重性:重要

供應商:Apache 軟體基金會

受影響的版本

  • 所有 Spark 1.x、Spark 2.0.x 和 Spark 2.1.x 版本
  • Spark 2.2.0 到 2.2.2
  • Spark 2.3.0 到 2.3.1

描述

當使用 PySpark 時,不同的本地用戶可以連接到 Spark 應用程序並冒充運行 Spark 應用程序的用戶。這影響版本 1.x、2.0.x、2.1.x、2.2.0 到 2.2.2 和 2.3.0 到 2.3.1。

緩解措施

  • 1.x、2.0.x、2.1.x 和 2.2.x 用戶應升級到 2.2.3 或更新版本
  • 2.3.x 用戶應升級到 2.3.2 或更新版本
  • 否則,受影響的用戶應避免在多用戶環境中使用 PySpark。

致謝

  • Luca Canali 和 Jose Carlos Luna Duran,CERN

CVE-2018-17190: Apache Spark獨立執行用戶代碼的不安全性

嚴重性:低

供應商:Apache 軟體基金會

受影響版本

  • 所有版本的 Apache Spark

描述

Spark 的獨立資源管理器接受要在「主機」上執行的程式碼,然後再在「工作節點」上執行該程式碼。主機本身並不會按設計執行使用者的程式碼。然而,對主機的一個特別設計的請求可能導致主機也執行程式碼。請注意,這不會影響啟用驗證的獨立叢集。儘管主機通常對其他資源的出站訪問不如工作節點多,但在主機上執行程式碼仍然是意外的。

緩解措施

在任何未受其他安全防護措施限制的 Spark 獨立叢集上啟用驗證,例如通過網路級別的限制。使用 spark.authenticate 和相關的安全屬性,詳細說明請參見 https://spark.dev.org.tw/docs/latest/security.html

致謝

  • Andre Protas,蘋果資訊安全

CVE-2018-11804: Apache Spark 构建/mvn 运行 zinc,并可能从构建机器中公开信息

嚴重性:低

供應商:Apache 軟體基金會

受影響版本

  • 2.1.x 版分支及更早版本
  • 2.2.x 版分支在 Spark 2.2.3 之前
  • 2.3.x 版分支在 Spark 2.3.3 之前

描述

Spark 的 Apache Maven 构建包括一个便捷脚本,‘build/mvn’,用于下载和运行一个 zinc 服务器以加快编译速度。默认情况下,该服务器将接受来自外部主机的连接。一個特別設計的請求可能導致 zinc 服务器揭示文件中的信息,這些文件可讀取用於運行構建的開發人員帳戶。請注意,這個問題不影響 Spark 的最終用戶,僅影響從源代碼構建 Spark 的開發人員。

緩解措施

  • Spark 用戶不受影響,因為 zinc 只是構建過程的一部分。
  • Spark 開發人員可以簡單地使用本地 Maven 安裝的 ‘mvn’ 命令進行構建,並避免運行 build/mvn 和 zinc。
  • Spark 開發人員正在積極開發的分支(2.2.x、2.3.x、2.4.x、master)可以更新其分支,以接收已經修補到 build/mvn 脚本上的緩解措施
  • 獨立運行 zinc 的 Spark 開發人員可以在其命令行中包含“-server 127.0.0.1”,並考慮使用類似的緩解措施,如“-idle-timeout 30m”。

致謝

  • Andre Protas,蘋果資訊安全

CVE-2018-11770: Apache Spark 獨立主機、Mesos REST API 未受驗證控制

嚴重性:中

供應商:Apache 軟體基金會

受影響版本

  • Spark 版本從 1.3.0 開始,運行啟用了 REST API 的獨立主機,或運行了啟用了叢集模式的 Mesos 主機;建議的緩解措施已於 Spark 2.4.0 解決了此問題。

描述

從版本1.3.0開始,Spark的獨立主機除了使用spark-submit的提交機制外,還提供了REST API來提交作業。在獨立模式下,配置屬性spark.authenticate.secret確立了一個用於驗證通過spark-submit提交作業的請求的共享密鑰。然而,REST API並不使用這個或任何其他驗證機制,並且這並沒有得到充分的文檔化。在這種情況下,用戶可以在不進行身份驗證的情況下運行驅動程序,但無法使用REST API啟動執行器。這個REST API也被Mesos使用,當設置為在集群模式下運行時(即當也運行MesosClusterDispatcher時),用於提交作業。未來版本的Spark將改進這些方面的文檔,並禁止在運行REST API時設置spark.authenticate.secret,以明確表明這一點。未來版本還將通過將spark.master.rest.enabled的默認值更改為false來默認禁用獨立主機上的REST API。

緩解措施

對於獨立主機,如果未使用REST API,請將spark.master.rest.enabled設置為false以禁用它,並/或確保對REST API(默認情況下為端口6066)的所有網絡訪問僅限於信任的主機以提交作業。Mesos用戶可以停止MesosClusterDispatcher,但這將阻止它們以集群模式運行作業。或者,他們可以確保對MesosRestSubmissionServer(默認情況下為端口7077)的訪問僅限於信任的主機。

致謝

  • Imran Rashid,Cloudera
  • 張鋒偉,阿里巴巴雲安全團隊

CVE-2018-8024:Apache Spark UI中的跨站腳本(XSS)漏洞

嚴重性:中

受影響版本

  • Spark 2.1.0至2.1.2
  • Spark 2.2.0至2.2.1
  • Spark 2.3.0

描述

在Apache Spark 2.1.0到2.1.2、2.2.0到2.2.1和2.3.0中,惡意用戶可以構造一個指向Spark集群UI的作業和階段信息頁面的URL,如果用戶被誘導訪問該URL,則可用於執行腳本並暴露用戶在Spark UI中的視圖的信息。雖然一些瀏覽器像最新版本的Chrome和Safari能夠阻止這種類型的攻擊,但當前版本的Firefox(可能還有其他瀏覽器)無法阻止。

緩解措施

  • 2.1.x 的用戶應該升級到 2.1.3 或更新版本
  • 2.2.x 的用戶應該升級到 2.2.2 或更新版本
  • 2.3.x 的用戶應該升級到 2.3.1 或更新版本

致謝

  • Spencer Gietzen, Rhino Security Labs

CVE-2018-1334: Apache Spark 本地特權升級漏洞

嚴重程度:高

供應商:Apache 軟體基金會

受影響的版本

  • Spark 版本到 2.1.2
  • Spark 2.2.0 到 2.2.1
  • Spark 2.3.0

描述

在 Apache Spark 包括 2.1.2、2.2.0 到 2.2.1 以及 2.3.0 版本中,使用 PySpark 或 SparkR 時,可能會使不同的本地用戶連接到 Spark 應用程序並冒充運行 Spark 應用程序的用戶。

緩解措施

  • 1.x、2.0.x 和 2.1.x 的用戶應該升級到 2.1.3 或更新版本
  • 2.2.x 的用戶應該升級到 2.2.2 或更新版本
  • 2.3.x 的用戶應該升級到 2.3.1 或更新版本
  • 否則,受影響的用戶應避免在多用戶環境中使用 PySpark 和 SparkR。

致謝

  • Nehmé Tohmé, Cloudera, Inc.

CVE-2017-12612 Apache Spark 啟動器 API 中的不安全反序列化

JIRA: SPARK-20922

嚴重性:中

供應商:Apache 軟體基金會

受影響版本

  • Apache Spark 從 1.6.0 到 2.1.1 版本

描述

在 Apache Spark 1.6.0 到 2.1.1 版本中,啟動器 API 對其套接字接收的數據進行了不安全的反序列化。這使得使用啟動器 API 以編程方式啟動的應用程序潛在地易受攻擊者在本地計算機上的任何用戶帳戶上執行任意代碼的攻擊。這不會影響由 spark-submit 或 spark-shell 運行的應用程序。攻擊者將能夠以執行 Spark 應用程序的用戶的身份執行代碼。建議用戶升級到 2.1.2 版本、2.2.0 或更新版本。

緩解措施

升級到 Apache Spark 2.1.2、2.2.0 或更新版本。

致謝

  • Aditya Sharad, Semmle

CVE-2017-7678 Apache Spark XSS 網頁 UI MHTML 漏洞

JIRA: SPARK-20393

嚴重性:中

供應商:Apache 軟體基金會

受影響版本

  • 在 Apache Spark 2.1.2 之前的版本、2.2.0

描述

攻擊者可以利用用戶對服務器的信任,誘使他們訪問指向共享 Spark 集群並提交包括 MHTML 的數據到 Spark 主機或歷史服務器的鏈接。這些數據可能包含腳本,然後將被反射回用戶並且可能被 MS Windows 客戶端評估和執行。這不是針對 Spark 本身的攻擊,而是針對用戶,當用戶查看 Spark 網頁 UI 元素時可能會意外執行腳本。

緩解措施

升級到 Apache Spark 2.1.2、2.2.0 或更新版本。

範例

請求

GET /app/?appId=Content-Type:%20multipart/related;%20boundary=_AppScan%0d%0a--
_AppScan%0d%0aContent-Location:foo%0d%0aContent-Transfer-
Encoding:base64%0d%0a%0d%0aPGh0bWw%2bPHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD48L2h0bWw%2b%0d%0a
HTTP/1.1

回應中的摘錄

<div class="row-fluid">No running application with ID Content-Type: multipart/related;
boundary=_AppScan
--_AppScan
Content-Location:foo
Content-Transfer-Encoding:base64
PGh0bWw+PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD48L2h0bWw+
</div>

結果: 在上述載荷中,BASE64 資料解碼為

<html><script>alert("XSS")</script></html>

致謝

  • Mike Kasper, Nicholas Marion
  • IBM z 系統安全工程中心