Injectiile XML si XPath

Byhackeradvisor

Injectiile XML si XPath

Majoritatea site-urilor detin o metoda de stocare a datelor; cea mai des intalnita fiind baza de date. Totodata, anumite site-uri folosesc XML pentru stocarea datelor si folosesc o metoda de interogare a acestora cunoscuta sub numele de XPath. In cazul folosirii bazelor de date SQL pentru stocarea datelor unui site, administratorul site-ului trebuie sa aiba in vedere atacurile de tip SQL Injection care pot sustrage sau altera datele. Similar site-urilor care stocheaza informatii folosind XML si XPath, trebuie sa se aiba in vedere XPath Injection, pentru prevenirea furturilor sau a modificarilor de date.

 

XML and XPATH Injection

Aplicatiile care returneaza diferite rezultate bazate pe informatiile de utilizatori introduse ( cum ar fi logarea unui user bazata pe user/parola)  ar putea sa nu filtreze toate informatiile introduse de utilizator. Imaginati-va ca aveti datele de utilizator stocate intr-un fisier XML, si acest fisier XML arata in felul urmator:

<users>
	<user ID =1>
		<username>Admin</username>
		<password>MyPassw0rd</password>
		<role>admin</role>
	</userid>
</users>

Uitandu-ne la codul pe care site-ul il foloseste pentru logarea user-ului, creeaza dinamic un XPath interogat in PHP, dupa ce user-ul a introdus username-ul si parola in campurile corespunzatoare (cu user si parola variabila) :

<?php
$login = simplexml_load_file("users.xml");
$result=$login->xpath("//User[username/test()='".$_POST['user']." AND password/text()='".$_POST['pass']."'";
?>

Problema principala mai sus mentionata, este faptul ca datele de la utilizator, nu sunt sigure. Variabila POST este folosita pentru a trage date direct din campurile de login si a le plasa in interogarea XPath. In acest moment, un atacator ar putea incerca introducerea unui string special pentru username:

' or 1=1 or '

Acum interogarea, intotdeauna returneaza primul user (in cazul nostru admin) si astfel atacatorul este logat ca si administrator!

Alte atacuri sunt posibile de asemenea, folosind o logica similara. In loc de logarea ca si administrator, atacatorul ar putea folosi alte string-uri speciale pentru a solicita date din documente la care ei nu ar trebui sa aiba acces, chiar si intrarea in posesia tuturor datelor din fisierul XML.

 

Cum impacteaza asta securitatea mea?

 

Un atac cu succes ar permite unui atacator sa fure intreaga baza de date, inclusiv datele sensibile si logarea cu privilegii de administrator in aplicatie.

Aceasta este vulnerabilitatea cu riscul cel mai mare, pe care o aplicatie o poate avea.

 

Prevenirea XML INJECTION

 

XPath Injection, poate fi prevenita intr-un mod similar ca si SQL Injection. Cea mai buna cale este securizarea cu atentie a datelor introduse de utilizator. Orice informatie primita de la un utilizator, trebuie considerata nesigura. Inlaturarea si securizarea ghilimelelor simple si duble, ar trebui sa inlature majoritatea tipurilor de atac de acest gen.

Luand in considerare faptul ca inlaturarea ghilimelelor, poate avea efecte secundare, cum ar fi atunci cand numele de utilizator poate contine ghilimele valide. Imaginati-va nume comune cum ar fi O`Malley, care contine ghilimile legitime si care pot fi introduse in campul nume. In aceste cazuri, introducerea informatiei poate fi securizata, cel mai adesea prin adaugarea unui / in fata ghilimelelor. Verifica cu biblioteca ta de functii specifica si un soft-ul XML, sintaxa corespunzatoare care poate fi folosita.

Majoritatea bibliotecilor folosite in programare, contin functii pentru a va ajuta sa faceti escape la datele introduse de utilizatorpentru siguranta interogarii. Verificati documentatia dvs. specifica pentru modalitatea corecta de automatizare a escape-ului datelor din interogarea documentelor XML.

 

RESURSE SUPLIMENTARE

Blind XPath Injection Paper
Web Application Security Consortium on XPath Injection
OWASP XPath Documentation

 

Gasiti vulnerabilitatea XML Injection in aplicatia dvs. Web

Hackeradvisor.com, include in procesul de scanare, diferite setari de test, care te vor ajuta sa reduci expunerea site-ului la atacuri, inclusiv impotriva XML Injection si XPath Injection.

About the author

hackeradvisor administrator

Follow me