Apache Sparkは、脆弱性の報告についてApacheセキュリティチームが概説する標準プロセスを使用しています。プロジェクトが対応するまで、脆弱性を公開しないでください。
セキュリティ上の脆弱性と思われる問題を報告するには、security@spark.apache.org
にメールを送信してください。これは非公開のリストであり、ApacheセキュリティチームとSpark PMCに届きます。
このCVEは、バージョン3.1.3も影響を受けることを明確にするために、CVE-2022-33891の更新に過ぎません。それ以外の点では、新しい脆弱性ではありません。 Apache Spark 3.1.xは現在EOLです。
重大度: 中
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
3.4.0より前のApache Sparkバージョンでは、spark-submitを使用するアプリケーションは、権限を制限するために「プロキシユーザー」を指定して実行できます。ただし、アプリケーションは、クラスパスに悪意のある構成関連クラスを提供することにより、送信ユーザーの権限でコードを実行できます。これは、送信されたアプリケーションを管理するためにApache Livyを使用するなど、プロキシユーザーに依存するアーキテクチャに影響します。
この問題はSPARK-41958として追跡されています
緩和策
spark.submit.proxyUser.allowCustomClasspathInClusterMode
がデフォルトの「false」に設定され、送信されたアプリケーションによって上書きされないようにしてください。クレジット
重大度: 中
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
Apache Spark 3.2.1以前、および3.3.0におけるストアドクロスサイトスクリプティング(XSS)の脆弱性により、リモートの攻撃者がUIにレンダリングされるログに返されるログに悪意のあるペイロードを含めることで、ユーザーのWebブラウザーで任意のJavaScriptを実行できます。
緩和策
クレジット
重大度: 重要
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
Apache Spark UIは、構成オプションspark.acls.enableを介してACLを有効にすることができます。認証フィルターを使用すると、ユーザーがアプリケーションを表示または変更するためのアクセス許可を持っているかどうかがチェックされます。 ACLが有効になっている場合、HttpSecurityFilterのコードパスにより、任意のユーザー名を提供することでなりすましを実行できる可能性があります。悪意のあるユーザーは、最終的に入力に基づいてUnixシェルコマンドをビルドして実行する権限チェック関数に到達できる可能性があります。これにより、Sparkが現在実行されているユーザーとして、任意のシェルコマンドが実行されます。
緩和策
クレジット
重大度: 中
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
Apache Sparkは、spark.authenticate
およびspark.network.crypto.enabled
を介したRPC接続のエンドツーエンド暗号化をサポートしています。 3.1.2以前のバージョンでは、完全な暗号化キーの回復を可能にする、特注の相互認証プロトコルを使用しています。初期のインタラクティブな攻撃の後、これにより、オフラインでプレーンテキストトラフィックを復号化できます。これは、spark.authenticate.enableSaslEncryption
、spark.io.encryption.enabled
、spark.ssl
、spark.ui.strictTransportSecurity
によって制御されるセキュリティメカニズムには影響しません。
緩和策
クレジット
重大度: 重要
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
Apache Spark 2.4.5以前では、スタンドアロンリソースマネージャーのマスターは、共有シークレットを介して認証(spark.authenticate
)を要求するように構成できます。ただし、有効になっている場合、マスターへの特別に細工されたRPCは、共有キーがなくても、Sparkクラスターでアプリケーションのリソースの起動に成功する可能性があります。これは、ホストマシンでシェルコマンドを実行するために利用できます。
これは、他のリソースマネージャー(YARN、Mesosなど)を使用するSparkクラスターには影響しません。
緩和策
クレジット
重大度: 重要
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
Spark 2.3.3より前では、特定の状況で、spark.io.encryption.enabled=true
であっても、Sparkはユーザーデータを暗号化せずにローカルディスクに書き込むことがありました。これには、ディスクにフェッチされるキャッシュされたブロック(spark.maxRemoteBlockSizeFetchToMem
によって制御されます)が含まれます。 SparkRでは、並列化を使用します。 Pysparkでは、ブロードキャストと並列化を使用します。そしてpython udfsの使用。
緩和策
クレジット
重大度: 重要
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
PySparkを使用する場合、別のローカルユーザーがSparkアプリケーションに接続し、Sparkアプリケーションを実行しているユーザーになりすます可能性があります。これは、バージョン1.x、2.0.x、2.1.x、2.2.0から2.2.2、および2.3.0から2.3.1に影響します。
緩和策
クレジット
重大度: 低
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
Sparkのスタンドアロンリソースマネージャーは、「マスター」ホストで実行するコードを受け入れ、そのコードを「ワーカー」ホストで実行します。マスター自体は、設計上、ユーザーコードを実行しません。ただし、マスターへの特別に細工されたリクエストにより、マスターもコードを実行する可能性があります。これは、認証が有効になっているスタンドアロンクラスターには影響しません。マスターホストは通常、ワーカーよりも他のリソースへのアウトバウンドアクセスが少ないですが、マスターでのコードの実行は予期せぬものです。
緩和策
ネットワークレベルの制限などによって、不要なアクセスから保護されていないSparkスタンドアロンクラスターで認証を有効にします。 https://spark.dokyumento.jp/docs/latest/security.htmlで説明されているspark.authenticate
および関連するセキュリティプロパティを使用してください
クレジット
重大度: 低
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
SparkのApache Mavenベースのビルドには、コンパイルを高速化するためにzincサーバーをダウンロードして実行する便利なスクリプト「build/mvn」が含まれています。このサーバーは、デフォルトで外部ホストからの接続を受け入れます。 zincサーバーへの特別に細工されたリクエストにより、ビルドを実行している開発者アカウントが読み取ることができるファイルの情報が明らかになる可能性があります。この問題は、Sparkのエンドユーザーではなく、ソースコードからSparkをビルドする開発者にのみ影響することに注意してください。
緩和策
クレジット
重大度: 中
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
バージョン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)へのアクセスを信頼できるホストに制限することもできます。
クレジット
重大度: 中
影響を受けるバージョン
説明
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の現在のバージョン(および場合によっては他のブラウザ)はブロックできません。
緩和策
クレジット
重大度: 高
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
Apache Spark 2.1.2 以前、2.2.0 から 2.2.1、および 2.3.0 では、PySpark または SparkR を使用する場合、別のローカルユーザーが Spark アプリケーションに接続し、Spark アプリケーションを実行しているユーザーになりすます可能性があります。
緩和策
クレジット
JIRA: SPARK-20922
重大度: 中
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
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
重大度: 中
ベンダー: Apacheソフトウェア財団
影響を受けるバージョン
説明
攻撃者は、サーバーに対するユーザーの信頼を利用して、共有 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>
クレジット