FixVibe
Covered by FixVibehigh

Ochrana CSRF: Obrana proti neoprávněným změnám stavu

Cross-Site Request Forgery (CSRF) zůstává významnou hrozbou pro webové aplikace. Tento výzkum zkoumá, jak moderní rámce, jako je Django, implementují ochranu a jak atributy na úrovni prohlížeče, jako je SameSite, poskytují hloubkovou ochranu proti neoprávněným požadavkům.

CWE-352

Dopad

Cross-Site Request Forgery (CSRF) umožňuje útočníkovi přimět prohlížeč oběti k provedení nechtěných akcí na jiném webu, kde je oběť aktuálně ověřena. Vzhledem k tomu, že prohlížeče automaticky zahrnují okolní přihlašovací údaje, jako jsou soubory cookie, do požadavků, útočník může vytvořit operace měnící stav – jako je změna hesel, mazání dat nebo zahájení transakcí – bez vědomí uživatele.

Hlavní příčina

Základní příčinou CSRF je výchozí chování webového prohlížeče při odesílání souborů cookie spojených s doménou, kdykoli je do této domény podán požadavek, bez ohledu na původ požadavku [S1]. Bez specifického ověření, že požadavek byl záměrně spuštěn z vlastního uživatelského rozhraní aplikace, server nemůže rozlišit mezi legitimní akcí uživatele a falešnou akcí.

Ochranné mechanismy Django CSRF

Django poskytuje vestavěný obranný systém ke zmírnění těchto rizik prostřednictvím integrace middlewaru a šablon [S2].

Aktivace middlewaru

django.middleware.csrf.CsrfViewMiddleware zodpovídá za ochranu CSRF a je obvykle ve výchozím nastavení povoleno [S2]. Musí být umístěn před jakýmkoli zobrazením middlewaru, který předpokládá, že útoky CSRF již byly zpracovány [S2].

Implementace šablony

U všech interních formulářů POST musí vývojáři zahrnout značku {% csrf_token %} do prvku <form> [S2]. Tím je zajištěno, že v požadavku bude zahrnut jedinečný tajný token, který pak server ověří proti relaci uživatele.

Rizika úniku tokenů

Důležitým detailem implementace je, že {% csrf_token %} by nikdy neměl být zahrnut do formulářů cílených na externí adresy URL [S2]. V opačném případě by došlo k úniku tajného tokenu CSRF třetí straně, což by mohlo ohrozit zabezpečení relace uživatele [S2].

Moderní prohlížeče zavedly atribut SameSite pro záhlaví Set-Cookie, aby poskytly vrstvu ochrany do hloubky [S1].

  • Přísné: Soubor cookie se odesílá pouze v kontextu první strany, což znamená, že web v řádku adresy URL odpovídá doméně souboru cookie [S1].
  • Lax: Soubor cookie se neodesílá na dílčí požadavky mezi weby (jako jsou obrázky nebo snímky), ale je odeslán, když uživatel přejde na původní web, například pomocí standardního odkazu [S1].

Jak to testuje FixVibe

FixVibe nyní obsahuje ochranu CSRF jako hradlovanou aktivní kontrolu. Po ověření domény active.csrf-protection zkontroluje objevené formuláře měnící stav, zkontroluje vstupy ve tvaru tokenu CSRF a signály cookie SameSite, poté se pokusí o odeslání falešného původu s nízkým dopadem a oznámí pouze, když to server přijme. Kontroly souborů cookie také označují slabé atributy SameSite, které snižují hloubkovou ochranu CSRF.