XPath injection - инъекция в XML Path Language запросы

Критическая уязвимость кода сайта. Высокий уровень угрозы.

XPath injection - это атака на приложения, создающие XML Path Language запросы

XPath injection - является максимальной угрозой класса А1 по классификации OWASP


XPath инъекция - атака направленная на приложения, создающие XPath (XML Path Language) запросы от пользовательских данных.

Язык XPath разработан для возможности обращения к разным частям документа на языке XML.
Синтаксис XPath схож с языком запросов SQL для баз данных.
Различия - это использование XML - дерева в XPath вместо табличных данных SQL и универсальность языка XPath против различных реализаций SQL.
Еще одним различием является отсутствие разграничений в XPath и разграничения прав доступа к БД в SQL.

Аналогично SQL injection, XPath уязвим для инъекций, при недостаточной фильтрации и валидации данных входящих запросов.

Пример эксплуатации XPath инъекции:

Часть кода XML базы данных: base.xml
<orders>
<customer id="1">
<name>Петр Иванов</name>
<email>petr.ivanov@email.ru</email>
<creditcard>12341234123451234</creditcard>
<order>
<item>
<quantity>1</quantity>
<price>20.00</price>
<name>something</name>
</item>
<item>
<quantity>2</quantity>
<price>10.00</price>
<name>anything</name>
</item>
</order>
</customer>
...
</orders>

XPath запрос для поиска товара по цене:
string query = "/orders/customer[@id='" + customerId + "']/order/item[price >= '" + priceFilter + "']";

XPath инъекция:
'] | /* | /foo[bar='

Измененный в результате эксплуатации XPath инъекции запрос:
string query = "/orders/customer[@id=''] | /* | /foo[bar='']/order/item[price >= '" + priceFilter + "']";


Результат:
Получение файла базы данных base.xml
XPath injection работоспособна из-за отсутствия фильтрации данных параметров priceFilter и customerId.

Возможность эксплуатации XPath injection - это очень серьезная угроза для безопасности сайта.


Защита от XPath injection

Фильтрация и валидация данных входящих запросов.
Экранирование спецсимволов.



Сканер уязвимостей сайтов онлайн Проверьте, наколько устойчив к взлому Ваш сайт