Mik azok a cookie-k és mire valók?

Gyakran egy rosszul konfigurált cookie az, amely csendben megnyitja az utat a session-átvételhez egy weboldalon. Pedig az XSS elleni védelem és a CSRF védelem nem komplex architektúrán, hanem három attribútum helyes beállításán múlik.

Mik azok a cookie-k?

A HTTP cookie egy kis méretű adat, amelyet a webszerver küld a kliensnek – leggyakrabban egy webböngészőnek –, és amelyet a kliens eltárol, majd a későbbi HTTP-kérések során automatikusan visszaküld a szervernek.

A cookie-k létjogosultsága közvetlenül a HTTP-protokoll működéséből fakad. A HTTP alapvetően állapotmentes: a szerver két egymást követő kérés között nem rendelkezik információval arról, hogy ugyanaz a felhasználó kommunikál-e vele. A cookie ezt az hidalja át azzal, hogy a kliens és a szerver között perzisztens információt hordoz.

A gyakorlatban a cookie-k kulcs–érték párok formájában jelennek meg, amelyeket a szerver a válasz HTTP-fejlécében ad át a kliensnek. A böngésző ezeket minden további, az adott domainhez tartozó kérésnél visszaküldi.

Ez a mechanizmus teszi lehetővé:

  • a felhasználó azonosítását,
  • a bejelentkezett állapot fenntartását,
  • az alkalmazás működéséhez szükséges kontextus megőrzését.

A modern webalkalmazások jelentős része elképzelhetetlen cookie-k nélkül, hiszen ezek biztosítják a felhasználói élmény folytonosságát és az alkalmazás logikai működését.

További tudnivalók a cookie-król

Fontos hangsúlyozni, hogy a cookie nem feltétlenül tartalmaz üzleti vagy személyes adatot. Sok esetben csupán egy azonosítót hordoz, amelyhez a szerveroldalon tartozik a tényleges állapot.

Technikai szempontból azonban mindig a kliens oldalon tárolódik, és a böngésző kezeli. Vagyis a felhasználó – vagy egy rosszindulatú szereplő – számára potenciálisan elérhető. Ez a tulajdonság alapvetően meghatározza a cookie-kkal kapcsolatos biztonsági kockázatokat.

Mivel a cookie automatikusan elküldésre kerül minden releváns HTTP-kérés során, különösen érzékeny szerepet tölt be az autentikáció és autorizáció területén. Egy kompromittált cookie elegendő lehet a felhasználói munkamenet átvételéhez, még akkor is, ha maga a jelszó nem kerül ki. Ezért a cookie nem pusztán kényelmi eszköz, hanem a webes biztonság központi eleme.

A cookie biztonsága tehát nem kizárólag a tárolt adattól függ, hanem attól is, milyen korlátozások vonatkoznak a használatára.

Cookie-attribútumok: a nagy kép

A cookie-hoz tartozó attribútumok első ránézésre apró technikai részleteknek tűnhetnek. Valójában azonban a webes biztonság egyik legfontosabb védelmi vonalát jelentik.

Ezek határozzák meg:

  • milyen környezetben érhető el a cookie;
  • mikor kerül elküldésre;
  • milyen csatornán használható.

Bár megfelelő beállításokkal teljes támadási osztályok tehetők jelentősen nehezebbé, a gyakorlat mégis azt mutatja, hogy ezek az attribútumok gyakran kimaradnak, vagy nem biztonságos alapértelmezett értéken maradnak. Ennek oka többnyire nem rosszindulat, hanem prioritási kérdés: a funkcionalitás megelőzi a biztonsági konfigurációt.

Pedig a HttpOnly, a Secure és a SameSite attribútum helyes használata nem extra védelem, hanem az alapvető kiberhigiénia része.

A HttpOnly az XSS elleni védelem egyik alapköve

A HttpOnly attribútum célja egyszerű: megakadályozza, hogy a cookie a JavaScriptből elérhető legyen. Ha egy cookie HttpOnly flaggel rendelkezik, a böngésző garantálja, hogy az nem olvasható, nem módosítható és nem továbbítható kliensoldali szkriptekből. Kizárólag HTTP-kérések során kerül elküldésre.

