CVE-2026-53435
CVE-2026-53435
概要
Jenkinsのデシリアライゼーション脆弱性(CVE-2026-53435)が現在進行形で悪用される
脆弱性情報(NVD)
- 深刻度: 重要(CVSS 8.8)
- CVSSベクター:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - CWE: CWE-502
- EPSS: 0.37%(上位 71.7%)
影響を受けるバージョン:
- Jenkins Jenkins: < 2.555.3
- Jenkins Jenkins: < 2.568
原文: In Jenkins 2.567 and earlier, LTS 2.555.2 and earlier, it is possible for attackers to have Jenkins deserialize arbitrary types defined in Jenkins core or plugins from an attacker-controlled config.xml submission in a way that allows them to handle HTTP requests afterwards.
This can be used to impersonate any user and send HTTP requests on their behalf, up to and including use of the Script Console to run arbitrary code, or to read arbitrary files from the Jenkins controller.
技術詳細
脆弱性の概要
Jenkins はジョブ設定の永続化に XStream を用いて config.xml をデシリアライズする。本脆弱性では、信頼できない XML の受信時に型制限が不十分であるため、攻撃者が Jenkins コアやプラグインに存在する任意のクラスを意図的にデシリアライズできる。デシリアライズの結果、後続の HTTP リクエストを乗っ取る仕組み(フィルターやステープラープロキシ)が登録され、任意のユーザになりすました上で Script Console を使った任意コード実行や任意ファイルの読み取りが可能となる。
根本原因
Jenkins 2.568 未満および LTS 2.555.3 未満では、XStream のデシリアライズ時に許可する型を制限するホワイトリスト/ブラックリスト(ClassFilter)が適切に適用されていない。config.xml を読み込む AbstractItem#updateByXml や ItemGroupMixIn#createProjectFromXML が、攻撃者の指定したクラスをそのままインスタンス化し、そのクラスが持つ動作(フィルター登録など)が実行される可能性がある。この結果、Jenkins の HTTP スタック(Jetty/Stapler)に悪意のあるリクエストハンドラが追加される。
攻撃シナリオ
- ジョブ設定変更権限(Job/Configure)を持つ攻撃者が、細工した config.xml を
POST /job/<ジョブ名>/config.xmlに送信する。XML 内には、デシリアライズ時にjavax.servlet.Filterを Jenkins のサーブレットチェーンに追加するガジェットや、任意の Groovy コードを実行するステープラープロキシを仕込む。 - Jenkins が config.xml をデシリアライズし、登録されたハンドラが有効化される。この段階では通常の XML 保存と同様に成功レスポンスが返るため、攻撃検知が難しい。
- 攻撃者は後続の HTTP リクエストを Jenkins に送信する。リクエストは先に登録された悪意のあるハンドラによって捕捉され、攻撃者は任意のユーザ(認証情報を持つセッション)になりすまして Script Console へのアクセスや任意の Groovy コード実行、Jenkins コントローラ上のファイル読み取りを行う。
検出方法
ブラックボックステスト
- 認証情報とジョブ設定変更権限を用意し、細工した config.xml を POST する。ペイロードは、デシリアライズ後に特定のパス(例:
/open_console)で Script Console を模したアクションを起こすガジェットを使用する。curl -X POST -u "attacker:password" \ -H "Content-Type: application/xml" \ "http://jenkins.example.com/job/test/config.xml" \ --data-binary @evil_config.xml - 数秒空けて、ペイロードが設置したパスにアクセスし任意のコマンド(例:
id)を実行する。curl "http://jenkins.example.com/open_console?groovy=println+%22hacked%22.execute().text" - レスポンスに
hackedやuid=jenkins等が含まれることを確認する。Jenkins サーバ上のファイル生成を伴うテスト(touch /tmp/pwned)で検証してもよい。
テスト実施時は、使用するガジェットが Jenkins 環境に存在するクラスパス上のチェーン(例: GroovyShell、SignedObject、Capability)を用いて作成されている必要がある。ペイロード生成には ysoserial の Jenkins 向け改良版を利用し、jenkins.util.xstream.XStreamDOM 形式でラップして送信する。
ホワイトボックステスト
- 対象バージョンの Jenkins コアソースにおいて、
hudson.model.AbstractItem#updateByXmlおよびhudson.model.ItemGroupMixIn#createProjectFromXMLが呼び出すjenkins.util.xstream.XStream2#fromXMLに、型制限(addPermission、denyTypes)が存在しないことを確認する。grep -rn "fromXML" jenkins-2.555.2/core/src/main/java/ jenkins.model.JenkinsクラスのXSTREAM初期化部分(例:Jenkins.java)において、XStream2.setupDefaultSecurity()の呼び出しがなく、ClassFilterが未設定であることを検証する。grep -rn "setupDefaultSecurity\|addPermission\|denyTypes\|classFilter" jenkins-2.555.2/core/src/main/java/jenkins/model/Jenkins.java- クラスパス上の
javax.servlet.Filter実装やorg.kohsuke.stapler.StaplerProxy実装をスキャンし、攻撃に悪用可能なガジェットが存在するか確認する。grep -rn "implements.*Filter" --include="*.java" $JENKINS_HOME/plugins/*/WEB-INF/classes/ grep -rn "implements.*StaplerProxy" --include="*.java" $JENKINS_HOME/plugins/*/WEB-INF/classes/
対策
恒久的対策
以下のバージョンにアップグレードすることで、デシリアライズ時の型制限が強化され、脆弱性が修正される。
- Jenkins weekly: 2.568 以降
- Jenkins LTS: 2.555.3 以降
Linux 環境でのアップグレード例:
# Debian/Ubuntu
sudo apt-get update && sudo apt-get install --only-upgrade jenkins
# Red Hat/CentOS
sudo yum update jenkins
または、公式サイトから新バージョンの WAR ファイルを取得し、既存の jenkins.war と置き換える。アップグレード後は Jenkins サービスを再起動する。
暫定対策
パッチ適用が直ちに行えない場合は、以下の軽減策を実施する。
- ジョブ設定権限の最小化: 信頼できるユーザのみに Job/Configure 権限を付与し、不要なアカウントからは剥奪する。マトリックス認可やロールベースの制御で管理を徹底する。
- config.xml エンドポイントのブロック: リバースプロキシ(Nginx など)で
/job/*/config.xmlに対する POST/PUT メソッドを拒否する。
この対策はジョブの XML 設定更新機能自体を無効化するため、運用に応じて適用の可否を判断する。location ~ ^/job/.+/config.xml$ { deny all; } - WAF シグネチャの導入: 受信 XML ボディに
<org.codehaus.groovy.runtime.MethodClosure>や<hudson.util.CopyOnWriteMap>等の不審なクラス名が含まれている場合にブロックするルールを設定する。 - OS レベルの権限制限: Jenkins プロセスを低権限ユーザで実行し、任意コード実行時やファイル読み取り時の被害をコンテナや最小権限の範囲に抑止する。
VulnCheck KEV
- 製品: Jenkins jenkins
- CISA KEV 掲載: なし
- ランサムウェア悪用: Unknown
PoC / Exploit
- initial-access: GitHub(AmesianX/CVE-2026-53435) / VulnCheck XDB
悪用事例
参考リンク
- www.jenkins.io
Vendor Advisory