Термины, XXE, SSRF и все-все-все

Термины, XXE, SSRF и все-все-все

Написать пост меня сподвиг вот этот диалог , приключившийся в твиттере третьего дня.


Преамбула: в терминологии и в классификациях в нашей области полная разруха.


Во-первых, почти все называют уязвимости по названиям атак (см. SQLi/XSS). A side note: кстати, если вы не читали пост Владимира Кочеткова про XSS , вы просто обязаны это сделать!.


Во-вторых, умудряются классифицировать недостатки по типам атак, которые, в свою очередь, определяют вперемешку то по цели воздействия, то по способу воздействия. Пример классификации, которую я видел лично: есть класс “DoS” (цель), следом идет класс “Input Validation” (причина) и рядом же – класс “Parameter Tampering” (способ). Как будто не может быть недостатка, связанного с некорректной обработкой входных данных, благодаря которому можно устроить DoS, но только через “Parameter Tampering”. Пример – DROP всего через SQLi через HPP в значении hidden-поля.


Амбула: препарируем SSRF :)


SSRF = Server-Side Request Forgery. Кто-то, возможно, посчитает, что термин классический. Лично для меня он прост и понятен – его уже который год вокруг употребляют то Владимир Воронцов [ тыц ], то Александр Поляков [ тыц ].

С другой стороны, если погуглить “Server-Side Request Forgery”, окажется, что упоминаний термина не очень-то и много. Кроме того, “пацаны, оказывается, не в курсе”: один исследователь известную всем нам идею обозвал собственноручно придуманным именем – XSPA , а Дж. Гроссман вообще подумал про свое-другое


Так вот, с моей точки зрения, XXE – это, конечно, свойство приложения. Свойство заключается в том, что парсер приложения небезопасно разрешает XML-сущности, определенные клиентом. Обычно каждый недостаток можно использовать в различных целях и различными способами: отличный пример тот же SQLi в целях считывания базы и в целях обхода аутентификации в форме логина.

Так вот, XXE – enabling свойство для таких действий удаленного клиента, как чтение локальных файлов или запрос сетевого ресурса по URI. Как не всякий недостаток является уязвимостью, так же и не всякая новая возможность дополнительных действий удаленного пользователя в отношении веб-приложения является атакой.


На мой взгляд, в правильно сконфигурированной системе возможность делать сетевые запросы по URI через XXE не должна давать удаленному пользователю дополнительные бонусы. Правильно сконфигурированная система – это система, в которой выполняется принцип ограниченности потенциального ущерба (и, как следствие, принцип наименьших привилегий). В такой системе будут запрещены лишние сетевые соединения с сервера приложений к другим узлам в DMZ, а необходимые соединения будут устанавливаться только после взаимной аутентификации и авторизации сторон. Мне представляется, что в такой системе SSRF – всего лишь недокументированная фича приложения, не позволяющая сделать ничего нового.


Соответственно, если принцип ограниченности потенциального ущерба не выполняется, то можно говорить о том, что с помощью SSRF мы злоупотребляем отношением доверия между внутренними сервисами. И тогда эта техника уже является слагаемым известного класса атак под названием Exploitation of Trust . И тогда еще одной причиной атаки можно называть небезопасную конфигурацию или даже кривой проект взаимодействия систем! Как вам такая софистика?



Uncategorized копилка
Alt text

Цифровые следы - ваша слабость, и хакеры это знают.

Подпишитесь и узнайте, как их замести!