Zagrożenia w sieci

Instrukcja XPath

Problem

Atak wstrzykiwania instrukcji XPath (XML Path Language) przypomina wstrzykiwanie instruk­cji SQL. Jest to potencjalny słaby punkt aplikacji, które przechowują wrażliwe informacje w plikach XML zamiast w bazie danych. XPath to język służący do pobierania węzłów z do­kumentów XML. Najbardziej popularną wersją tego języka jest obecnie XPath 1.0, podczas gdy wersja XPath 2.0 (podzbiór języka XQuery 1.0) jak dotychczas nie jest tak często wyko­rzystywana. Proste ataki wstrzykiwania, podobne do opisanych w tej recepturze, zadziałają zarówno dla języka XPath 1.0, jak i XPath 2.0. Specyfikacja XPath 2.0 gwarantuje jednak do­datkowe możliwości, którymi mogą być zainteresowani napastnicy. Te dodatkowe własności nie są wymagane do przeprowadzania prostych testów takich jak te, które zostały opisane w ni­niejszej recepturze. Warto jednak wiedzieć, że jeśli w aplikacji jest stosowany język XPath 2.0, to oddziaływanie exploita może być większe.

Rozwiązanie

W polach wejściowych aplikacji podejrzanej o używanie kwerend XPath należy wstawić ciągi znaków podobne do tych, które pokazano w listingu 12.28. Odpowiedź serwera może zawie­rać losowy rekord użytkownika, listę wszystkich użytkowników itp. Otrzymanie takiej nie­typowej odpowiedzi może oznaczać, że aplikacja jest wrażliwa na wstrzykiwanie instrukcji XPath.

Dane wejściowe do wyszukiwania podatności na wstrzykiwanie instrukcji XPath

or 1=1

1' or ,1,=,1I or '1='1 1" or "1"="1" or "1"="1

 

 

Zwróciliśmy uwagę na to, że pokazane dane wejściowe są dość podobne do tych, których używali­śmy do testowania podatności na wstrzykiwanie instrukcji SQL. Aby sprawdzić, czy aplikacja jest wrażliwa na wstrzykiwanie instrukcji XPath lub instrukcji SQL, należy zapytać członków zespołu projektowego, czy do przetwarzania danych wejściowych w wybranym polu są wy­korzystywane kwerendy SQL, czy XPath.

Wstrzykiwanie instrukcji XPath wykazuje wiele podobieństw do wstrzykiwania instrukcji SQL i LDAP. Różnice obejmują jedynie składnię kwerend oraz ich potencjalne oddziaływa­nie. Jeśli do przechowywania wrażliwych informacji zastosowano pliki XML, istnieje prawdo­podobieństwo, że aplikacja wykorzystuje XPath do pobierania informacji z plików. W takim przypadku istnieje możliwość zastosowania ataku wstrzykiwania instrukcji XPath w celu pominięcia mechanizmów uwierzytelniania i uzyskania dostępu do poufnych informacji. Po­nieważ tester aplikacji może legalnie zdobyć szczegóły implementacyjne aplikacji i użyć ich w celu inteligentnego przeprowadzenia testów, przed wypróbowaniem omawianych tu te­stów nie zapomnijmy zapytać członków zespołu projektowego w naszej firmie, czy w aplikacji są stosowane zapytania XPath. Warto również uzyskać rzeczywiste zapytania XPath wykorzy­stywane w aplikacji. To pozwala na łatwe generowanie prawidłowych danych wejściowych do testowania.

W ramach testu przeanalizowaliśmy kod XML z poniższego listingu, którego aplikacja używa do zapisywania nazw użyt­kowników i haseł.

Plik XML używany do zapisywania danych identyfikacyjnych użytkowników

<?xml version="1.0" encoding="IS0-8859-2"?>

<users>

<user>

<id>1</id>

<username>asethi</username>

<password>secret123</password>

<realname>Amit Sethi</realname>

</user>

<user>

<id>2</id>

<username>admin</username>

<password>pass123</password>

<realname>Administrator<realname>

</user>

</users>

Założyliśmy, że aplikacja przeprowadza uwierzytelnianie użytkowników za pomocą kwerendy XPath zamieszczonej poniżej:

/users/user[username/text()='username' and password/text()='password']/realname/text()

W związku z tym, że kwerenda zwróciła niepusty ciąg znaków, oznaczało to, że uwierzytelnianie prze­biegło pomyślnie. W takim przypadku aplikacja wyświetli komunikat „Witaj username".

Skutki stosowania ataków polegających na wstrzykiwaniu kwerend XPath w wielu przypad­kach są mniejsze w porównaniu ze wstrzykiwaniem kwerend SQL, ponieważ kwerendy XPath można wykorzystać tylko do czytania informacji z plików XML. Modyfikowanie za­wartości magazynu danych za pomocą ataków wstrzykiwania kwerend XPath nie jest moż­liwe. Tego rodzaju ataki można jednak wykorzystać do pomijania mechanizmów uwierzytel­niania oraz w celu uzyskania dostępu do wrażliwych informacji, na przykład haseł.