инжектиране на шаблони от страна на сървъра - уязвимост на 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 също. Типичните скривалища включват:

  • Хелм диаграми в Kubernetes, където стойностите на шаблоните се рендират динамично
  • Шаблони за имейли които свързват контролирани от потребителя входове
  • Dashboards където низове от заявки или конфигурационни данни се инжектират в шаблони
  • DevOps скриптове които генерират HTML/Markdown с помощта на шаблониращи двигатели.

Пример:

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

If.Values.message идва от ненадежден вход, той въвежда инжектиране на шаблон от страна на сървъра във вашето внедряване pipeline себе си.

Предотвратяване на SSTI с по-безопасни шаблони и статичен анализ

Смекчаването на уязвимостите, свързани със SSTI, изисква по-добри модели на кодиране и ранно откриване.

Сигурни модели

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

Несигурна спрямо сигурна обработка на бисквитки (риск, свързан с въвеждането)

# ❌ 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 Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni