見るだけの権限なら、配っても困らない。社内のJenkinsで、そう考えて閲覧の権限を広く渡していないでしょうか。Jenkinsのプロジェクトが2026年10月28日に公開した本体の脆弱性15件のうち、5件は全体の読み取り(Overall/Read)の権限だけで攻撃できます。
修正版は、毎週出る版の2.588と、長期サポート版(LTS)の2.580.2です。毎週版は2.587以前、LTSは2.580.1以前のすべての版が対象です。15件のうち13件の深刻度はHighで、悪用の報告は勧告に書かれていません。
Jenkinsの10月28日の勧告。1件目は読み取りの権限とログインで届くRCE出典: Jenkins project(引用)
15件を、攻撃に要る権限で並べ直す
勧告は脆弱性ごとに、攻撃者に要る権限を書いています。社内の権限の配り方と照らし合わせやすいように、権限の軽い順に並べました。
| 攻撃に要る権限 |
脆弱性 |
起こりうること |
| 認証なし(初期設定の途中だけ) |
SECURITY-4122 |
初期設定のウィザードで管理者を作り直す間に、攻撃者が管理者のアカウントを作る(攻撃の難しさは高い) |
| Overall/Read |
SECURITY-4188 |
コントローラー上の任意のconfig.xmlをエージェントの設定として読み込ませ、保存の際の上書きから、コード実行につながるおそれ |
| Overall/Read |
SECURITY-4226 |
「古いデータの管理」に偽の警告を出し、管理者が対応すると利用者のデータを書き換えられる。Jenkins自身の利用者データベースなら、パスワードも含む |
| Overall/Read |
SECURITY-4229 |
パンくずリストのツールチップで蓄積型のXSS |
| Overall/Read |
SECURITY-4206 |
HTTPプロキシのサーバー、ポート、ユーザー名、除外の一覧が見える(Medium) |
| Overall/Read |
SECURITY-4237 |
JENKINS_HOMEのファイル名、大きさ、更新日時が見える(Medium) |
| Overall/Readとログイン(またはconfig.xmlを送れる権限) |
SECURITY-4125 |
XStreamの逆シリアル化の制限をすり抜け、リモートでコード実行のおそれ |
| Item/Configure |
SECURITY-4225、SECURITY-4248 |
細工したジョブの設定で蓄積型のXSS。成果物を並行して保存し、コントローラーの任意の場所にファイルを書く(コード実行につながるおそれ) |
| Item/CreateとItem/Configure |
SECURITY-4187 |
名前を変えるときのシンボリックリンクをたどり、コントローラーの任意のファイルを読む |
| Agent/Configure |
SECURITY-4123 |
古い形式のエージェントの起動コマンドが、管理者の承認なしにコントローラーで動く |
| エージェントの乗っ取り |
SECURITY-4232、SECURITY-4249 |
ワークスペースの画面やエラーの表示で、エージェントからXSS |
| APIトークンの入手 |
SECURITY-4189 |
トークンを失効させても、「ログインしたままにする」のCookieで入り続けられる |
残るSECURITY-4243は、設定のXMLの入れ子の制限をすり抜けるものです。勧告の時点で分かっている影響は、名前と表示名だけの利用者の記録を作れる範囲で、ログインできるアカウントは作れないとしています。
表の上半分が重いのは、Overall/Readが「Jenkinsの画面を開ける」ための最低限の権限だからです。ジョブを見るだけの開発者、ビルドの結果を確認する品質保証の担当、協力会社のアカウントにも、ふつうは付いています。
匿名で読める設定なら、入口は外に開く
認可の設定で匿名の読み取りを許可(Allow anonymous read access)していると、ログインしていない人にもOverall/Readが付きます。ビルドの状況を社内の誰でも見られるように、この設定にしているJenkinsは珍しくありません。
その状態でインターネットから届くと、上の表の5件は、ログインなしで試せることになります。中でもSECURITY-4188は、設定ファイルを読み込ませて上書きさせると、コード実行につながるおそれがあると勧告は書いています。社内だけで使っているつもりでも、VPNの先や、委託先と共有している環境から届かないかは、一度確認しておきたいところです。
SECURITY-4226は、少し変わった型です。攻撃者は警告を出すだけで、実際に書き換えるのは、警告に対応した管理者の操作です。更新が済むまでは、「古いデータの管理」に見慣れない警告が出ても、そのまま保存しないでください。
APIトークンを消しても、入り続けられた
SECURITY-4189は、運用の手順そのものに関わります。トークンが漏れたら失効させる、という対応をしていても、これまでの版では、そのトークンで「ログインしたままにする」のCookieを手に入れられました。Cookieの有効性は、取得に使った資格情報とは関係なく続きます。
2.588と2.580.2からは、HTTPのBasic認証(APIトークンを含む)では、このCookieを受け取れなくなりました。過去にトークンの漏えいで失効の対応をしたアカウントがあれば、その後のアクセスログも見ておくと安心です。
エージェントからの攻撃も、コントローラーに届いた
Jenkinsは、エージェントをコントローラーより信用しない作りです。エージェントから届くデータに制限をかけ、乗っ取られてもコントローラーまで被害が及ばないようにしています。SECURITY-4232と4249は、その境界から漏れていた例でした。
ビルドを動かすエージェントは、開発者が自由にスクリプトを書けるうえ、外部のライブラリも取り込みます。乗っ取られる前提で考えると、コントローラーの更新を後回しにする理由はありません。
更新の前後に確認すること
2.580.2自体には、LTSの更新の手引きに書くほどの変更はありません。ただ、修正のいくつかは動きを変えています。
- SECURITY-4123の修正で、古い形式の設定に書かれたエージェントの起動コマンドを、自動で変換しなくなりました。コントローラー上でコマンドを動かしてエージェントを起動している場合は、更新後に起動するかを確認します。
- SECURITY-4125と4225の修正で、逆シリアル化のときの型の確認が厳しくなりました。古いプラグインの設定で読み込みのエラーが出たときに、一時的に確認を外すシステムプロパティが勧告に載っています。保護を外す設定なので、原因のプラグインを更新するまでのつなぎにとどめます。
- XSSの3件(SECURITY-4225、4229、4232)は、Content Security Policyの保護で既知の影響を抑えられると勧告は書いています。使えるのは2.539以降、LTSなら2.541.1以降です。
LTSの2.568系から上げる会社は、もう1つ注意があります。2.580.1から、Command Agent Launcher、SSH server、Instance Identityなど9個のプラグインが、jenkins.warに同梱されなくなりました。アップデートセンターに届くJenkinsは自動で入れ直すため、影響はありません。インターネットにつながらない閉じたネットワークのJenkinsだけは、新しい版を起動する前に、プラグインのファイルを手で置いておく必要があります。
LTSの変更履歴。2.580.2は10月28日公開で、動作確認はJava 21と25出典: Jenkins project(引用)
対象になる会社
- 社内でJenkinsのコントローラーを動かしている会社は、版にかかわらず対象です。毎週版は2.587以前、LTSは2.580.1以前のすべてが該当します。
- 急ぐのは、インターネットや委託先から届くJenkins、匿名の読み取りを許すJenkins、協力会社や他部署に閲覧のアカウントを配っているJenkinsです。
- エージェントをクラウドの使い捨ての仮想マシンや、他部署の管理するサーバーで動かしている場合も、早めの更新が向いています。
- GitHub ActionsやGitLab CI/CDなど、別のCIだけを使っている会社は対象外です。Jenkinsをもとにした商用の製品は、各社の告知で確認してください。
今週の作業の段取り
- 社内のJenkinsを洗い出し、画面の右下に出る版を確認します。毎週版かLTSかもあわせて控えます。
- 「Jenkinsの管理」のセキュリティの設定で、匿名ユーザーに読み取りを許していないか、Overall/Readを誰に付けているかを見てください。外から届く環境なら、更新までの間だけでも社外からのアクセスを止めます。
- JENKINS_HOMEをバックアップしてから、LTSなら2.580.2、毎週版なら2.588に上げます。閉じたネットワークで2.568系から上げる場合は、同梱から外れたプラグインのファイルを先に置いておきます。
- 更新後に、エージェントの起動と、ジョブの設定の保存でエラーが出ないかを試します。出たときは、勧告のシステムプロパティで一時的に外し、原因のプラグインを特定する流れです。
- 落ち着いたら、Content Security Policyの保護を有効にし、Overall/Readを配る範囲を、本当に画面を見る必要のある人に絞ります。