セキュリティ問題の報告

Apache Sparkは、脆弱性の報告についてApacheセキュリティチームが概説する標準プロセスを使用しています。プロジェクトが対応するまで、脆弱性を公開しないでください。

セキュリティ上の脆弱性と思われる問題を報告するには、security@spark.apache.orgにメールを送信してください。これは非公開のリストであり、ApacheセキュリティチームとSpark PMCに届きます。

既知のセキュリティ問題

CVE-2023-32007: Spark UIを介したApache Sparkシェルコマンドインジェクションの脆弱性

このCVEは、バージョン3.1.3も影響を受けることを明確にするために、CVE-2022-33891の更新に過ぎません。それ以外の点では、新しい脆弱性ではありません。 Apache Spark 3.1.xは現在EOLです。

CVE-2023-22946: 悪意のある構成クラスからのApache Sparkプロキシユーザー権限昇格

重大度: 中

ベンダー: Apacheソフトウェア財団

影響を受けるバージョン

  • 3.4.0より前のバージョン

説明

3.4.0より前のApache Sparkバージョンでは、spark-submitを使用するアプリケーションは、権限を制限するために「プロキシユーザー」を指定して実行できます。ただし、アプリケーションは、クラスパスに悪意のある構成関連クラスを提供することにより、送信ユーザーの権限でコードを実行できます。これは、送信されたアプリケーションを管理するためにApache Livyを使用するなど、プロキシユーザーに依存するアーキテクチャに影響します。

この問題はSPARK-41958として追跡されています

緩和策

  • Apache Spark 3.4.0以降に更新し、spark.submit.proxyUser.allowCustomClasspathInClusterModeがデフォルトの「false」に設定され、送信されたアプリケーションによって上書きされないようにしてください。

クレジット

  • 古江 秀之 (発見者)
  • Yi Wu (Databricks) (修復開発者)

CVE-2022-31777: ログビューアーUI JavascriptにおけるApache Spark XSSの脆弱性

重大度: 中

ベンダー: Apacheソフトウェア財団

影響を受けるバージョン

  • 3.2.1以前
  • 3.3.0

説明

Apache Spark 3.2.1以前、および3.3.0におけるストアドクロスサイトスクリプティング(XSS)の脆弱性により、リモートの攻撃者がUIにレンダリングされるログに返されるログに悪意のあるペイロードを含めることで、ユーザーのWebブラウザーで任意のJavaScriptを実行できます。

緩和策

  • Spark 3.2.2、または3.3.1以降にアップグレードしてください

クレジット

  • Florian Walter (Veracode)

CVE-2022-33891: Spark UIを介したApache Sparkシェルコマンドインジェクションの脆弱性

重大度: 重要

ベンダー: 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シェルコマンドをビルドして実行する権限チェック関数に到達できる可能性があります。これにより、Sparkが現在実行されているユーザーとして、任意のシェルコマンドが実行されます。

緩和策

  • Spark 3.2.2、または3.3.0以降に更新してください

クレジット

  • Kostya Torchinsky (Databricks)

CVE-2021-38296: Apache Spark™キーネゴシエーションの脆弱性

重大度: 中

ベンダー: Apacheソフトウェア財団

影響を受けるバージョン

  • Apache Spark 3.1.2以前

説明

Apache Sparkは、spark.authenticateおよびspark.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クラスターでアプリケーションのリソースの起動に成功する可能性があります。これは、ホストマシンでシェルコマンドを実行するために利用できます。

