Ho visto la risposta È possibile CSRF se non utilizzo nemmeno i cookie? , ma ci sono 2 risposte in conflitto e la domanda in sé non fornisce molte informazioni.
Sto creando un'API REST che verrà utilizzata da un client Web (di nostra creazione) in esecuzione su un altro dominio, pertanto eseguiremo richieste CORS. Questa API viene eseguita come server di risorse oauth2, pertanto l'accesso è limitato dai token di accesso che vengono passati nell'intestazione dell'autenticazione. Non abbiamo biscotti lì, tutto è senza stato. Sto seguendo il consiglio nell'articolo al link
- Useremo SSL
- Abbiamo pre-registrati reindirizzamenti uri
- Il nostro unico tipo di concessione è il codice di autorizzazione, senza richiedere un segreto client (poiché l'origine del client Web è pubblico) invece del tipo di concessione implicita, come da raccomandazioni su link
- Il client si autentica con un'intestazione quando effettua chiamate al server delle risorse effettive
- L'ottenimento del token di accesso viene effettuato passando il codice di autorizzazione 1 volta nei parametri del modulo (
x-www-form-urlencoded
), che sembra essere il modo normale, non dovrebbe rimanere bloccato nella cronologia del browser poiché non è un parametro di query. / li> - Il client utilizzerà anche alcuni parametri dello stato segreto quando ottiene il codice di autorizzazione. In questo caso non sono sicuro che ci sia un punto in quanto il client non dipende da un segreto per ottenere un token di accesso scambiando comunque un codice.
- Per l'endpoint oauth / token in cui si ottiene effettivamente un token di accesso, l'unica origine consentita è il dominio del nostro client Web
- Per l'endpoint oauth / authorize, CORS non è consentito. Forse questo è eccessivo dal momento che il reindirizzamento uri ricollegherebbe comunque solo al nostro dominio?
Penso che copra praticamente tutto da quella parte.
Ora c'è un altro possibile vettore di attacco nella forma del server di autenticazione oauth stesso, che dovrebbe essere SSO e ha sessioni ed è accessibile con l'autenticazione di base. Tuttavia, non sembrano esserci azioni che potresti intraprendere con un attacco csrf che sarebbe effettivamente utile. Potresti fare una richiesta a questi endpoint oauth ma dovresti essere in grado di leggere il risultato, che è impedito dalla configurazione di CORS e dal fatto che gli uri di reindirizzamento sono pre-registrati. Non c'è POST che tu possa fare lì per cambiare la tua password, resettare il tuo indirizzo e-mail eccetera, tutte quelle cose sono in realtà anche esposte come un server delle risorse.
Mi manca qualcosa? Come andresti a sondare le vulnerabilità qui?