CRLF a Carriage Return (\r) Line Feed (\n) kifejezés rövidítése. Amint az a zárójelben lévő szimbólumokból kitűnik, a “kocsi visszatérése” egy sor végére, a “vonaljelzés” pedig az új sorra utal. Ezért mind a CR, mind az LF a vonal végpontjának jelölésére szolgál. Amikor egy felhasználó tartalmat kér egy webhelyen, a kiszolgáló a webhely tartalmát a HTTP fejlécekkel együtt adja vissza. A fejléceket és a tartalmat a CR és LF meghatározott kombinációja választja el egymástól. A CRLF miatt egy szerver tudja, hol kezdődik vagy ér véget egy új fejléc. A Carriage Return Line Feed (CRLF) injection sebezhetőség egy olyan típusú szerver oldali befecskendezés, amely akkor fordul elő, amikor a támadó beszúrja a CRLF karaktereket egy beviteli mezőbe, hogy megtévessze a szerver azáltal, hogy úgy gondolja, hogy egy objektum megszűnt, és egy új elkezdődött. Ez akkor történik, ha a webes alkalmazás nem fertőtleníti a felhasználói bemenetet a CRLF karakterekhez. Közepes súlyosságú minősítéssel rendelkezik (P3 a Bugcrowd VRT szerint).
CRLF injekció támadás két legfontosabb felhasználási esetek:
- Log hasító: A támadó beszúr egy sorvégi karaktert és egy extra sort, hogy meghamisítsa a naplófájl bejegyzéseit annak érdekében, hogy más támadások elrejtésével megtévesztse a rendszergazdákat.
- HTTP válasz felosztása: a CRLF injekció HTTP fejlécek hozzáadására szolgál a HTTP válaszhoz, és például egy XSS támadást hajt végre, amely információ közzétételéhez vezet.
példa:
egy egyszerű GET kérés a következőképpen alakítható ki:
GET /%0d%0aSet-Cookie:CRLFInjection=PreritPathak HTTP/1.1
Megjegyzés: %0d és %0a a \r és \n kódolt formái. Ha a webes alkalmazás sebezhető, a támadó képes lesz cookie-t beállítani a weboldalon.
A CRLF injekció hatásai
a CRLF injekció lehetővé teszi a támadó számára, hogy hamis cookie-kat állítson be, CSRF tokeneket lopjon el, felhasználói információkat tegyen közzé egy szkript (XSS) befecskendezésével, és számos más támadást hajtson végre. Azt is lehetővé teszi a támadók számára, hogy deaktiválják a & bypass biztonsági intézkedéseket, mint például az XSS szűrők & azonos származási politika (SOP), így érzékenyek a következő támadásokra:
1. XSS vagy Cross Site Scripting
XSS vagy Cross Site Scripting egy biztonsági rés, amely lehetővé teszi a támadó, hogy adja rosszindulatú JavaScript kódot a webes alkalmazás. A következő GET kérések ügyes egy kísérlet lánc CRLF injekció XSS.
érzékeny felhasználói adatokat tartalmazó figyelmeztető jelzés felbukkanásával
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
az XSS védelem letiltásával
www.target.com/%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
2. Cookie Injection
HTTP Response hasító lehetővé teszi a támadó számára, hogy rosszindulatú cookie-kat állítson be az áldozat böngészőjében. A legtöbb esetben a következő GET kérés 307 átirányítást eredményez, így az áldozat átirányításra kerül target.com & az URL nem tartalmazza a Set-Cookie paramétert. A háttérben azonban a cookie be lesz állítva.
www.target.com/%0d%0aSet-Cookie:CRLFInjection=MaliciousCookieSet
3. Adathalász támadások
a támadó beállíthatja a hely fejlécét, amely átirányítja az áldozatot a gonosz webhelyre. Ezt a weboldalt úgy lehet fejleszteni, hogy úgy nézzen ki, mint a céloldal, és amikor az áldozat belép a hitelesítő adataikba, elküldik őket a támadónak. A helyfejléc beállítható:
GET /%0d%0aLocation:%20https://evil.com HTTP/1.1
4. Session Fixation
a Cookie Injection attackhez hasonlóan itt a támadó beállítja a felhasználó munkamenet-azonosítóját egy adott értékre. Ezt a linket elküldjük az áldozatnak, majd amikor az áldozat bejelentkezik a munkamenet használatával, a támadó ugyanazzal a munkamenet-azonosítóval is bejelentkezhet.
www.target.com/%0d%0aSet-Cookie:session_id=942....
5. HTTP fejléc injekció
a támadó kihasználhatja a CRLF injekciót, hogy HTTP fejléceket injektáljon egy alkalmazásba annak érdekében, hogy legyőzze az ilyen XSS szűrőket vagy az azonos eredetű házirendet.
www.target.com/%0d%0aHackersHeader:NewHeader
RB (Kereszt Origin Erőforrás-Megosztás) aktiválása fejlécek lehet beadni & a támadó JavaScript segítségével hozzáférés érzékeny források, amelyek egyébként által védett SOP (Azonos Eredetű Politika), amely megakadályozza, hogy a webhelyek a különböző eredetű eléréséhez egymást.
6. Web Cache mérgezés
Web-cache mérgezés olyan technika, amely miatt a támadó szolgálhat mérgezett tartalom manipulálásával web cache. A probléma sikeres kihasználásához a támadónak meg kell mérgeznie a sebezhető webhely gyorsítótárazási proxyját, a szindikátorokat, a tartalomszolgáltató hálózatokat (CDNs) vagy más gyorsítótárazási mechanizmusokat az ügyfél és a szerver között. A sikeres webes gyorsítótár-mérgezés után az áldozatnak fogalma sem lesz arról, hogy a rosszindulatú tartalmat a gyorsítótár szolgálja fel nekik. Az alábbiakban egy példa arra, hogy a támadó potenciálisan kihasználhatja a host fejléc-injekciót (CRLF használatával) egy web-gyorsítótár mérgezésével.
A következő kérés esetén:
$ 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
a következő válasz lenne:
HTTP/1.1 200 OK
<
title
>Example</
title
>
<
script
src
=
"http://hacker.com/script.js"
>
vegyes használati esetek:
1. Hamis HTTP válaszfejléc befecskendezése:
Content-Length: 10
most a webböngésző csak a következő 10 bájtot elemzi.
2. Hamis HTTP válasz fejlécének befecskendezése:
Content-Length: 0
ezt megszakított válaszként kezelik & a webböngészők új válasz elemzését kezdik.
Enyhítések:
a fejlesztőnek szem előtt kell tartania a következő dolgokat, hogy megakadályozza a CRLF injekciót:
- A felhasználói bemenet fertőtlenítését.
- kódolja a CR & LF karaktereket (\r, \n) úgy, hogy még akkor is, ha azokat a kiszolgáló nem ismeri fel.
- érvényesítse a felhasználói bemenetet, mielőtt elérné a válaszfejléceket (pl. olyan módszerekkel, mint a StringEscapeUtils.escapeJava()).
- a felesleges fejlécet le kell tiltani.
az alábbi táblázat hangsúlyozza a CRLF injekció súlyosságát a különböző ipari szabványok szerint:
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 |