これは、他のリソースマネージャー(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では、並列化を使用します。 Pysparkでは、ブロードキャストと並列化を使用します。そしてpython udfsの使用。

緩和策

  • 1.x、2.0.x、2.1.x、2.2.x、2.3.xユーザーは、2.4.xを含む2.3.3以降にアップグレードする必要があります

クレジット

  • この問題は、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 and Jose Carlos Luna Duran, CERN

CVE-2018-17190: セキュリティで保護されていないApache Spark™スタンドアロンがユーザーコードを実行する

重大度: 低

ベンダー: Apacheソフトウェア財団

影響を受けるバージョン

  • Apache Sparkのすべてのバージョン

説明

Sparkのスタンドアロンリソースマネージャーは、「マスター」ホストで実行するコードを受け入れ、そのコードを「ワーカー」ホストで実行します。マスター自体は、設計上、ユーザーコードを実行しません。ただし、マスターへの特別に細工されたリクエストにより、マスターもコードを実行する可能性があります。これは、認証が有効になっているスタンドアロンクラスターには影響しません。マスターホストは通常、ワーカーよりも他のリソースへのアウトバウンドアクセスが少ないですが、マスターでのコードの実行は予期せぬものです。

緩和策

ネットワークレベルの制限などによって、不要なアクセスから保護されていないSparkスタンドアロンクラスターで認証を有効にします。 https://spark.dokyumento.jp/docs/latest/security.htmlで説明されているspark.authenticateおよび関連するセキュリティプロパティを使用してください

クレジット

  • Andre Protas, Apple Information Security

CVE-2018-11804: Apache Spark™ build/mvnがzincを実行し、ビルドマシンから情報を公開する可能性がある

重大度: 低

ベンダー: Apacheソフトウェア財団

影響を受けるバージョン

  • 2.1.xリリースブランチ以前
  • Spark 2.2.3より前の2.2.xリリースブランチ
  • Spark 2.3.3より前の2.3.xリリースブランチ

説明

SparkのApache Mavenベースのビルドには、コンパイルを高速化するためにzincサーバーをダウンロードして実行する便利なスクリプト「build/mvn」が含まれています。このサーバーは、デフォルトで外部ホストからの接続を受け入れます。 zincサーバーへの特別に細工されたリクエストにより、ビルドを実行している開発者アカウントが読み取ることができるファイルの情報が明らかになる可能性があります。この問題は、Sparkのエンドユーザーではなく、ソースコードからSparkをビルドする開発者にのみ影響することに注意してください。

緩和策

  • zincはビルドプロセスの一部に過ぎないため、Sparkユーザーは影響を受けません。
  • Spark開発者は、ローカルのMavenインストールの「mvn」コマンドを使用してビルドし、build/mvnとzincの実行を回避できます。
  • 積極的に開発されたブランチ(2.2.x、2.3.x、2.4.x、master)をビルドしているSpark開発者は、ブランチを更新して、build/mvnスクリプトに既にパッチが適用されている緩和策を受け取ることができます
  • zincを個別に実行しているSpark開発者は、コマンドラインに「-server 127.0.0.1」を含め、「-idle-timeout 30m」などの追加フラグを検討して、同様の緩和策を実現できます。

クレジット

  • Andre Protas, Apple Information Security

CVE-2018-11770: Apache Spark™スタンドアロンマスター、Mesos REST APIは認証によって制御されない

重大度: 中

ベンダー: Apacheソフトウェア財団

影響を受けるバージョン

  • REST APIが有効になっているスタンドアロンマスターを実行している、またはクラスターモードが有効になっているMesosマスターを実行している1.3.0以降のSparkバージョン。提案された緩和策により、Spark 2.4.0の時点で問題が解決されました。

説明

バージョン1.3.0以降、Sparkのスタンドアロンマスターは、spark-submitで使用される送信メカニズムに加えて、ジョブ送信用のREST APIを公開しています。スタンドアロンでは、構成プロパティspark.authenticate.secretは、spark-submitを介してジョブを送信するリクエストを認証するための共有シークレットを確立します。ただし、REST APIはこの認証メカニズムやその他の認証メカニズムを使用しておらず、これは十分に文書化されていません。この場合、ユーザーは認証なしでドライバプログラムを実行できますが、REST APIを使用してエグゼキュータを起動することはできません。このREST APIは、ジョブ送信のためにクラスターモードで実行するように設定されている場合(つまり、MesosClusterDispatcherも実行している場合)、Mesosによっても使用されます。 Sparkの将来のバージョンでは、これらの点に関するドキュメントが改善され、REST APIを実行しているときにspark.authenticate.secretの設定が禁止され、これが明確になります。また、将来のバージョンでは、spark.master.rest.enabledのデフォルト値をfalseに変更することにより、スタンドアロンマスターのREST APIがデフォルトで無効になります。

緩和策

スタンドアロンマスターの場合、REST APIを使用していない場合は、`spark.master.rest.enabled` を `false` に設定してREST APIを無効にするか、REST API(デフォルトではポート6066)へのすべてのネットワークアクセスを、ジョブの送信を信頼されているホストに制限してください。Mesosユーザーは、`MesosClusterDispatcher` を停止できますが、これによりクラスタモードでジョブを実行できなくなります。代わりに、`MesosRestSubmissionServer`(デフォルトではポート7077)へのアクセスを信頼できるホストに制限することもできます。

クレジット

  • Imran Rashid、Cloudera
  • Fengwei Zhang、Alibaba Cloud Security Team

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 Web UI MHTML 脆弱性

JIRA: SPARK-20393

重大度: 中

ベンダー: Apacheソフトウェア財団

影響を受けるバージョン

  • Apache Spark バージョン 2.1.2、2.2.0 より前

説明

攻撃者は、サーバーに対するユーザーの信頼を利用して、共有 Spark クラスタを指し、MHTML を含むデータを Spark マスターまたは履歴サーバーに送信するリンクにアクセスするように仕向けることができます。 このデータにはスクリプトが含まれている可能性があり、ユーザーに反映され、MS Windows ベースのクライアントによって評価および実行される可能性があります。 これは Spark 自体への攻撃ではなく、ユーザーへの攻撃であり、Spark Web 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 Systems Center for Secure Engineering