FixVibe
Covered by FixVibehigh

CSRF apsauga: apsauga nuo neteisėtų būsenos pakeitimų

Kelių svetainių užklausų klastojimas (CSRF) išlieka didelė grėsmė žiniatinklio programoms. Šiame tyrime nagrinėjama, kaip šiuolaikinės sistemos, tokios kaip „Django“, įgyvendina apsaugą ir kaip naršyklės lygio atributai, pvz., „SameSite“, užtikrina nuodugnią apsaugą nuo neteisėtų užklausų.

CWE-352

Poveikis

Kelių svetainių užklausų klastojimas (CSRF) leidžia užpuolikui apgauti aukos naršyklę, kad ji atliktų nepageidaujamus veiksmus kitoje svetainėje, kurioje šiuo metu auka yra autentifikuota. Kadangi naršyklės į užklausas automatiškai įtraukia aplinkos kredencialus, pvz., slapukus, užpuolikas gali suklastoti būsenos keitimo operacijas, pvz., pakeisti slaptažodžius, ištrinti duomenis ar inicijuoti operacijas, be vartotojo žinios.

Pagrindinė priežastis

Pagrindinė CSRF priežastis yra numatytasis žiniatinklio naršyklės elgesys siunčiant slapukus, susietus su domenu, kai tik tam domenui pateikiama užklausa, neatsižvelgiant į užklausos kilmę. [S1]. Neturint konkretaus patvirtinimo, kad užklausa buvo tyčia suaktyvinta iš pačios programos vartotojo sąsajos, serveris negali atskirti teisėto vartotojo veiksmo ir suklastoto.

Django CSRF apsaugos mechanizmai

„Django“ teikia integruotą gynybos sistemą, kuri sumažina šią riziką, integruojant tarpinę programinę įrangą ir šabloną [S2].

Tarpinės programinės įrangos aktyvinimas

django.middleware.csrf.CsrfViewMiddleware yra atsakingas už CSRF apsaugą ir paprastai yra įjungtas pagal numatytuosius nustatymus [S2]. Jis turi būti išdėstytas prieš bet kokią peržiūros tarpinę programinę įrangą, kuri daro prielaidą, kad CSRF atakos jau buvo apdorotos [S2].

Šablono įgyvendinimas

Naudodami visas vidines POST formas, kūrėjai turi įtraukti žymą {% csrf_token %} į <form> elementą [S2]. Taip užtikrinama, kad į užklausą būtų įtrauktas unikalus slaptas prieigos raktas, kurį serveris patvirtina pagal vartotojo seansą.

Ženklų nutekėjimo rizika

Svarbi diegimo detalė yra ta, kad {% csrf_token %} niekada neturėtų būti įtraukta į formas, taikomas pagal išorinius URL [S2]. Tai padarius slaptas CSRF prieigos raktas būtų nutekėjęs trečiajai šaliai, o tai gali pakenkti vartotojo seanso saugumui [S2].

Naršyklės lygio apsauga: „SameSite“ slapukai

Šiuolaikinės naršyklės pristatė atributą SameSite, skirtą Set-Cookie antraštei, kad suteiktų gilios apsaugos [S1] sluoksnį. – Griežtas: slapukas siunčiamas tik pirmosios šalies kontekste, o tai reiškia, kad svetainė URL juostoje atitinka slapuko domeną [S1]. – Lax: slapukas nesiunčiamas gavus papildomų užklausų keliose svetainėse (pvz., vaizdų ar rėmelių), bet siunčiamas vartotojui naršant į pradinę svetainę, pvz., naudojant standartinę nuorodą [S1].

Kaip FixVibe tai tikrina

FixVibe dabar apima CSRF apsaugą kaip uždarą aktyvų patikrinimą. Patikrinęs domeną, active.csrf-protection tikrina aptiktas būsenos keitimo formas, patikrina, ar nėra CSRF žetono formos įvesties ir SameSite slapukų signalų, tada bando pateikti nedidelį poveikį suklastotą kilmę ir praneša tik tada, kai serveris jį priima. Slapukų patikrinimai taip pat pažymi silpnus „SameSite“ atributus, kurie sumažina CSRF apsaugą.