- Регистрация
- 13 Июн 2025
- Сообщения
- 26
- Реакции
- 1
- Баллы
- 3
Что такое SSTI?
Server-Side Template Injection (SSTI) — это уязвимость, позволяющая внедрять произвольный код в шаблоны веб-приложений, что может привести к RCE (Remote Code Execution).
Как работает уязвимость?
Когда приложение некорректно обрабатывает пользовательский ввод в шаблонах (Twig, Jinja2, Freemarker и др.), злоумышленник может внедрить вредоносный код.
Пример уязвимого кода (Python/Flask):
Эксплойт для Jinja2:
Ответ: "Hello, 49!" подтвердит уязвимость.
Чем опасна SSTI?
• Выполнение произвольного кода на сервере
• Чтение/запись файлов
• Получение доступа к системе
• Обход аутентификации
Как обнаружить?
1. Попробуйте простые тесты:
- {{7*7}} → 49
- ${7*7} → 49
- <%= 7*7 %> → 49
2. Определите движок шаблонов по синтаксису
3. Используйте payload-ы для конкретных шаблонов
Методы защиты
• Не использовать render_template_string с пользовательским вводом
• Санитизация входных данных
• Использование sandbox для шаблонов
• Ограничение доступа к опасным функциям
Реальные примеры (CVE)
• CVE-2019-3396 — SSTI в Confluence
• CVE-2019-12744 — Уязвимость в Ansible Tower
• Уязвимость в некоторых CMS (например, WordPress плагины)
Важно: Всегда тестируйте SSTI только с разрешения владельца системы!
Server-Side Template Injection (SSTI) — это уязвимость, позволяющая внедрять произвольный код в шаблоны веб-приложений, что может привести к RCE (Remote Code Execution).
Как работает уязвимость?
Когда приложение некорректно обрабатывает пользовательский ввод в шаблонах (Twig, Jinja2, Freemarker и др.), злоумышленник может внедрить вредоносный код.
Пример уязвимого кода (Python/Flask):
Код:
@app.route('/welcome')
def welcome():
name = request.args.get('name', 'Guest')
template = f"Hello, {name}!"
return render_template_string(template)
Эксплойт для Jinja2:
Код:
http://example.com/welcome?name={{7*7}}
Чем опасна SSTI?
• Выполнение произвольного кода на сервере
• Чтение/запись файлов
• Получение доступа к системе
• Обход аутентификации
Как обнаружить?
1. Попробуйте простые тесты:
- {{7*7}} → 49
- ${7*7} → 49
- <%= 7*7 %> → 49
2. Определите движок шаблонов по синтаксису
3. Используйте payload-ы для конкретных шаблонов
Методы защиты
• Не использовать render_template_string с пользовательским вводом
• Санитизация входных данных
• Использование sandbox для шаблонов
• Ограничение доступа к опасным функциям
Реальные примеры (CVE)
• CVE-2019-3396 — SSTI в Confluence
• CVE-2019-12744 — Уязвимость в Ansible Tower
• Уязвимость в некоторых CMS (например, WordPress плагины)
Важно: Всегда тестируйте SSTI только с разрешения владельца системы!