Впровадження шаблонів на стороні сервера - вразливість ssti - корисні навантаження ssti

Пояснення впровадження шаблонів на стороні сервера з реальними прикладами коду

Як працює впровадження шаблонів на стороні сервера за лаштунками

Впровадження шаблону на стороні сервера відбувається, коли введені користувачем дані вбудовуються безпосередньо в механізм шаблонів та оцінюються без належної санітарної обробки чи ізоляції. Це створює вразливість SSTI, яка дозволяє зловмиснику впроваджувати спеціально створені корисні навантаження SSTI (наприклад {{7*7}} (у Jinja2), які рушій оцінюватиме, забезпечуючи все: від розкриття даних до виконання довільного коду в контексті сервера. Оскільки різні рушії шаблонів надають доступ до різних об'єктів та API, корисні навантаження SSTI відрізняються залежно від платформи, але мають однакову небезпеку: вони дозволяють ненадійним вхідним даним виходити з очікуваного потоку рендерингу та виконуватися під час виконання програми, що часто призводить до повного віддаленого виконання коду або горизонтального переміщення, якщо це не контролювати.

Мінімально вразливий приклад у Jinja2

from flask import request, render_template_string @app.route("/hello") def hello():     name = request.args.get("name", "world")     # ❌ Vulnerable: directly rendering user input     return render_template_string("Hello " + name) 

Якщо користувач надсилає ?назва={{7*7}}, програма оцінить його та поверне Привіт 49Це типова вразливість для SSTI.

Приклад мінімальної вразливості в Twig

// ❌ Vulnerable Twig usage $template = $twig->createTemplate("Welcome " . $_GET['user']); echo $template->render([]); 

Зловмисник може впроваджувати корисні навантаження SSTI, такі як {{7*7}} щоб довести виконання коду. Небезпека: просте впровадження може призвести до читання файлів, виконання команд ОС або глибшого проникнення в інфраструктуру.

Реальні експлойти: корисні навантаження SSTI, що запускають віддалене виконання коду

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

корисні навантаження Jinja2

  • {{7*7}} → арифметичне виконання
  • {{config.items()}} → витоки конфігурацій сервера.
  • {{ ”.__class__.__mro__[2].__subclasses__() }} → шлях до RCE

Швидкісні корисні навантаження

  • #set($x=”7″)${x} → байпас інжекції
  • #set($a=$class.inspect(“java.lang.Runtime”)) → прямий доступ до середовища виконання

Корисне навантаження гілочки

  • {{7*7}} → арифметика
  • {{app.request.server.all}} → змінні середовища
  • {{_self.env.registerUndefinedFilterCallback(‘system’)}} → виконання коду

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

Де ховається ін'єкція шаблонів на стороні сервера CI/CD-Керовані програми

Впровадження шаблонів на стороні сервера – це не лише ризик веб-застосунку; воно проявляється в сучасний CI/CD pipelines теж. Типові місця для сховання включають:

  • Діаграми Helm у Kubernetes, де значення шаблонів відображаються динамічно
  • Шаблони електронної пошти що об'єднують вхідні дані, керовані користувачем
  • Dashboards де рядки запитів або дані конфігурації вводяться в шаблони
  • DevOps-скрипти що генерують HTML/Markdown за допомогою шаблонізаторів.

приклад:

# ❌ Insecure Helm values with user input configMap:   appMessage: "{{ .Values.message }}" 

If.Values.message походить з ненадійних вхідних даних, це впроваджує впровадження шаблону на стороні сервера у ваше розгортання pipeline себе.

Запобігання SSTI за допомогою безпечніших шаблонів та статичного аналізу

Зменшення вразливостей SSTI вимагає кращих шаблонів кодування та раннього виявлення.

Безпечні шаблони

  • ❌ Не використовуйте рядок_шаблону_відображення або еквівалент
  • ✅ Використовуйте попередньо визначені файли шаблонів та передайте очищені змінні
  • ✅ Шаблонні механізми пісочниці, якщо вони доступні
  • ✅ Перевіряти та екранувати введені користувачем дані перед рендерингом

Небезпечна та безпечна обробка файлів cookie (пов’язаний з цим ризик введення)

# ❌ Insecure: session cookie without flags response.set_cookie("session", token) # ✅ Secure: session cookie hardened response.set_cookie("session", token, httponly=True, secure=True, samesite="Strict") 

Міні-контрольний список для розробників

  • Ніколи не відображати необроблений введений користувачем текст безпосередньо
  • Використовуйте шаблони ізольованого програмного середовища, якщо це підтримується
  • Очистити та перевірити всі змінні шаблону
  • Уникайте оцінювачів власних шаблонів
  • Відскануйте код для рядок_шаблону_відображення або шаблони конкатенації рядків

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

Вбудовування перевірок SSTI в DevSecOps Pipelines

Виявлення впровадження шаблонів на стороні сервера на ранній стадії дешевше та безпечніше, ніж їх виправлення пізніше. Команди DevSecOps повинні вбудовувати перевірки в pipelines:

  • Commit hooksвідхилити commitз небезпечними функціями (рядок_шаблону_відображення)
  • Статичні аналізатори: сканування на наявність ризику впровадження шаблонів на стороні сервера в код шаблонів
  • Перевірка залежностей: позначити застарілі механізми шаблонів з відомими вразливостями SSTI
  • Pipeline Ворота: блок об'єднується, доки не пройдуть перевірки SSTI

Зробивши виявлення корисного навантаження SSTI частиною CI/CD, ви запобігаєте поширенню коду, що піддається експлуатації.

Не дозволяйте впровадженню шаблонів на стороні сервера прослизнути у ваш стек

Одне впровадження шаблону на стороні сервера може призвести до ескалації через математичні трюки ({{7*7}}) до повного віддаленого виконання коду. Вразливості SSTI з'являються не лише у веб-додатках, але й у CI/CD pipelines, діаграми Helm та шаблони електронних листів.

Ключові вивезення

  • Ніколи не відображати необроблений введений користувачем в шаблонах
  • Перевірити та очистити всі динамічні змінні
  • Різні двигуни (Jinja2, Velocity, Twig) мають різне корисне навантаження SSTI, але всі вони можуть бути озброєні.
  • Використовуйте статичний аналіз та відмовостійкі вентилі в pipelines
  • Регулярно перевіряйте шаблони у своєму стеку

Такі інструменти, як Ксігені допомагати командам виявляти небезпечне використання шаблонів, блокувати вразливості SSI та забезпечувати безпечні практики pipelineта залежності. У DevSecOps важливо розглядати корисні навантаження SSTI як ризик найвищого рівня, оскільки одне введення у ваш pipeline або додаток може поставити під загрозу все ваше середовище.

інструменти-для-аналізу-складу-програмного-засобу-sca
Визначте пріоритети, усуньте та захистіть ризики, пов'язані з програмним забезпеченням
Отримайте свій безкоштовний обліковий запис.
Не потрібна кредитна картка.

Забезпечте розробку та доставку програмного забезпечення

з пакетом продуктів Xygeni