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

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

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

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

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

Категории

Все категории
Loading categories
pyrocms-ssti-fix — Встраиваемое исправление для CVE-2023-29689 - SSTI в PyroCMS, посредством реализации пользовательского Twig Sandbox | Kitploit
Инструменты/GitHubGitHub/ysaxon/pyrocms-ssti-fix
Оборонительные ИнструментыАнализ уязвимостейАнализ КодаЭксплуатация веб-приложенийВеб-безопасностьНеправильная Конфигурация
GitHubysaxon/pyrocms-ssti-fix

pyrocms-ssti-fix

Встраиваемое исправление для CVE-2023-29689 - SSTI в PyroCMS, посредством реализации пользовательского Twig Sandbox

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

Популярное

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

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

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

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

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

Packagist Version

🛡️ PyroCMS SSTI Fix

Готовое исправление безопасности для CVE-2023-29689 - Инъекция шаблонов на стороне сервера, приводящая к удаленному выполнению кода в PyroCMS 3.9.

Проблема

PyroCMS позволяет пользователям-администраторам редактировать шаблоны, хранящиеся в базе данных. Без изоляции злоумышленники с правами администратора могут внедрить вредоносный код Twig:

{{['id']|map('system')|join}}

Это выполняет произвольные системные команды. Основные разработчики считают это «работой по замыслу», поскольку пользователи-администраторы являются доверенными, но в многотенантных или корпоративных средах «администратор» ≠ «доверенное лицо с доступом к оболочке».

Решение

Этот пакет автоматически изолирует шаблоны, редактируемые пользователями, оставляя при этом легитимные шаблоны тем/дополнений без ограничений. Он использует SourcePolicyInterface Twig (переданный вышестоящему проекту автором этого пакета) для выборочного применения ограничений.

Установка

composer require ysaxon/pyrocms-ssti-fix

К сожалению, из-за того, что PyroCMS отключил автопоиск, вам придется добавить serviceProvider самостоятельно.

Вы можете сделать это с помощью

sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \        YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php

Требования

  • PHP 7.4+ или 8.0+
  • Twig 2.16+ или 3.9+ (для поддержки SourcePolicyInterface)
  • Laravel 6.0+ / PyroCMS 3.x

Как это работает

┌─────────────────────────────────────────────────────────────┐
│                     Twig Render Request                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    StorageSourcePolicy                       │
│                                                              │
│  Is template from storage path (database/user-editable)?     │
│                                                              │
│     YES ──────────────────►  Enable Sandbox                  │
│      │                       - Block: map, filter, reduce    │
│      │                       - Block: dangerous tags         │
│      │                       - Whitelist safe operations     │
│                                                              │
│     NO ───────────────────►  No Sandbox                      │
│                              (Theme/addon templates work     │
│                               normally)                      │
└─────────────────────────────────────────────────────────────┘

Конфигурация (Необязательно)

Настройки по умолчанию безопасны и подходят для большинства установок. Для настройки:

php artisan vendor:publish --tag=pyrocms-ssti-fix-config

Это создает config/pyrocms-ssti-fix.php:

return [
    // Master switch
    'enabled' => env('PYROCMS_SSTI_FIX_ENABLED', true),

    // Override auto-detected storage path
    'storage_path' => env('PYROCMS_SSTI_FIX_STORAGE_PATH', null),

    // Customize allowed tags/filters/functions/methods/properties
    'policy' => [
        'tags' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        'filters' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        // ... see config file for full options
    ],
];

Что заблокировано

Политика безопасности по умолчанию блокирует следующие опасные функции в изолированных шаблонах:

Фильтры (векторы RCE)

  • map - {{['cmd']|map('system')}} выполняет команды оболочки
  • filter - Может вызывать произвольные функции PHP
  • reduce - Может вызывать произвольные функции PHP

Теги (атаки включения)

  • include, extends, block, macro, import, embed, use

Функции

  • source - Читает содержимое произвольных файлов
  • include - Включает другие шаблоны
  • template_from_string - Создает шаблоны из строк

Что разрешено

Безопасные операции остаются доступными в изолированных шаблонах:

{# Variables #}
{{ entry.title }}
{{ user.name|upper }}

{# Loops and conditionals #}
{% for item in items %}
    {% if item.active %}
        {{ item.name }}
    {% endif %}
{% endfor %}

{# Safe filters #}
{{ text|escape }}
{{ date|date('Y-m-d') }}
{{ items|length }}
{{ name|lower|trim }}

{# Safe functions #}
{{ max(a, b) }}
{{ random(['red', 'blue', 'green']) }}

Расширение белого списка

Если ваши административные шаблоны законно нуждаются в дополнительных функциях:

// config/pyrocms-ssti-fix.php
'policy' => [
    'filters' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'my_custom_filter',  // Add specific filter
    ],
    'methods' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'App\Models\Post' => ['getTitle', 'getSummary'],
    ],
],

Тестирование исправления

После установки проверьте, что эксплойт заблокирован:

  1. Перейдите в PyroCMS admin → Пользователи → Роли
  2. Отредактируйте поле описания роли
  3. Введите: {{['id']|map('system')|join}}
  4. Сохраните и просмотрите

До исправления: Показывает вывод команды id (или вызывает сбой) После исправления: Показывает ошибку или [rendering failed: Filter "map" is not allowed.]

Устранение неполадок

«Twig не найден в контейнере»

Пакет не смог найти Twig. Обычно это означает:

  • PyroCMS/streams-platform еще не полностью загружен
  • Вы запущены не в среде PyroCMS

Включите режим отладки для просмотра подробностей:

PYROCMS_SSTI_FIX_DEBUG=true

Легитимные шаблоны ломаются

Если шаблоны, редактируемые администратором, используют функции, которые теперь заблокированы:

  1. Проверьте журналы, какая функция была заблокирована
  2. Добавьте ее в белый список в конфигурации (если безопасно)
  3. Или переработайте шаблон для использования разрешенных функций

Вопросы производительности

Пакет кэширует все проверки путей и поиски методов/свойств. В режиме auto только шаблоны из пути хранения подвергаются накладным расходам изоляции.

Замечания по безопасности

  • Этот пакет не исправляет основную архитектурную проблему (рендеринг пользовательского ввода Twig)
  • Он снижает возможность эксплуатации, ограничивая возможности изолированных шаблонов
  • Пользователи-администраторы все еще могут создавать раздражающие шаблоны; они просто не могут добиться RCE
  • Рассмотрите дополнительное усиление защиты (правила WAF, CSP и т.д.) для многоуровневой обороны

Авторы

  • Yaakov Saxon - Автор пакета, разработчик SourcePolicyInterface для Twig
  • Twig PR #3893 - Вклад в основной проект, обеспечивающий выборочную изоляцию

Лицензия

Лицензия MIT - см. файл LICENSE.

Связанные ресурсы

  • CVE-2023-29689 - запись NVD
  • GHSA-w7vm-4v3j-vgpw - Консультация GitHub
  • Документация Twig Sandbox
Скачать инструмент