header Origin personalizzato per bypassare la protezione CORS contro CSRF

3

CORS (condivisione dell'origine cross-source) può essere usato per proteggere le webapp da CSRF, prima di accettare una richiesta, il server verifica che l'host specificato nell'intestazione Origin sia tra gli host consentiti in CORS Intestazione Access-Control-Allow-Origin .

in caso affermativo, quindi possiamo ignorare la protezione CORS impostando un'intestazione Origin personalizzata nell'exploit CSRF? esempio:

<?php
header('Origin: www.already-allowed-website.net');
/* the rest of a simple POST CSRF exploit... */
?>
    
posta Reda LM 13.09.2017 - 16:42
fonte

2 risposte

2

No, perché stai aggiungendo un'intestazione a una risposta, non a una richiesta: quando carichi la tua pagina CSRF, il tuo browser vedrebbe una risposta che è qualcosa di simile a:

HTTP/1.1 200 OK
Date: Mon, 11 Sep 2017 09:42:49 GMT
Connection: close
Origin: www.already-allowed-website.net

... web page content ...

L'intestazione "Origin" non ha alcun senso in questo contesto, ma puoi aggiungerla tramite PHP o altri linguaggi sul lato server, se lo desideri.

Quindi il browser costruirà il carico utile CSRF effettivo (ricordando che il "CS" sta per "Lato client"), e invia una richiesta con qualsiasi intestazione di origine che il browser volesse impostare, si spera che ignori qualsiasi tentativo di ignorarlo.

C'è un elenco di quali intestazioni è possibile impostare nelle richieste XHR al link

    
risposta data 13.09.2017 - 17:01
fonte
3

Non ha importanza quale intestazione di origine hai impostato nella risposta dal server al browser come nel tuo esempio con codice PHP lato server. Il browser non si interessa di questa intestazione.

Rilevante per CORS è solo l'intestazione Origin inviata dal browser al server. Se si fosse in grado di simulare questo all'interno del browser, si potrebbe ignorare la protezione. Ma, Origin è una delle intestazioni che non può essere modificata all'interno di XHR o richieste simili, quindi un tale bypass non dovrebbe essere possibile.

    
risposta data 13.09.2017 - 16:57
fonte

Leggi altre domande sui tag