Ennek jelentősége különösen XSS (cross-site scripting) támadások esetén válik nyilvánvalóvá. Egy sikeres XSS-támadás során ugyanis a támadó tetszőleges JavaScript-kódot futtathat a felhasználó böngészőjében. Márpedig ha a session-azonosító cookie JavaScriptből elérhető, annak eltulajdonítása triviális.

A HttpOnly önmagában nem akadályozza meg magát az XSS-sebezhetőséget. Ugyanakkor az XSS elleni védelem szempontjából kulcsfontosságú, mert megakadályozza a cookie közvetlen kiolvasását és továbbítását.

A HttpOnly bináris jellegű: vagy be van állítva, vagy nincs. Nincs alternatív értéke, és nincs olyan legitim felhasználási eset, ahol egy autentikációhoz használt cookie-nál indokolt lenne a hiánya. Éppen ezért minden olyan cookie esetén, amely hitelesítést, sessiont vagy más biztonsági kontextust hordoz, a HttpOnly beállítása erősen ajánlott, gyakorlatilag alapkövetelménynek tekinthető.

A Secure és a transport layer kockázatok kezelése

A Secure attribútum azt szabályozza, hogy a cookie kizárólag titkosított, HTTPS-kapcsolaton keresztül kerülhet-e elküldésre. Ha egy cookie nem rendelkezik Secure flaggel, a böngésző titkosítatlan HTTP-kérés során is elküldi azt. Ez lehetőséget ad a hálózati lehallgatásra és a session cookie eltulajdonítására.

Különösen kritikus ez:

  • nyilvános Wi-Fi hálózatokon;
  • nem megfelelően konfigurált aldomaineken;
  • örökölt rendszereknél.

Egyetlen titkosítatlan kérés is elegendő lehet egy munkamenet kompromittálásához. A Secure attribútum jelenléte vagy hiánya számít és nincs köztes állapot. Modern környezetben, ahol a HTTPS alapkövetelmény, a Secure flag elhagyása csendben nyitva hagy egy komoly biztonsági rést.

SameSite – a CSRF védelem alapmechanizmusa

A SameSite attribútum szabályozza, hogy a böngésző milyen körülmények között küldi el a cookie-t más oldalak által kezdeményezett kérések során. Ez közvetlenül a CSRF védelem egyik kulcseleme.

A SameSite három értéket vehet fel:

  • Strict, mely esetén a cookie-kat a rendszer kizárólag azonos eredetű kérésnél küldi el;
  • Lax , mely bizonyos navigációs esetekben elküldi a cookie-kat, de a tipikus CSRF-mintákat blokkolja;
  • None, mely minden esetben elküldi a cookie-kat (Secure kötelező).

A modern böngészők alapértelmezése a Lax irányába tolódik, ami jól mutatja, hogy a CSRF-védelem ma már nem opcionális, hanem kötelezően ajánlott tényező.

A SameSite helyes konfigurációja jelentősen csökkenti annak esélyét, hogy a felhasználó böngészője egy külső, rosszindulatú oldal kérésére automatikusan hitelesített műveletet hajtson végre.

Cookie-biztonság okosan

A cookie a modern web működésének alapvető eleme. Természetéből fakadóan azonban kiemelt biztonsági kockázatot is jelent. Mivel kliensoldalon tárolódik és automatikusan továbbításra kerül, minden hibás konfiguráció közvetlen támadási felületet nyit.

A HttpOnly, Secure és SameSite attribútumok jól példázzák, hogy viszonylag egyszerű beállításokkal jelentős védelmi szint érhető el.

  • A HttpOnly erősíti az XSS elleni védelmet.
  • A Secure csökkenti a session-eltérítés kockázatát.
  • A SameSite pedig a CSRF védelem egyik alapköve.

Ezek alkalmazása ugyan nem váltja ki a sebezhetőségek javítását, vagy a helyes alkalmazáslogikát, de érdemben csökkentik a támadások gyakorlati kihasználhatóságát.

Egy webalkalmazás biztonsági érettsége gyakran az ilyen „apró” konfigurációs döntéseken mérhető le. Nem szabad elfelejtenünk, hogy a cookie-attribútumok helyes alkalmazása nem extra védelem, hanem az a minimum, amelynek hiánya ma már szakmailag nehezen védhető.