SSTI: Вразливість, яка загрожує вашому додатку
🕒 Час читання: 2 хв

SSTI: Вразливість, яка загрожує вашому додатку

Server-Side Template Injection (SSTI) — це вразливість у веб-додатках, що дозволяє зловмисникам виконувати шкідливий код шляхом маніпуляції серверними шаблонами. У цій статті ми розглянемо, що таке SSTI, як її виявити, приклади атак і способи захисту.


Що таке вразливість SSTI?

SSTI виникає, коли сервер обробляє дані, введені користувачем, без належної перевірки. Ці дані вставляються у шаблон, який сервер інтерпретує і виконує. Якщо зловмисник отримує доступ до цієї функції, він може виконати довільний код на сервері.


Популярні шаблонізатори та їх ризики

SSTI може з’являтися в будь-якому серверному шаблонізаторі. Ось найбільш поширені серед них:

  • Jinja2 (Python)
  • Thymeleaf (Java)
  • Smarty (PHP)
  • Twig (PHP)
  • EJS (Node.js)

Кожен із цих шаблонізаторів має свої особливості, але всі вони вразливі до SSTI, якщо дані користувача не фільтруються.


Як виявити SSTI?

Ознаки вразливості SSTI:
  1. Дані, введені користувачем, відображаються у відповідях сервера.
  2. Використання сторонніх бібліотек для шаблонізації.
  3. Відсутність валідації даних.
Тестування SSTI:

Для перевірки можна використовувати спеціальні конструкції:

  • Для Jinja2: {{7*7}} (очікуваний результат: 49).
  • Для Twig: {{system('id')}}.

Якщо сервер повертає виконаний результат, це свідчить про наявність SSTI.


Приклад атаки з використанням SSTI вразливості

Сценарій:
  1. У формі реєстрації користувач вводить ім’я: {{ config.items() }}
  2. Сервер обробляє це ім’я через Jinja2:
    template = Template("Привіт, {{ name }}!")
    response = template.render(name=user_input)
  3. Зловмисник отримує доступ до конфігурацій серверу або виконує небезпечні команди.
Наслідки:
  • Викрадення конфіденційної інформації (наприклад, змінних середовища).
  • Встановлення шкідливого ПЗ на сервер.
  • Повний контроль над сервером.

Як захиститися від SSTI вразливості?

1. Використовуйте перевірені фреймворки

Більшість сучасних фреймворків мають вбудовані функції для безпечної роботи з шаблонами.

2. Уникайте динамічного створення шаблонів

Не передавайте користувацькі дані у шаблон без попередньої перевірки.

3. Використовуйте функції для екранування

Використовуйте вбудовані методи для екранування введених даних. Наприклад:

  • У Jinja2: {{ name | e }}
4. Впровадьте Content Security Policy (CSP)

CSP обмежує виконання довільного коду, що може запобігти ескалації атаки.

5. Регулярне тестування безпеки

Використовуйте автоматизовані сканери, такі як:

  • Burp Suite
  • OWASP ZAP

Висновок

SSTI — це серйозна вразливість, яка може призвести до катастрофічних наслідків. Розуміння того, як вона працює, та дотримання найкращих практик безпеки допоможе захистити ваші додатки.

Не ігноруйте важливість регулярного тестування, оскільки зловмисники завжди шукають нові способи експлуатації.