Поиск проблем в «инъекционных» XML-сущностях

Поиск проблем в «инъекционных» XML-сущностях

XML – отличная технология, однако при неправильном использовании может быть небезопасной. Лично я считаю, что причиной «дырявости» XML является перегруженность сложными элементами, которые дают безграничные возможности, но с другой стороны становятся причиной появления разного рода уязвимостей, в том числе связанных с инъекциями.

http://blog.websecurify.com/

XML – отличная технология, однако при неправильном использовании может быть небезопасной. Лично я считаю, что причиной «дырявости» XML является перегруженность сложными элементами, которые дают безграничные возможности, но с другой стороны становятся причиной появления разного рода уязвимостей, в том числе связанных с инъекциями.

Рисунок 1: Приложение XMLfuzz

Что такое «инъекционные» сущности

«Инъекционные» сущности позволяет злоумышленнику вставлять свой собственный код в XML-документы (используя встроенный механизм XML) и получать доступ к любым ресурсам. XML-сущности в формате &entityname; используются в качестве текстовых вставок. Например, если сущность &name; связана с текстом John, то при отображении документа вместо <doc>Hello &name;!</doc> мы увидим <doc>Hello John!</doc>. Этот пример - один из самых тривиальных.

Другой пример: использование сущностей SYSTEM (их еще называют внешними). Системная сущность объявляется в начале документа как часть секции DTD:

<!DOCTYPE document [
<!ENTITY entity-name SYSTEM "URI/URL">
]>

При обработке секции DTD, что является стандартным функционалом для большинства фреймворков, злоумышленник может получить доступ к любому файлу локальной системы и иногда даже выполнить произвольные HTTP-запросы к внутренним серверам. Как вы могли догадаться, подобные атаки могут привести к полному компрометированию целевой системы.

Обнаружение проблем, связанных с «инъекционными» сущностями

Поиск подобных проблем – относительно простой процесс. Мы просто создаем документ с секцией DTD, содержащей как минимум одну внешнюю сущность, а в теле документа пытаемся использовать имя сущности различными способами для получения желаемого эффекта. Например, документ, показанный ниже, в случае уязвимости удаленного сервера, потенциально можно использовать для чтения содержимого файла /etc/shadow.

<!DOCTYPE document [
<!ENTITY get SYSTEM "/etc/shadow">
]>
<name>&get;</name>

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

Использование Xmlfuzz

Xmlfuzz – продвинутый XML тестировщик, использующий метод черного ящика (fuzzer). Вначале программа анализирует структуру XML документа, а затем пытается найти уязвимость при помощи перебора различных вариантов входных параметров, включая «инъекционные» XML-сущности. Вся структура документа обходится рекурсивно и в процессе внедряются куски данных, которые могут привести к возникновению аномалий.

Рисунок 2: Процесс поиска уязвимостей

Поиск происходит оперативно даже на больших документах и может быть повторен необходимое количество раз. Уже проверенные документы можно протестировать повторно для нахождения более интересных сценариев. На входы задается валидный HTTP запрос и XML-документ (в теле запроса). Дальше все происходит автоматически.

Более подробно о том, как пользоваться утилитой, можно ознакомиться в статье «Fuzzing XML» на сайте Websecurify Learning Portal.

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

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