TAチームが "Jenkins Arbitrary File Leak Vulnerability (CVE-2024-23897) "を分析して書いた脆弱性レポート。
この脆弱性は、Jenkinsの組み込みコマンドラインインターフェイス(CLI)およびargs4jライブラリとの相互作用において確認されたもので、攻撃者は、コマンド引数におけるファイルパスの後の"@"文字の代わりにファイルの内容を置き換える機能を悪用することができる。残念なことに、この機能はJenkinsコントローラのファイルシステムにおける不正なファイルアクセスへの扉を開き、機密情報の完全性と機密性に重大なリスクをもたらす。
重要なのは、Jenkinsのバージョン2.441以前とLTS 2.426.2が影響を受けることで、幅広いインストールが悪用される可能性があることだ。この脆弱性は、攻撃者が最小限の権限でアクセスできる可能性や、特定の構成では認証なしでアクセスできる可能性を考えると、特に懸念される。一般に公開されたJenkinsインスタンスは容易に特定され、悪用される可能性があり、これは世界中の組織で一般的に行われていることであるため、事態の深刻さはさらに強調される。
これらの深刻な脆弱性に対応するため、組織はJenkinsのデプロイメントを迅速に評価し、潜在的な悪用から環境を保護するために必要な措置を講じるべきである。
1. 概要
Jenkinsは、継続的インテグレーションとデプロイメント(CI/CD)を組み合わせたパイプラインのための、人気のあるオープンソースの自動化サーバーである。ソフトウェアプロジェクトの開発、テスト、デプロイを自動化するプラットフォームをプログラマーに提供する。
ソース: https://www.linkedin.com/pulse/you-aware-recent-jenkins-vulnerability-cve-2024-23897-amit-dash-lgi6e
これらのサーバーで発見された多くの脆弱性のうち、最近発表されたCVE-2024-23897についての分析をまとめた。
2. 攻撃タイプ
Jenkinsには、スクリプトまたはシェル環境からのインタラクションを可能にする統合コマンドラインインタフェース(CLI)が付属しています。CLIは、CLIコマンド処理中にJenkinsコントローラからのコマンド引数とパラメータを解析するためにargs4jライブラリを活用する。
args4jの1つの機能は、ファイルパスの後に"@"文字を追加することでファイルの内容を置き換えますが、これは元々ユーザビリティを向上させるために設計されたものですが、深刻なセキュリティ脆弱性になっています。バージョン2.441とLTS 2.426.2では、この機能がデフォルトで有効になっており、チェックが行われていません。この欠陥を悪用することで、攻撃者はJenkinsコントローラプロセスのデフォルトの文字エンコーディングを使用して、ファイルシステム上の任意のファイルにアクセスすることができます。JenkinsのCLIツールでは、"@"を先頭に持つ引数は、引数にアクセスするために開く必要があるファイルと誤って解釈されます。状況によっては、CLIユーザーが誤ってエラー・メッセージでこれらのファイルからの行を受信します。
ソース: https://hackyboiz.github.io/2024/03/04/ogu123/cve-2024-23897/
これにより攻撃者は、Jenkinsコントローラプロセスのデフォルトの文字エンコーディングを使用して、Jenkinsコントローラのファイルシステムから任意のファイルを読み取ることができる。
この脆弱性を悪用する方法は2つあります。
2-1. Jenkins-cli.jarの使用
一般的なアプローチでは、ウェブソケットまたはSSH経由で動作するJenkins-cli.jarを活用する。具体的には、Jenkins CLIツールのshutdown、enable-job、help、connect-nodeなどのコマンドを操作して、Jenkinsサーバー上のファイルに不正にアクセスし、内容を読み取る。下図は、ファイルを読み取るためにJenkins CLIでhelpコマンドが実行されている様子です。
ソース: https://www.uptycs.com/blog/jenkins-exploit-cve-2024-23897
下の画像は、Jenkinsサーバーから読み込まれたファイルの内容の一例です。
2-2. POSTリクエストを送信する
もう一つの方法は、'http://jenkins/cli?remoting=false'から2つのPOSTリクエストを送ることである。この手法では、ダウンローダーとアップローダーを使用する必要がある。ダウンローダーはCLIコマンドの 応答を取得し、アップローダーはリクエスト本文で指定されたCLIコマンドを実行する。ダウンローダーとアップローダー間の接続は、セッションヘッダーの UUIDを利用して確立される。
3. 何をすべきか
Jenkinsの任意ファイルリーク脆弱性(CVE-2024-23897)に対応するには、一般的に2つの方法があります。
- Jenkins CLIへのアクセスを無効にする
- Jenkinsバージョン2.442およびLTS 2.426.3への最新アップデート。このパッチは、脆弱性の原因となるコマンド・パーサ機能を無効にします。
当社のAIWAF製品は、この脆弱性を悪用する攻撃構文を「Jenkinsにおける任意のファイルの読み取り」というパターンで検出しています。
4. 結論
CVE-2024-23897は、Jenkinsにおける重大な脆弱性を浮き彫りにし、ソフトウェア自動化環境の安全性を確保するための継続的な課題を浮き彫りにしています。この脆弱性により、攻撃者は CLI 引数の処理を悪用して Jenkins サーバから任意のファイルを読み取ることが可能となり、重大なセキュリティリスクを引き起こします。CLI引数を操作して任意のファイルの内容を含めることができるため、機密データが不正に暴露され、Jenkinsサーバとそれが管理する広範なインフラのセキュリティが損なわれる可能性があります。
この脆弱性の発見は、Jenkinsのような自動化ツールの開発と保守における、真摯なセキュリティプラクティスの重要性を再認識させるものである。CI/CDパイプラインにJenkinsを使用している組織は、潜在的な悪用から保護するために、デプロイメントの評価と修復を優先すべきである。
当社は、AIWAF製品において、Jenkinsサーバー関連の脆弱性に関する多くのパターンを開発しており、今後もJenkinsサーバー関連の脆弱性が発見された場合には、迅速に対応していく予定である。
5. 参考文献
- https://www.uptycs.com/blog/jenkins-exploit-cve-2024-23897
- https://ko.securecodewarrior.com/article/deep-dive-up-close-and-personal-with-the-moveit-zero-day-vulnerability
- https://hackyboiz.github.io/2024/03/04/ogu123/cve-2024-23897/
- https://www.enciphers.com/exploiting-cve/in-the-crosshairs-understanding-cve-2024-23897s-technical-implications?491f42f9_page=5&491f4314_page=2&6cf8b8b6_page=5