セキュリティブログ

Apache Spark OSコマンドインジェクションの脆弱性(CVE-2022-33891)について

Apache Spark OSコマンドインジェクションの脆弱性(CVE-2022-33891)について

更新日:2023.11.21

2022年07月20日 06:25 PM (JST)

こんにちは、くまさかです。

07/18 頃に公開されました Apache Spark のWebUIにてOSコマンドインジェクション脆弱性であるCVE-2022-33891 について紹介します。

なお、本脆弱性は特別な準備は特に必要なく、未認証であっても、細工したHTTPパラメータを付与することで、任意のコード実行が容易です。
そのため、インターネット上にApache SparkのWebUIを解放し管理している方は注意が必要です。

影響対象

Apache Sparkの以下のバージョンが影響を受けます。

  • Apache Spark 3.0.3まで
  • Apache Spark 3.1.1 から3.1.2
  • Apache Spark 3.2.0 から3.2.1

また、本脆弱性は、デフォルトの設定では影響を受けず、UIの認証を有効化している場合に影響を受けます。

  • Apache SparkのUI(WebUI) を利用している
  • Apache Sparkの設定(spark-defaults.conf)にて、spark.acls.enableが有効(true)である

考えられる影響

OSコマンドインジェクションが可能なため、任意のコード実行による情報の窃取や改ざん、サービス停止等、様々な影響が考えられます。
また、認証プロセスの応答を偽装することで、他ユーザへのなりすましも考えられます。

対策

影響を受けるバージョンの修正版がリリース済みの為、更新が有効な対策です。

  • Apache Spark 3.1.3
  • Apache Spark 3.2.2

また、3.3系は本脆弱性の対象外の為、そちらへの更新も有効です。

  • Apache Spark 3.3.0

脆弱性レポート

本脆弱性の修正は、比較的理解が容易です。

以下は、本脆弱性修正の一部です。

CVE-2022-33891 ソースコード修正箇所 41行目
CVE-2022-33891 ソースコード修正箇所 41行目

https://github.com/apache/spark/pull/36315/files#diff-96652ee6dcef30babdeff0aed66ced6839364ea4b22b7b5fdbedc82eb655eeb5L41

修正からわかる通り、修正前では、受け取ったパラメータであるusernameをbashで実行する形式で渡しています。
イメージとしては、以下のようなコマンドが実行されます。

bash -c id -Gn <username>

今回の脆弱性では、こちらのusernameがGETパラメータからそのまま渡されている事を悪用し、コマンド置換を利用した任意のコード実行が可能です。
GNU/コマンド置換

例えば、usernameへ、:>/have_CVE-2022-33891を入れる事で、以下のようなコマンドが実行されます。

bash -c id -Gn :>/have_CVE-2022-33891

:>/have_CVE-2022-33891は、コマンド置換され、サーバ上で:>/have_CVE-2022-33891として動作し、空のファイルが生成されます。

なお、認証試行としては失敗するため、応答としては、403になります。(しかし、ここで認可されているユーザ情報をうまく返却できるとユーザ偽装できる可能性があります。)

リクエストにてファイルの生成を試みている様子
リクエスト後に、コマンドが実行されサーバ上にファイルが生成されている様子
リクエスト後に、コマンドが実行されサーバ上にファイルが生成されている様子

また、ご存じの方も多いように、任意のコードが実行できるということは、リバースシェル確立もネットワーク環境によっては容易です。

リバースシェル試行の様子
リバースシェル確立後にコマンドを実行している様子
リバースシェル確立後にコマンドを実行している様子

以上のように、HTTP(s) の疎通があれば攻撃が成功してしまう可能性がある為、影響対象となりうる環境では、対策が必須となります。


さて、今回は、比較的攻撃が容易な、CVE-2022-33891 について簡単に紹介しました。
Apache Spark UIをインターネット上に開いた形で運用する場合、認証やTLSの設定を有効化されている方がほとんどかと思います。Apache Sparkのアクセス制御機能(spark.acls.enable)を有効にされている環境では、対応をご検討ください。
なお、更新が難しく、Apache Spark WebUIを非公開にできないケースでは、
コマンド置換で有効なパターンである、「``」や、「$()」が含まれるリクエストが到達した際に適切なアクションを講じる事ができるか確認する事が重要となりますが、例に挙げていない特殊なパターンによる攻撃の可能性もゼロではありません。
そのため、継続的にインターネット上に開いた形で運用する場合には、原則、修正版への更新を推奨致します。

参考


2022年07月20日 06:25 PM (JST): 公開

2023年11月21日 09:00 PM (JST): 記事更新日時のシステムアップデート

セキュリティ診断のことなら
お気軽にご相談ください
セキュリティ診断で発見された脆弱性と、具体的な内容・再現方法・リスク・対策方法を報告したレポートのサンプルをご覧いただけます。

関連記事

経験豊富なエンジニアが
セキュリティの不安を解消します

Webサービスやアプリにおけるセキュリティ上の問題点を解消し、
収益の最大化を実現する相談役としてぜひお気軽にご連絡ください。

疑問点やお見積もり依頼はこちらから

お見積もり・お問い合わせ

セキュリティ診断サービスについてのご紹介

資料ダウンロード