Stessa politica di origine - Risposta XHR

6

So che lo stesso criterio di origine (SOP) impedisce a una pagina / script da un'origine di leggere la risposta da un'altra origine, ma non impedisce alla pagina / allo script di creare una XMLHttpRequest (XHR) richiesta a un'origine diversa Da sito per sviluppatori di Mozilla :

  • Cross-origin writes are typically allowed. Examples are links, redirects and form submissions. Certain rarely used HTTP requests require preflight.
  • Cross-origin reads are typically not allowed, but read access is often leaked by embedding. For example you can read the width and height of an embedded image, the actions of an embedded script, or the availability of an embedded resource.

La mia domanda: se impedisce solo a page / script di leggere la risposta da un'altra origine, non possiamo semplicemente usare un listener proxy come Burp o uno sniffer come wireshark per catturare la risposta prima che raggiunga anche il browser (dove SOP è implementato)? Perché il server risponde anche a tali richieste da un'altra origine? Non dovrebbero rispondere solo quando la condivisione delle risorse di origine incrociata (CORS) è abilitata su di loro?

    
posta NeverStopLearning 24.04.2015 - 02:17
fonte

3 risposte

4

If it only prevents page/script from reading the response from another origin, can't we just use a proxy listener like Burp or a sniffer like wireshark to capture the response before it even reaches the browser (where SOP is implemented)?

Questi sono due diversi tipi di attacco. Prevenire letture da un'altra origine impedisce al sito di un utente malintenzionato ( evil.example.com ) che l'utente ha visitato di effettuare una richiesta XHR al sito a cui l'utente ha effettuato l'accesso ( webmail.example.com ) e ottenere i dati. In questo caso, impedisce ad altri siti Web di leggere i messaggi e-mail dell'utente.

Se è possibile configurare il computer dell'utente per l'utilizzo di un proxy di intercettazione o se è possibile posizionare Wireshark in ascolto sulla modalità promiscua sulla rete dell'utente, è probabile che come utente malintenzionato non sia necessaria una richiesta XHR per più domini: è possibile basta osservare il traffico normale. Un'eccezione a questo è nel caso di attacchi come POODLE . Ad esempio, se si può ascoltare il traffico sulla rete, ma la connessione dell'utente viene effettuata sul sito Web tramite SSL, potrebbe essere necessario iniettare il traffico XHR come MITM per decrittografare un byte alla volta tramite il vettore di attacco POODLE.

La stessa politica di origine non aiuta qui, ma se non esistesse non ci sarebbe bisogno dell'attacco MITM e del vettore di POODLE. La stessa politica di origine difende da alcuni attacchi basati sul Web che sarebbero altrimenti possibili, niente di più.

Why does the server even respond to such requests from another origin? Shouldn't they only respond when Cross-origin resource sharing (CORS) is enabled on them?

Sì, sarebbe molto più sicuro se i server rispondessero solo alle richieste delle proprie origini. Tuttavia, questo romperebbe la maggior parte di Internet se fosse implementato come standard nelle nuove versioni dei server web. Sarebbe anche possibile creare un browser che non ha effettuato richieste di origine incrociata. Nessuno lo userà perché non funzionerà su molti siti.

In realtà puoi disabilitare i cookie di terze parti nella maggior parte dei browser. Questo in effetti renderebbe anonime le richieste AJAX di origine incrociata, in quanto nessun cookie sarebbe mai stato inviato. Sicuramente Chrome impedirà l'impostazione o la lettura dei cookie, altri browser potrebbero limitare l'impostazione di tali cookie. Ovviamente se viene utilizzato un altro metodo di autenticazione, come l'autenticazione HTTP di base, non può aiutarti qui. Tuttavia, se lo provi, per la maggior parte sarai in grado di vedere quale funzionalità si interrompe.

Why does the server even respond to such requests from another origin?

L'intestazione del browser Origin non viene letta fino a quando le intestazioni non vengono analizzate e, a quel punto, il browser ha già inviato cookie: qualsiasi restrizione sull'origine incrociata potrebbe essere implementata meglio a livello di browser perché un server Web non sarà in grado di bloccare il richiesta prima che venga inviata.

Consentire richieste di origine incrociata è il modo in cui le cose hanno funzionato storicamente e la sicurezza deve essere bilanciata con la compatibilità. CORS è stato progettato in modo tale che se il server non sceglie CORS, il livello di sicurezza è lo stesso che usare un browser pre-CORS. Prima di CORS era possibile per i siti effettuare richieste ad altri domini tramite script, ed è lo stesso ora. Se ci pensate dal punto di vista del server, una richiesta XHR GET equivale a includere un'immagine proveniente da un altro dominio usando un tag <img /> . Una richiesta POST XHR equivale a creare un modulo che invia a un altro dominio.

