CRLF este acronimul folosit pentru a se referi la transportul retur (\r) linie de alimentare (\n). După cum s-ar putea observa din simbolurile din paranteze, „întoarcerea căruței” se referă la sfârșitul unei linii, iar „alimentarea liniei” se referă la noua linie. Prin urmare, atât CR, cât și LF sunt utilizate pentru a desemna punctul final al unei linii. Când un utilizator solicită conținut pe un site web, serverul returnează conținutul site-ului web împreună cu anteturile HTTP. Anteturile și conținutul sunt separate printr-o combinație definită de CR și LF. Din cauza CRLF, un server știe unde începe sau se termină un nou antet. O vulnerabilitate de injecție Carriage Return Line Feed (CRLF) este un tip de injecție pe partea serverului care apare atunci când un atacator introduce caracterele CRLF într-un câmp de intrare pentru a înșela serverul făcându-l să creadă că un obiect s-a încheiat și unul nou a început. Acest lucru se întâmplă atunci când aplicația web nu igienizează intrarea utilizatorului pentru caracterele CRLF. Are un rating de severitate medie (P3 conform VRT-ului Bugcrowd).
CRLF atac injecție are două cazuri de Utilizare cele mai importante:
- log divizare: Atacatorul introduce un caracter end of line și o linie suplimentară pentru a falsifica intrările fișierului jurnal pentru a înșela administratorii de sistem ascunzând alte atacuri.
- divizarea răspunsului HTTP: injecția CRLF este utilizată pentru a adăuga anteturi HTTP la răspunsul HTTP și, de exemplu, pentru a efectua un atac XSS care duce la dezvăluirea informațiilor.
exemplu:
o cerere GET simplă poate fi creată după cum urmează:
GET /%0d%0aSet-Cookie:CRLFInjection=PreritPathak HTTP/1.1
notă: %0d și %0a sunt forme codificate de \r și \n respectiv. Dacă aplicația web este vulnerabilă, un atacator va putea seta un cookie pe site.
impactul injecției CRLF
injecția CRLF permite atacatorului să seteze cookie-uri false, să fure jetoane CSRF, să dezvăluie informații despre utilizator prin injectarea unui script (XSS) și să efectueze o varietate de alte atacuri. De asemenea, permite atacatorilor să dezactiveze & ocolește măsurile de securitate precum filtrele XSS & aceeași politică de origine (SOP), făcându-i susceptibili la următoarele atacuri:
1. XSS sau Cross Site Scripting
XSS sau Cross Site Scripting este o vulnerabilitate de securitate care permite unui atacator să injecteze cod JavaScript rău intenționat în aplicația web. Următoarele cereri GET sunt artizanale într-o injecție CRLF lanț încercare cu XSS.
prin declanșarea unei alerte care conține informații sensibile despre utilizator
www.target.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
prin dezactivarea protecției XSS
www.target.com/%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
2. Injectarea Cookie
divizarea răspunsului HTTP permite unui atacator să seteze cookie-uri rău intenționate în browserul victimei. În cele mai multe cazuri, următoarea solicitare GET va avea ca rezultat o redirecționare 307 și, astfel, victima va fi redirecționată către target.com & URL-ul nu va conține parametrul Set-Cookie. În fundal însă, cookie-ul va fi setat.
www.target.com/%0d%0aSet-Cookie:CRLFInjection=MaliciousCookieSet
3. Atacuri de Phishing
un atacator poate seta antetul locației care ar redirecționa victima către site-ul rău. Acest site poate fi dezvoltat pentru a arata la fel ca site-ul țintă și atunci când victima introduce acreditările lor, acestea vor fi trimise la atacator. Antetul locației poate fi setat ca:
GET /%0d%0aLocation:%20https://evil.com HTTP/1.1
4. Fixarea sesiunii
Similar cu atacul de injecție Cookie, aici atacatorul setează ID-ul sesiunii unui utilizator la o anumită valoare. Acest link este trimis victimei și atunci când victima se conectează utilizând această sesiune, atacatorul se poate conecta și utilizând același ID de sesiune.
www.target.com/%0d%0aSet-Cookie:session_id=942....
5. HTTP Header Injection
un atacator poate folosi injecția CRLF pentru a injecta anteturile HTTP într-o aplicație pentru a învinge mecanismele de securitate, cum ar fi filtrele XSS sau aceeași politică de origine.
www.target.com/%0d%0aHackersHeader:NewHeader
CORS (Cross Origin Resource Sharing) anteturile de activare pot fi injectate& atacatorul poate folosi JavaScript pentru a accesa resurse sensibile care sunt altfel protejate de SOP (aceeași politică de origine) care împiedică site-urile de origine diferită să se acceseze reciproc.
6. Otrăvirea Cache-ului web este o tehnică datorită căreia un atacator poate servi conținut otrăvit prin manipularea unui cache web. Pentru a exploata cu succes această problemă, un atacator ar trebui să otrăvească proxy-ul de cache al site-ului vulnerabil, sindicalizatorii, rețelele de livrare a conținutului (CDN) sau alte mecanisme de cache între client și server. După o otrăvire cu succes a cache-ului web, victima nu va avea nicio idee despre conținutul rău intenționat care le este servit de cache. Mai jos este un exemplu al modului în care un atacator ar putea exploata o injecție de antet gazdă (folosind CRLF) prin otrăvirea unui cache web.
pentru următoarea solicitare:
$ telnet www.target.com 80Trying x.x.x.x...Connected to www.target.com.Escape character is '^]'.GET /%0d%0aX-Forwarded-Host:hacker.com HTTP/1.1 //or HostHost: target.com
ar fi următorul răspuns:
HTTP/1.1 200 OK
<
title
>Example</
title
>
<
script
src
=
"http://hacker.com/script.js"
>
diverse cazuri de Utilizare:
1. Injectarea unui antet de răspuns HTTP fals:
Content-Length: 10
acum, browserul web va analiza doar următorii 10 octeți.
2. Injectarea unui antet de răspuns HTTP fals:
Content-Length: 0
acesta este tratat ca un răspuns terminat& browserele web încep să analizeze un nou răspuns.
atenuări:
Un dezvoltator ar trebui să păstreze următoarele lucruri în minte pentru a preveni injectarea CRLF:
- igienizarea de intrare de utilizator.
- codifica CR& caractere LF (\r, \n), astfel încât, chiar și atunci când sunt furnizate, acestea nu sunt recunoscute de server.
- validați intrarea utilizatorului înainte de a ajunge la anteturile de răspuns (de exemplu, folosind metode precum StringEscapeUtils.escapeJava ()).
- un antet inutil ar trebui dezactivat.
următorul tabel subliniază severitatea injecției CRLF în conformitate cu diferite standarde industriale:
Classification | ID / Severity |
---|---|
OWASP 2017 | A1 |
CWE | 93 |
CVSS:3.0 | CVSS:3.0: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:H |
Bugcrowd VRT | P3 |