FixVibe
Covered by FixVibehigh

Protecció CSRF: defensar-se contra els canvis d'estat no autoritzats

La falsificació de sol·licituds entre llocs (CSRF) continua sent una amenaça important per a les aplicacions web. Aquesta investigació explora com els marcs moderns com Django implementen protecció i com els atributs a nivell de navegador com SameSite ofereixen una defensa en profunditat contra les sol·licituds no autoritzades.

CWE-352

Impacte

La falsificació de sol·licituds entre llocs (CSRF) permet a un atacant enganyar el navegador d'una víctima perquè realitzi accions no desitjades en un lloc web diferent on la víctima està autenticada actualment. Com que els navegadors inclouen automàticament credencials ambientals com les galetes a les sol·licituds, un atacant pot forjar operacions de canvi d'estat, com ara canviar contrasenyes, suprimir dades o iniciar transaccions, sense que l'usuari ho sàpiga.

Causa arrel

La causa fonamental de CSRF és el comportament predeterminat del navegador web d'enviar galetes associades a un domini sempre que es fa una sol·licitud a aquest domini, independentment de l'origen de la sol·licitud [S1]. Sense una validació específica que una sol·licitud s'ha activat intencionadament des de la interfície d'usuari de l'aplicació, el servidor no pot distingir entre una acció d'usuari legítima i una de falsificada.

Mecanismes de protecció de Django CSRF

Django proporciona un sistema de defensa integrat per mitigar aquests riscos mitjançant la integració de programari intermedi i plantilles [S2].

Activació de middleware

El django.middleware.csrf.CsrfViewMiddleware és responsable de la protecció CSRF i normalment està habilitat per defecte [S2]. S'ha de situar abans de qualsevol programari intermedi de visualització que assumeixi que els atacs CSRF ja s'han gestionat [S2].

Implementació de la plantilla

Per als formularis POST interns, els desenvolupadors han d'incloure l'etiqueta {% csrf_token %} dins de l'element <form> [S2]. Això garanteix que s'inclogui un testimoni únic i secret a la sol·licitud, que després el servidor valida contra la sessió de l'usuari.

Riscos de fuga de testimonis

Un detall crític de la implementació és que {% csrf_token %} no s'ha d'incloure mai als formularis orientats a URL externs [S2]. En fer-ho, es filtraria el testimoni CSRF secret a un tercer, cosa que podria comprometre la seguretat de la sessió de l'usuari [S2].

Defensa a nivell de navegador: galetes del mateix lloc

Els navegadors moderns han introduït l'atribut SameSite per a la capçalera Set-Cookie per proporcionar una capa de defensa en profunditat [S1].

  • Estricte: la galeta només s'envia en un context de primera part, és a dir, el lloc de la barra d'URL coincideix amb el domini de la galeta [S1].
  • Lax: La galeta no s'envia en subsol·licituds entre llocs (com ara imatges o marcs), sinó que s'envia quan un usuari navega al lloc d'origen, com ara seguint un enllaç estàndard [S1].

Com ho prova FixVibe

FixVibe ara inclou la protecció CSRF com a comprovació activa. Després de la verificació del domini, active.csrf-protection inspecciona els formularis de canvi d'estat descoberts, comprova si hi ha entrades en forma de testimoni CSRF i senyals de galetes de SameSite, després intenta enviar un origen falsificat de baix impacte i només informa quan el servidor ho accepta. Les comprovacions de galetes també marquen els atributs febles de SameSite que redueixen la defensa CSRF en profunditat.