Jenkins の脆弱性 CVE-2024-23897 が FIX:翌日に PoC エクスプロイトが登場

Breaking Down CVE-2024-23897: PoC Code Surfaces Just After Jenkins Advisory

2024/01/26 SecurityOnline — Jenkins の深刻な脆弱性である CVE-2024-23897 について、ベンダーがアドバイザリを公表した翌日に、技術的詳細と PoC エクスプロイト・コードが公開された。CI/CD (continuous integration and delivery) に欠かせない、オープンソースの自動化サーバーである Jenkins に、任意のファイル読み取りの脆弱性が存在することが判明したのだ。

この脆弱性 CVE-2024-23897 は、Jenkins のビルトイン CLI (Command Line Interface) に関連するものであり、引数のファイル・パスに続く”@” という文字を、ファイルの内容に置き換える機能の悪用を可能にするという。この機能は、一見すると無害だが、Jenkins コントローラ・ファイル・システム上の任意のファイルを読み取るコマンドを、攻撃者が作成できることが明らかになった。


この脆弱性は、Jenkins がコマンドの引数やオプションを解析するために使用している args4j ライブラリに起因する。このライブラリの expandAtFiles 機能は、デフォルトで有効になっていることが、根本的な原因となった。Overall/Read パーミッションを持つ攻撃者は、これを悪用してファイル全体を読み取ることができ、さらに、パーミッションを持たない攻撃者も、発行された CLI コマンドによっては、最初の3行を閲覧することが出来ることがわかった。さらに、この欠陥はバイナリ・ファイルにも及び、暗号キーや機密情報を暴露する可能性があることも明らかになった。

Sonar のセキュリティ研究者である Yaniv Nizry は、この脆弱性を悪用する攻撃者が、Jenkins インスタンス上の任意のファイルから得られる引数を、任意の数に拡張できることを実証することで、この欠陥を明らかにした。

Yaniv Nizry は、「この関数は、引数が “@” から始まっているかどうかをチェックして、”@” で始まっている場合は、”@” 以降のパスのファイルを読み込み、行ごとに新しい引数を展開する。つまり、攻撃者が引数をコントロールできれば、Jenkins インスタンス上の任意のファイルから、任意の数の引数を展開できるということだ」と詳述している。

この脆弱性の悪用に成功した攻撃者は、connect-to-node コマンドのように、任意の数の引数を受け取り、それらをユーザーに表示して返すコマンドを見つけることで、パーミッション・チェックの前に例外がスローされる。それにより、明示的な “CONNECT” パーミッションの必要性を回避して、機密ファイルの内容を漏らすことができる。

さらに、多くのセキュリティ研究者たちが、この脆弱性を再現している。

脆弱性 CVE-2024-23897 が公開された後に、この脆弱性の悪用を脅威アクターたちが実演しているのが観察され、さまざまな PoC エクスプロイトが公開された。そして、数多くの脅威アクターが、この脆弱性のエクスプロイトを攻撃チェーンに組み込んでいる。

Jenkins セキュリティ・チームは、この脆弱性を修正するために、Jenkins 2.442/LTS 2.426.3 でコマンド・パーサ機能 (expandAtFiles) を無効化するパッチをリリースした。このパッチは、CVE-2024-23897 がもたらすリスク軽減のための重要なステップであり、ソフトウェア・セキュリティにおける継続的な警戒とタイムリーなアップデートの必要性を強調している。