Новости

26.07.2021

Книга «Безопасность веб-приложений»

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

В этой книге

  • Самые распространенные уязвимости
  • Основные методы взлома
  • Схемы и документация веб-приложений, к которым нет прямого доступа
  • Кастомизированные эксплойты, преодолевающие популярные схемы защиты
  • Способы защиты приложений от хакерских атак
  • Лучшие практики внедрения безопасного кода в жизненный цикл разработки
  • Советы и рекомендации для улучшения уровня безопасности веб-приложений

 

Атака на внешние сущности XML (XXE)


Атака на внешние сущности XML-документа (XML External Entity, XXE) во многих случаях легко осуществима и приводит к разрушительным последствиям. Уязвимость, благодаря которой она становится возможной, связана с неправильной настройкой анализатора XML в коде приложения.

Вообще-то почти все XXE-уязвимости обнаруживаются, когда конечная точка API принимает данные в формате XML (или подобном ему). Вам может казаться, что конечные точки, принимающие XML, встречаются редко, но к XML-подобным форматам относятся SVG, HTML/DOM, PDF (XFDF) и RTF. Они имеют много общего со спецификацией XML, и в результате многие анализаторы XML также принимают их в качестве входных данных.

Спецификация XML позволяет подключать к документу дополнительные компоненты — так называемые внешние сущности. Если XML-анализатор не проводит соответствующую проверку, он может просто загрузить внешнюю сущность и подключить к содержимому XML-документа и таким образом скомпрометировать файлы в файловой структуре сервера.

Атака на внешние сущности XML часто используется для компрометации файлов от других пользователей или для доступа к таким файлам, как /etc/shadow, где хранятся учетные данные, необходимые для правильной работы Unix-сервера.

Атака напрямую


При прямой XXE-атаке объект XML отправляется на сервер под видом внешней сущности. После его анализа возвращается результат, включающий внешнюю сущность (рис. 12.1).

Представим, что mega-bank.com предоставляет утилиту для создания скриншотов, позволяющую отправлять их непосредственно в службу поддержки.

На стороне клиента эта функциональность выглядит так:

Под «этой функциональностью» подразумевается очень простая вещь: пользователь нажимает кнопку и создает снимок экрана, который отправляется в службу поддержки.

С программной точки зрения это тоже не слишком сложно:

  1. Браузер преобразует то, что текущий пользователь видит на экране (через DOM) в XML.
  2. Этот XML браузер передает в службу, которая преобразует его в JPG.
  3. Через другой API браузер отправляет файл JPG сотруднику службы поддержки MegaBank.


Есть несколько моментов, которые хотелось бы отметить по поводу этого кода. Например, функцию sendScreenshotToSupport() можно вызывать самостоятельно для наших собственных изображений. Проверить допустимость содержимого в случае картинки сложнее, чем в случае XML. И хотя преобразовать XML в изображения легко, при обратном преобразовании происходит потеря контекста.

На стороне сервера маршрут с именем screenshot соотносится с запросом из нашего браузера:

Преобразуемый в формат JPG файл XML должен пройти через XML-анализатор. Причем этот анализатор должен соответствовать спецификации XML.

Наш клиент отправляет на сервер обычный набор кода HTML/DOM, преобразованный в формат XML для облегчения процесса анализа. При обычной работе мало шансов, что этот код когда-либо будет представлять какую-либо опасность.

Но отправленные клиентом данные DOM может изменить технически подкованный пользователь. В качестве альтернативы можно просто подделать сетевой запрос и отправить на сервер, например, вот такой код:

После получения такого запроса анализатор сервера проверяет XML и возвращает нам изображение (JPG). Если синтаксический анализатор XML явно не отключает внешние сущности, мы увидим на присланном снимке экрана содержимое текстового файла /etc/passwd.

С полным содержанием статьи можно ознакомиться на сайте "Хабрахабр":

https://habr.com/ru/company/piter/blog/569658/


Комментарии: 0

Пока нет комментариев


Оставить комментарий






CAPTCHAОбновить изображение

Наберите текст, изображённый на картинке

Все поля обязательны к заполнению.

Перед публикацией комментарии проходят модерацию.