Command Injection Vulnerability

OS command injection (cunoscută și sub numele de shell injection) este o vulnerabilitate de securitate web care permite unui atacator să execute comenzi arbitrare ale sistemului de operare (OS) pe serverul care execută o aplicație și, de obicei, compromite complet aplicația și toate datele sale.

De ce aplicațiile Web trebuie să Execute comenzi de sistem?

aplicațiile Web trebuie uneori să execute comenzi ale sistemului de operare (comenzi OS) pentru a comunica cu sistemul de operare gazdă subiacent și cu sistemul de fișiere. Acest lucru se poate face pentru a rula comenzi de sistem, pentru a lansa aplicații scrise într-un alt limbaj de programare sau pentru a rula scripturi shell, python, perl sau PHP. Pentru orice sistem de operare, inclusiv Windows, Unix și Linux, sunt disponibile funcții care pot executa o comandă care este transmisă celorlalte Scripturi ca o comandă shell. Deși extrem de utilă, această funcționalitate poate fi periculoasă atunci când este utilizată incorect și poate duce la probleme de securitate a aplicațiilor web, așa cum se explică în acest articol.

De ce ar trebui să fii atent când folosești comenzi de sistem în aplicații Web

exploatând o vulnerabilitate de injecție de comandă într-o aplicație vulnerabilă, atacatorii pot adăuga comenzi suplimentare sau pot injecta propriile comenzi ale sistemului de operare. Aceasta înseamnă că, în timpul unui atac de injecție de comandă, un atacator poate prelua cu ușurință controlul complet al sistemului de operare gazdă al serverului web. Prin urmare, dezvoltatorii ar trebui să fie foarte atenți cum să treacă intrarea utilizatorului într-una dintre aceste funcții atunci când dezvoltă aplicații web.

exemplu de vulnerabilitate a injecției de comandă

În acest exemplu de vulnerabilitate a injecției de comandă, folosim funcționalitatea ping, care este notoriu nesigură pe multe routere. Imaginați-vă o aplicație vulnerabilă care are o funcție comună care trece o adresă IP de la o intrare de utilizator la comanda ping a sistemului. Prin urmare, dacă intrarea utilizatorului este 127.0.0.1, următoarea comandă este executată pe sistemul de operare gazdă:

ping -c 5 127.0.0.1

deoarece avem de-a face cu o aplicație web vulnerabilă, este posibil să ieșim din comanda ping sau să provocăm o eroare care returnează informații utile atacatorului. Atacatorul poate folosi apoi această funcționalitate pentru a-și executa propriile comenzi arbitrare. Un exemplu de adăugare a comenzilor suplimentare de sistem ar putea arăta astfel:

ping -c 5 127.0.0.1; id

în exemplul de mai sus, mai întâi comanda ping este executată și imediat după aceea are loc executarea comenzii id. Prin urmare, ieșirea comenzii de pe pagină va arăta astfel:

în timpul unui atac de injecție de comandă OS, atacatorul poate configura, de asemenea, un atac bazat pe erori. De exemplu, o injecție de cod în acest caz va arăta de obicei ca mai jos:

ping -c 5 "$(id)"

injecția de cod de mai sus returnează un răspuns ca acesta:

ping: unknown host uid=0(root) gid=0(root) groups=0(root)

cum să preveniți vulnerabilitățile de injecție a comenzii de sistem

pentru a împiedica un atacator să exploateze o aplicație web vulnerabilă și să introducă caractere speciale în comanda sistemului de operare, ar trebui în general, evitați apelurile de sistem acolo unde este posibil. În toate cazurile, evitați introducerea utilizatorului de orice fel, cu excepția cazului în care este absolut necesar. Și dacă este necesar, asigurați – vă că există o validare adecvată a intrărilor-validarea intrărilor este întotdeauna o necesitate pentru a vă asigura că codul aplicației dvs. web nu este vulnerabil la alte vulnerabilități cu impact ridicat, inclusiv XSS și SQL Injection.

de asemenea, dezactivați această funcționalitate în fișierul de configurare al limbii dvs. dacă nu aveți nevoie de ea, astfel încât atacatorii nu pot reuși niciodată să obțină acces la shell-ul sistemului de operare gazdă prin aplicații web vulnerabile. În unele limbi, puteți separa execuția procesului de parametrii de intrare. De asemenea, puteți construi o listă albă de intrări posibile și puteți verifica formatele, de exemplu acceptând doar întreg pentru un id numeric.

tabelul de clasificare și severitate a vulnerabilităților

Fiți la curent cu tendințele de securitate web

Lasă un răspuns

Adresa ta de email nu va fi publicată.