FixVibe
Covered by FixVibecritical

SQL Injection: Prevenirea accesului neautorizat la baza de date

Injecția SQL (SQLi) este o vulnerabilitate critică în care atacatorii interferează cu interogările bazei de date ale unei aplicații. Prin injectarea unei sintaxe SQL rău intenționate, atacatorii pot ocoli autentificarea, pot vizualiza date sensibile precum parolele și detaliile cărților de credit sau chiar pot compromite serverul de bază.

CWE-89

Impactul injectării SQL

Injecția SQL (SQLi) permite unui atacator să interfereze cu interogările pe care o aplicație le face către baza sa de date [S1]. Impactul principal include accesul neautorizat la date sensibile, cum ar fi parolele utilizatorului, detaliile cardului de credit și informațiile personale [S1].

Dincolo de furtul de date, atacatorii pot modifica sau șterge adesea înregistrările bazei de date, ceea ce duce la modificări persistente ale comportamentului aplicației sau la pierderea datelor [S1]. În cazurile de severitate ridicată, SQLi poate fi escalat pentru a compromite infrastructura back-end, a permite atacuri de refuz de serviciu sau a oferi o ușă secundară persistentă în sistemele organizației.

Cauza principală: manipularea nesigură a intrărilor

Cauza principală a injectării SQL este neutralizarea necorespunzătoare a elementelor speciale utilizate într-o comandă SQL [S2]. Acest lucru se întâmplă atunci când o aplicație construiește interogări SQL prin concatenarea intrărilor influențate din exterior direct în șirul de interogări [S1][S2].

Deoarece intrarea nu este izolată corespunzător de structura de interogare, interpretul bazei de date poate executa părți din intrarea utilizatorului ca cod SQL, mai degrabă decât să o trateze ca date literale [S2]. Această vulnerabilitate se poate manifesta în diferite părți ale unei interogări, inclusiv instrucțiuni SELECT, valori INSERT sau instrucțiuni UPDATE [S1].

Remedieri și atenuări concrete

Utilizați interogări parametrizate

Cea mai eficientă modalitate de a preveni injectarea SQL este utilizarea interogărilor parametrizate, cunoscute și sub numele de instrucțiuni pregătite [S1]. În loc să concateneze șiruri, dezvoltatorii ar trebui să folosească mecanisme structurate care impun separarea datelor și codului [S2].

Principiul celui mai mic privilegiu

Aplicațiile ar trebui să se conecteze la baza de date folosind cele mai mici privilegii necesare pentru sarcinile lor [S2]. Un cont de aplicație web nu ar trebui să aibă privilegii administrative și ar trebui să fie limitat la tabelele sau operațiunile specifice necesare pentru funcția sa [S2].

Validarea și codificarea intrărilor

Deși nu este un înlocuitor pentru parametrizare, validarea de intrare oferă o apărare în profunzime [S2]. Aplicațiile ar trebui să utilizeze o strategie de acceptare-cunoscută-bună, validând faptul că intrarea se potrivește cu tipurile, lungimile și formatele așteptate [S2].

Cum testează FixVibe pentru aceasta

FixVibe acoperă deja injectarea SQL prin modulul de scanare active.sqli cu închidere. Scanările active rulează numai după verificarea și atestarea proprietății domeniului. Verificarea accesează cu crawlere punctele finale GET de aceeași origine cu parametri de interogare, stabilește un răspuns de referință, caută anomalii booleene specifice SQL și raportează o constatare numai după confirmarea temporizării pe mai multe lungimi de întârziere. Scanările din depozit ajută și la identificarea cauzei rădăcină mai devreme prin code.web-app-risk-checklist-backfill, care semnalează apelurile SQL brute construite cu interpolarea șablonului.