Potresti configurare il tuo server per bloccare queste richieste (ad esempio usando l'intestazione Origin), e questo è in realtà un modo valido per prevenire gli attacchi CSRF . Tuttavia, ciò dovrebbe essere fatto caso per caso, e va tenuto presente che la presenza di questa intestazione può variare tra browser e versioni (ad esempio, nessun supporto browser più vecchio).

Nota che questo non sarebbe di aiuto nel tuo esempio, dato che un MITM potrebbe, nella maggior parte dei casi, semplicemente falsificare l'origine.

Shouldn't they only respond when Cross-origin resource sharing (CORS) is enabled on them?

Tutti i problemi relativi alle richieste di origine incrociata sono stati risolti in qualche modo, ad esempio i browser che seguono lo stesso criterio di origine e i siti Web che utilizzano token per impedire CSRF. Questo è il Web - non sicuro per impostazione predefinita. Se un sito Web è stato sviluppato pensando alla sicurezza, questi problemi possono essere superati.

    
risposta data 24.04.2015 - 09:23
fonte
1

Why does the server even respond to such requests from another origin? Shouldn't they only respond when Cross-origin resource sharing (CORS) is enabled on them?

Per il server un CORS XHR e una richiesta cross-site attivata includendo la risorsa (cioè <img src= , <script src= ) o una risorsa a cui accede un link ( <a href= ) sembrano tutti simili e non possono essere attendibili distinto. Ciò è dovuto all'architettura esistente del Web e non è possibile aspettarsi che tutti i server cambino comportamento solo perché alcune applicazioni Web utilizzano CORS XHR.

Di solito non è un problema se una risorsa è accessibile in questo modo. L'unico vero problema è se puoi ingannare l'utente e il suo browser per accedere a un sito con XHR mentre sei loggato in questo sito (cioè il browser invia il cookie di sessione), perché allora potresti usare XHR per estrarre informazioni sensibili e inoltrarle al attaccante. Quindi la protezione viene aggiunta dove inizia il problema: il browser invia il cookie di sessione al sito esterno su tutte le richieste e quindi il browser deve assicurarsi che la stessa politica di origine possa essere indebolita (cioè letto da un sito esterno) se il sito esterno è esplicitamente d'accordo, cioè è consapevole che questa richiesta è di origine incrociata e controllata e ha permesso questa origine.

Le regole CORH XHR non vedono l'utente del browser come il potenziale aggressore, poiché questo utente può comunque accedere alla risorsa. Invece vede alcuni aggressori esterni come il problema, che tenta di estrarre informazioni da un sito in cui l'utente è loggato. Questo è in un modo simile a CSRF, ma CSRF è solo per l'attivazione di azioni e non la lettura dei risultati. Pertanto, non importa se l'utente stesso ha installato una soluzione MITM per osservare il traffico. Se l'utente malintenzionato fosse in grado di installare tale cosa, sarebbe davvero un pericolo, ma in questo caso l'hacker non avrebbe bisogno di XHR perché gli include classici ( <img src= ecc) sarebbero già sufficienti per attivare l'accesso alla risorsa. Pertanto questo vettore di attacco non deve essere considerato specificamente per CORS XHR.

    
risposta data 24.04.2015 - 07:21
fonte
0

can't we just use a proxy listener like Burp or a sniffer like wireshark to capture the response before it even reaches the browser

In primo luogo, un attacco CSRF (Cross-site request forgery) sicuramente non presuppone né implica che l'attaccante possa intercettare (MITM) la connessione di rete. Se riesci a man-in-the-middle (MITM) la tua vittima, allora un attacco CSRF è quasi ridondante perché potresti semplicemente osservare i dati di autenticazione (ad esempio i cookie di sessione) e accedere da solo, nel migliore dei casi un CSRF potrebbe essere utile nel causarli per esporre i propri dati di autenticazione senza dover attendere che visitino il sito di destinazione. In generale però, se hai la capacità di MITM della vittima, hai a disposizione più vettori di attacco più efficaci di un normale CSRF.

In secondo luogo, anche se si potesse MITM la tua vittima ed è stato utile osservare la risposta di una richiesta che altrimenti sarebbe stata prevenuta da SOP, gli obiettivi più preziosi avrebbero utilizzato SSL / TLS. Ciò impedirà di essere in grado di osservare la risposta e, se sei in grado di compromettere SSL / TLS (ad esempio installando un certificato CA dannoso sul proprio computer), probabilmente disponi anche di migliori vettori di attacco.

Why does the server even respond to such requests from another origin?

Non è responsabilità del server Web imporre l'applicazione di SOP e ha davvero senso solo nel contesto di un browser web. Un browser web può essere sicuro di quale pagina sta effettuando la richiesta, ma un server non ha idea di quale pagina stia effettuando la richiesta oltre all'intestazione del referrer e non ci sono garanzie sull'integrità di quei dati.

Per quanto riguarda il motivo per cui un browser consente di effettuare la richiesta in primo luogo, presumo sia perché il browser non può valutare Access-Control-Allow-Origin finché non riceve la risposta.

    
risposta data 24.04.2015 - 02:36
fonte

Leggi altre domande sui tag