Un sito web può fare una richiesta HTTP a "localhost"? Come si aggira la politica dei domini incrociati?

13

Ho trovato questo sito web che parla di come correggere una vulnerabilità di Redis sfruttando la stessa vulnerabilità.

Il sito web in questione ha un pulsante "patch me" e se hai un server Redis senza password in esecuzione sul tuo computer, lo patcherà.

In altre parole, il sito web stesso collega al Redis Server nel tuo computer ed esegue alcuni comandi.

Se osservi il codice del sito web che trovi, prevedibilmente, questo:

    var text = "the code to run";
    var bad = "EVAL "  + JSON.stringify(text) + " 0\r\n";
    var x = new XMLHttpRequest();
    x.open("POST", "http://localhost:6379");
    x.send(bad);

Con mia sorpresa, questo funziona!

Pensavo che la politica dei domini avrebbe impedito che questo funzionasse, ma non è così.

Perché funziona e come posso non essere paranoico sul fatto che ogni sito web in cui mi trovo stia leggendo l'intero contenuto del mio server Redis?

È perché è solo la scrittura, ma non la lettura? Tuttavia, qualsiasi sito web nel mondo potrebbe svuotare il mio server Redis locale / scrivere su qualsiasi altra cosa possa ascoltare una porta nella mia macchina senza autenticazione.

Mi manca qualcosa qui?

    
posta Daniel Magliola 19.06.2015 - 15:27
fonte

1 risposta

4

Per rispondere alla domanda: Sì, un sito Web può effettuare una richiesta HTTP a localhost. Non romperà i criteri di dominio incrociato, perché la richiesta non attraverserà i domini. Rimarrà locale. Un modo per evitare le politiche interdominio è quello di indurre la vittima di destinazione a effettuare autonomamente la richiesta HTTP. Quindi la richiesta non supera mai i domini.

Per aiutarti a comprendere il problema che hai descritto:

L'attacco non sta inviando alcun dato, né sta effettuando una connessione a nessun'altra posizione oltre alla macchina Redis locale. Non è il sito Web che si collega alla macchina Redis. È tu che si connette alla tua macchina Redis, eseguendo codice / script lato client che tu hai eseguito facendo clic sul link. Fondamentalmente: fai clic sul link > Link scaricato ed esegue codice - > il codice genera una richiesta http - > la richiesta http passa dalla tua macchina alla tua macchina.

La vulnerabilità del server Redis in questa situazione è il contraffatto della richiesta del sito. L'attaccante sfrutta l'autenticazione delle vittime (in questo caso, il proprietario del server) per eseguire l'attacco.

L'attaccante non ha il pieno controllo del processo. Si affidano al proprietario del server Redis per eseguire il codice. Solo il proprietario (o qualcun altro locale del server Redis) ha la visibilità (e forse il permesso e la relazione di fiducia) per accedere a 127.0.0.1 (Localhost)

Tutto ciò che il codice può fare è eseguire comandi che l'utente locale può eseguire, ma non è l'autore dell'attacco che li esegue, è il proprietario e quindi non vengono violati i criteri del dominio incrociato.

Le uniche persone interessate da link di questo tipo sarebbero le persone che eseguono i server Redis. Se non ne hai uno, il link non farà nulla. Inoltre, verrà eseguito solo sul server Redis locale. L'utente malintenzionato non può davvero scegliere da dove verrà l'exploit.

Cerca tra i falsi siti con richiesta di riscontro. link

    
risposta data 19.06.2015 - 16:03
fonte

Leggi altre domande sui tag