
CLI経由の任意ファイル読み取り脆弱性を利用したJenkins POC。RCEにつながる可能性がある。
Jenkinsには、スクリプトやシェル環境からJenkinsにアクセスするためのコマンドラインインターフェース(CLI)が組み込まれています。
Jenkinsは、CLIコマンドを処理する際に、Jenkinsコントローラ上でコマンド引数とオプションを解析するためにargs4jライブラリを使用しています。このコマンドパーサーには、引数内の@文字に続くファイルパスをファイルの内容に置き換える機能(expandAtFiles)があります。この機能はデフォルトで有効になっており、Jenkins 2.441以前およびLTS 2.426.2以前では無効化されません。
これにより、攻撃者はJenkinsコントローラプロセスのデフォルトの文字エンコーディングを使用して、Jenkinsコントローラのファイルシステム上の任意のファイルを読み取ることができます。
Overall/Read権限を持つ攻撃者は、ファイル全体を読み取ることができます。
Overall/Read権限を持たない攻撃者は、ファイルの最初の数行を読み取ることができます。読み取れる行数は、利用可能なCLIコマンドによって異なります。このアドバイザリの公開時点で、Jenkinsセキュリティチームは、プラグインをインストールしていない最近のJenkinsリリースでファイルの最初の3行を読み取る方法を発見しており、この行数を増やすプラグインは確認されていません。
修正内容: Jenkins 2.442、LTS 2.426.3は、CLIコマンドについて、引数内の@文字に続くファイルパスをファイルの内容に置き換えるコマンドパーサー機能を無効化します。
この修正で問題が発生する場合は、Javaシステムプロパティhudson.cli.CLICommand.allowAtSyntaxをtrueに設定することで、この変更を無効化できます。ただし、Jenkins管理者ではないユーザーがアクセスできるネットワーク上でこれを行うことは強く推奨されません。
回避策: CLIへのアクセスを無効化すると、悪用を完全に防ぐことができると期待されています。直ちにJenkins 2.442、LTS 2.426.3に更新できない管理者には、これを行うことを強くお勧めします。この回避策の適用にはJenkinsの再起動は必要ありません。
詳細情報: https://www.jenkins.io/security/advisory/2024-01-24/#SECURITY-3314
実行コマンド: python CVE-2024-23897 Jenkins.py -l list.txt -f /etc/passwd
VULNの出力レスポンスには、daemonやbin以外のものも含まれる可能性があります。さらに追加したい場合は、28行目に追加してください。