CRLF is het acroniem dat wordt gebruikt om te verwijzen naar Carriage Return (\r) Line Feed (\n). Zoals men zou kunnen merken aan de symbolen tussen de haakjes, “Carriage Return” verwijst naar het einde van een regel, en “Line Feed” verwijst naar de nieuwe regel. Daarom worden zowel CR als LF gebruikt om het eindpunt van een lijn aan te geven. Wanneer een gebruiker inhoud op een website aanvraagt, retourneert de server de inhoud van de website samen met de HTTP-headers. De headers en de inhoud worden gescheiden door een gedefinieerde combinatie van CR en LF. Het is vanwege CRLF dat een server weet waar een nieuwe header begint of eindigt. Een Carriage Return Line Feed (CRLF) injectie kwetsbaarheid is een type Server side injectie die optreedt wanneer een aanvaller voegt de CRLF tekens in een invoerveld om de server te misleiden door het laten denken dat een object is beëindigd en een nieuwe is begonnen. Dit gebeurt wanneer de webtoepassing geen gebruikersinvoer voor CRLF-tekens ontsmet. Het heeft een gemiddelde ernst rating (P3 volgens Bugcrowd ‘ s VRT).
CRLF injectie aanval heeft twee belangrijkste use cases:
- Log splitsen: De aanvaller voegt een end of line karakter en een extra regel te vervalsen van het logbestand ingangen om de systeembeheerders te misleiden door het verbergen van andere aanvallen.
- HTTP Response Splitting: CRLF-injectie wordt gebruikt om HTTP-headers toe te voegen aan het HTTP-antwoord en bijvoorbeeld een XSS-aanval uit te voeren die leidt tot informatieverschaffing.
voorbeeld:
een eenvoudig GET-verzoek kan als volgt worden gemaakt:
GET /%0d%0aSet-Cookie:CRLFInjection=PreritPathak HTTP/1.1
opmerking: %0d en %0a zijn gecodeerde vormen van respectievelijk \r en \n. Als de webapplicatie kwetsbaar is, kan een aanvaller een cookie instellen op de website.
effecten van CRLF-injectie
CRLF-injectie stelt de aanvaller in staat om valse cookies in te stellen, CSRF-tokens te stelen, gebruikersinformatie vrij te geven door een script (XSS) te injecteren en verschillende andere aanvallen uit te voeren. Het staat ook toe dat aanvallers & beveiligingsmaatregelen zoals XSS-filters omzeilen & zelfde Origin Policy (SOP), waardoor ze gevoelig zijn voor de volgende aanvallen:
1. XSS of Cross Site Scripting
XSS of Cross Site Scripting is een beveiligingsprobleem dat een aanvaller in staat stelt om kwaadaardige JavaScript-code in de webtoepassing te injecteren. De volgende GET verzoeken worden vervaardigd in een poging keten CRLF injectie met XSS.
Door een waarschuwing op te geven met gevoelige gebruikersinformatie
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
door XSS-bescherming uit te schakelen
www.target.com/%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
2. Met HTTP Response Splitting kan een aanvaller schadelijke cookies instellen in de browser van het slachtoffer. In de meeste gevallen, de volgende GET request zal resulteren in een 307 Redirect, en dus het slachtoffer zal worden doorgestuurd naar target.com & de URL zal de Set-Cookie parameter niet bevatten. Op de achtergrond wordt de cookie echter ingesteld.
www.target.com/%0d%0aSet-Cookie:CRLFInjection=MaliciousCookieSet
3. Phishing-aanvallen
een aanvaller kan de Locatiekop instellen die het slachtoffer naar de website van het kwaad leidt. Deze website kan worden ontwikkeld om te kijken net als het doel website en wanneer het slachtoffer voert hun referenties, ze zullen worden verzonden naar de aanvaller. De locatiekop kan worden ingesteld als:
GET /%0d%0aLocation:%20https://evil.com HTTP/1.1
4. Session Fixation
net als bij de cookie-injectie aanval, stelt de aanvaller hier de sessie-id van een gebruiker in op een bepaalde waarde. Deze link wordt verzonden naar het slachtoffer en wanneer het slachtoffer inlogt met behulp van deze sessie, de aanvaller kan ook inloggen met behulp van dezelfde sessie-id.
www.target.com/%0d%0aSet-Cookie:session_id=942....
5. HTTP-Headerinjectie
een aanvaller kan de CRLF-injectie gebruiken om HTTP-Headers in een toepassing te injecteren om beveiligingsmechanismen zoals XSS-filters of hetzelfde origin-beleid te verslaan.
www.target.com/%0d%0aHackersHeader:NewHeader
CORS (Cross Origin Resource Sharing) activerende headers kunnen worden ingespoten & de aanvaller kan JavaScript gebruiken om toegang te krijgen tot gevoelige bronnen die anders beschermd zijn door SOP (zelfde Origin Policy), waardoor sites van verschillende oorsprong geen toegang tot elkaar krijgen.
6. Web – cache vergiftiging is een techniek waardoor een aanvaller vergiftigde inhoud kan dienen door het manipuleren van een webcache. Om dit probleem met succes te exploiteren, zou een aanvaller de caching proxy, syndicators, content delivery networks (CDN ‘ s) of andere cachingmechanismen van de kwetsbare website moeten vergiftigen tussen de client en de server. Na een succesvolle web cache vergiftiging, het slachtoffer zal geen idee hebben over de kwaadaardige inhoud wordt aan hen geserveerd door de cache. Het onderstaande is een voorbeeld van hoe een aanvaller een host header injectie zou kunnen exploiteren (met behulp van CRLF) door het vergiftigen van een web-cache.
Voor het volgende verzoek:
$ 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
Er zou het volgende antwoord zijn:
HTTP/1.1 200 OK
<
title
>Example</
title
>
<
script
src
=
"http://hacker.com/script.js"
>
Diverse Use Cases:
1. Het injecteren van een valse HTTP response header:
Content-Length: 10
nu zal de webbrowser alleen de volgende 10 bytes ontleden.
2. Het injecteren van een nep HTTP response header:
Content-Length: 0
Dit wordt behandeld als een beëindigd antwoord & de webbrowsers beginnen een nieuw antwoord te ontleden.
mitigaties:
een ontwikkelaar moet de volgende dingen in gedachten houden om CRLF-injectie te voorkomen:
- ontsmetting van gebruikersinvoer.
- coderen CR & LF karakters (\r, \n) zodat zelfs wanneer ze worden opgegeven, ze niet worden herkend door de server.
- Valideer de input van de gebruiker voordat deze de response headers bereikt (bijvoorbeeld met behulp van methoden zoals StringEscapeUtils.escapeJava ()).
- een onnodige header moet worden uitgeschakeld.
De volgende tabel benadrukt de ernst van CRLF-injectie volgens verschillende industrienormen:
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 |