Инъекция XPath – это атака, очень похожая на SQL-инъекцию, когда веб-приложение использует данные, предоставленные пользователем, для построения вредоносного запроса XPath в XML.
Злоумышленник может выполнить эту инъекцию, отправив вредоносную информацию в веб-приложение.
С помощью этой атаки злоумышленник может узнать, как структурированы данные XML, а также получить доступ к конфиденциальным данным из приложения.
Он также может изменить свои привилегии в уязвимом веб-приложении, если есть какие-либо XML-данные, передаваемые приложению для аутентификации.
Существует множество веб-приложений, в которых злоумышленник может внедрить синтаксис XPath в запрос, интерпретируемый приложением, что позволяет ему выполнять управляемые пользователем запросы XPath. После выполнения такого запроса злоумышленник может обойти механизмы аутентификации и получить доступ к информации без соответствующей авторизации.
XPath – один из стандартных языков, нотации которого реализуются независимо друг от друга.
Пример
Рассмотрим следующий XML-код.
<?xml version="1.0" encoding="utf-8"?>
<Student>
<Student ID="1">
<FirstName>Sashwat</FirstName>
<LastName>K</LastName>
<UserName>SK</UserName>
<Password>password1</Password>
<Type>Admin</Type>
</Student>
<Student ID="2">
<FirstName>Irfan</FirstName>
<LastName>Hameed</LastName>
<UserName>IrfanH</UserName>
<Password>password2</Password>
<Type>User</Type>
</Student>
</Student>
Если приведенный выше XML-код используется для аутентификации пользователей, приложение использует XPath для поиска пользователя.
Если злоумышленник отправит случайные имя пользователя и пароль, XML вернет следующее:-
Username: blimp' or 1=1 or 'a'='a
Password: blimp
FindUserXPath becomes //Employee[UserName/text()='blimp' or 1=1 or
'a'='a' And Password/text()='blimp']
Logically this is equivalent to:
//Employee[(UserName/text()='blimp' or 1=1) or
('a'='a' And Password/text()='blimp')]
Этот ответ XML доказывает злоумышленнику, что для входа в приложение необходимо только сопоставить имя пользователя.
Злоумышленник может манипулировать ответом, чтобы попасть в систему.
Воздействие
Данная уязвимость может иметь следующие последствия:-
- Чтение, обновление и удаление произвольных данных/таблиц из базы данных
- Выполнение команд на базовой операционной системе
Устранение / меры предосторожности
Эта уязвимость может быть устранена следующим образом:-
- Рассматривайте все вводимые пользователем данные как недоверенные. Выполните соответствующую санацию вводимых данных.
- При санировании пользовательского ввода проверьте правильность типа, длины, формата и содержания данных.
- В приложении клиент-сервер выполняйте проверку как на стороне клиента, так и на стороне сервера.
- Всесторонне тестируйте приложения, которые предоставляют, распространяют или принимают пользовательский ввод.
см. также: