Apache Sparkで期待できるセキュリティプロパティと、さまざまなセキュリティ機能の設定方法については、Spark Securityのドキュメントを参照してください。
Apache Sparkは、脆弱性の報告に関して、Apache Security Teamによって概説されている標準プロセスを使用します。プロジェクトが応答するまで、脆弱性は公に開示されるべきではないことに注意してください。
セキュリティ上の脆弱性の可能性を報告するには、security@spark.apache.orgにメールを送信してください。これは非公開のメーリングリストであり、Apache SecurityチームおよびSpark PMCに届きます。
いいえ、これはそれ自体では問題または脆弱性とは見なされません。なぜなら、リモートコード実行はApache Sparkの設計と目的に不可欠だからです。ユーザーはSparkジョブでコードを送信でき、そのコードは、実行できるコードを制限しようとすることなく、無条件に実行されます。他のプロセスを開始したり、ネットワーク接続を確立したり、ローカルファイルにアクセスしたり変更したりすることが可能です。Sparkクラスタを使用できるユーザーは、一般的に、リソースマネージャー(YARN、Kubernetesなど)によってSparkアプリケーションに割り当てられたリソースをすでに完全に制御しています。
過去には、多数のコード実行脆弱性レポートを受け取りましたが、これらは設計によるものとして却下しました。プロビジョニングされたアプリケーションリソースへの完全なアクセスは期待されます。ただし、ユーザーアプリケーションがリソースマネージャーによってプロビジョニングされたリソースの外部のリソースに影響を与えることは期待されていません。
Sparkクラスタ(UIおよび送信エンドポイントを含む)をインターネットまたは信頼できないネットワークに直接公開することは強く推奨しません。信頼されたネットワーク(会社のイントラネット、プライベートクラウド環境)内でのアクセスを推奨します。堅牢な認証、認可、およびネットワーク制御を使用してSparkクラスタへのアクセスを制限してください。
このCVEは、バージョン3.1.3も影響を受けることを明確にするためのCVE-2022-33891の更新にすぎません。それ以外は新しい脆弱性ではありません。Apache Spark 3.1.xは現在EOLであることに注意してください。
深刻度: 中
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Apache Spark 3.4.0より前のバージョンでは、spark-submitを使用するアプリケーションは「proxy-user」を指定して実行できますが、権限は制限されます。ただし、悪意のある設定関連クラスをクラスパスに提供することで、アプリケーションは送信ユーザーの権限でコードを実行できます。これは、Apache Livyを使用して送信アプリケーションを管理するなどの、プロキシユーザーに依存するアーキテクチャに影響します。
この問題はSPARK-41958として追跡されています
緩和策
spark.submit.proxyUser.allowCustomClasspathInClusterModeがデフォルトの「false」に設定されており、送信アプリケーションによって上書きされていないことを確認してください。クレジット
深刻度: 中
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Apache Spark 3.2.1以前、および3.3.0における格納型クロスサイトスクリプティング(XSS)脆弱性により、リモート攻撃者は悪意のあるペイロードをログに含めることで、UIでレンダリングされたログに表示されるユーザーのWebブラウザで任意のJavaScriptを実行できます。
緩和策
クレジット
深刻度: 重要
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Apache Spark UIは、設定オプションspark.acls.enableを介してACLを有効にする機能を提供します。認証フィルターを使用すると、ユーザーがアプリケーションを表示または変更するアクセス権を持っているかどうかを確認します。ACLが有効な場合、HttpSecurityFilter内のコードパスにより、任意のユーザー名を提供することでなりすましが可能になる可能性があります。悪意のあるユーザーは、最終的に入力に基づいてUnixシェルコマンドを構築し、それを実行する権限チェック関数に到達できる可能性があります。これにより、Sparkが現在実行されているユーザーとして任意のシェルコマンドが実行されます。
緩和策
クレジット
深刻度: 中
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Apache Sparkは、spark.authenticateおよびspark.network.crypto.enabledを介してRPC接続のエンドツーエンド暗号化をサポートします。バージョン3.1.2以前では、独自の相互認証プロトコルを使用しており、完全な暗号化キーの復旧が可能です。初期のインタラクティブ攻撃の後、これによりオフラインで平文トラフィックを復号化できるようになります。これは、spark.authenticate.enableSaslEncryption、spark.io.encryption.enabled、spark.ssl、spark.ui.strictTransportSecurityによって制御されるセキュリティメカニズムには影響しないことに注意してください。
緩和策
クレジット
深刻度: 重要
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Apache Spark 2.4.5以前では、スタンドアロンリソースマネージャーのマスターは、共有シークレットを介した認証(spark.authenticate)を要求するように構成できます。ただし、有効になっている場合、マスターへの特別に細工されたRPCは、共有キーなしでも、Sparkクラスタ上でアプリケーションのリソースを開始することに成功する可能性があります。これは、ホストマシン上でシェルコマンドを実行するために悪用される可能性があります。
これは、他のリソースマネージャー(YARN、Mesosなど)を使用するSparkクラスタには影響しません。
緩和策
クレジット
深刻度: 重要
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Spark 2.3.3より前のバージョンでは、特定の状況下でSparkは、spark.io.encryption.enabled=trueが設定されていても、ユーザーデータを暗号化せずにローカルディスクに書き込むことがありました。これには、ディスクにフェッチされるキャッシュブロック(spark.maxRemoteBlockSizeFetchToMemで制御)、SparkRでのparallelizeの使用、Pysparkでのbroadcastおよびparallelizeの使用、python udfの使用が含まれます。
緩和策
クレジット
深刻度: 重要
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
PySparkを使用している場合、別のローカルユーザーがSparkアプリケーションに接続し、Sparkアプリケーションを実行しているユーザーになりすますことが可能です。これは、バージョン1.x、2.0.x、2.1.x、2.2.0から2.2.2、および2.3.0から2.3.1に影響します。
緩和策
クレジット
深刻度: 低
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Sparkのスタンドアロンリソースマネージャーは、'master'ホストでコードを実行するためのコードを受け入れ、そのコードを'worker'ホストで実行します。マスター自体は、設計上、ユーザーコードを実行しません。ただし、マスターへの特別に細工されたリクエストにより、マスターもコードを実行する可能性があります。これは、認証が有効になっているスタンドアロンクラスタには影響しないことに注意してください。マスターホストは通常、ワーカーよりも他のリソースへのアウトバウンドアクセスが少ないですが、マスターでのコード実行はそれでも予期しないことです。
緩和策
認証が有効になっていないSparkスタンドアロンクラスタは、たとえばネットワークレベルの制限によって、セキュリティが保護されていない場合は、認証を有効にしてください。spark.authenticateおよびhttps://spark.dokyumento.jp/docs/latest/security.htmlで説明されている関連セキュリティプロパティを使用してください。
クレジット
深刻度: 低
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
SparkのApache Mavenベースのビルドには、コンパイルを高速化するためにzincサーバーをダウンロードして実行する便利なスクリプト「build/mvn」が含まれています。このサーバーはデフォルトで外部ホストからの接続を受け入れます。zincサーバーへの特別に細工されたリクエストにより、ビルドを実行している開発者アカウントが読み取れるファイル内の情報が公開される可能性があります。この問題はSparkのエンドユーザーには影響せず、ソースコードからSparkをビルドする開発者のみに影響することに注意してください。
緩和策
クレジット
深刻度: 中
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
バージョン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が無効になります。
緩和策
スタンドアロンマスターの場合、未使用の場合はspark.master.rest.enabledをfalseに設定してREST APIを無効にするか、REST API(デフォルトでポート6066)へのすべてのネットワークアクセスがジョブ送信を信頼できるホストに制限されていることを確認してください。MesosユーザーはMesosClusterDispatcherを停止できますが、これによりクラスタモードでジョブを実行できなくなります。または、MesosRestSubmissionServer(デフォルトでポート7077)へのアクセスが信頼できるホストに制限されていることを確認できます。
クレジット
深刻度: 中
影響を受けるバージョン
説明
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(およびその他の可能性のあるブラウザ)の現在のバージョンはブロックできません。
緩和策
クレジット
深刻度: 高
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
Apache Spark 2.1.2まで、2.2.0から2.2.1、および2.3.0では、PySparkまたはSparkRを使用している場合、別のローカルユーザーがSparkアプリケーションに接続し、Sparkアプリケーションを実行しているユーザーになりすますことが可能です。
緩和策
クレジット
JIRA: SPARK-20922
深刻度: 中
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
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以降にアップデートしてください。
クレジット
JIRA: SPARK-20393
深刻度: 中
ベンダー: The Apache Software Foundation
影響を受けるバージョン
説明
攻撃者は、ユーザーのサーバーへの信頼を利用して、共有SparkクラスタにリンクされたURLにアクセスするように騙し、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>
クレジット