Perché l'output non richiesto da una richiesta jax è errato?

1

So che quello che ho appena descritto è una vulnerabilità XSS riflessa. Quello che non riesco a capire è perché è una vulnerabilità. Perché il modo in cui lo vedo, un utente non può essere indirizzato al contenuto dell'attaccante perché l'AJAX viene eseguito senza un aggiornamento della pagina o una modifica dell'URL. Cosa mi manca qui?

- MODIFICA -

Per modificare la domanda e fornire un po 'più di contesto, sto cercando di capire come l'eco dei dati non sanificati da AJAX nella pagina sarebbe una brutta cosa. Perché ecco come vedo le vulnerabilità XSS:

  1. Il codice JavaScript di una fonte non controllata (ad esempio un utente malintenzionato) può inserire JavaScript nella pagina.

  2. L'utente è navigato verso la suddetta pagina con il male JavaScript incorporato nella pagina.

  3. Lo sfruttamento avviene (i cookie vengono rubati, gli accessi degli utenti su una schermata di accesso effettuata da un utente malintenzionato, ecc ...)

Non riesco a vedere come questo è un problema con AJAX. Poiché la richiesta viene effettuata nella pagina e tu (come l'utente malintenzionato) non puoi indirizzare un utente a una pagina in cui parte del contenuto è stata caricata con AJAX.

In altre parole, non è possibile eseguire una query di ricerca su un motore di ricerca che utilizza AJAX per interrogare un endpoint remoto e visualizzare i risultati sulla pagina, quindi indirizzare un utente a quella pagina con tali risultati visualizzati. I risultati scomparirebbero.

Cosa mi manca qui

    
posta Adam McGurk 26.07.2018 - 20:42
fonte

2 risposte

2

Il tuo primo punto ("JavaScript da una fonte incontrollata (ad esempio un utente malintenzionato) è autorizzato a inserire JavaScript nella pagina.") è un pochino disattivato. Se una pagina contiene già JavaScript di un utente malintenzionato, l'autore dell'attacco ha già vinto.

Una descrizione più accurata di un attacco XSS riflesso è:

  1. L'utente viene spostato su una pagina che accetta l'input dell'utente in modo tale che l'utente fornisca a malapena parte dell'input.
  2. JavaScript proveniente da una sorgente controllata (vale a dire lo sviluppatore di applicazioni Web) prende i dati dall'input dell'utente e li inserisce nella pagina.
  3. L'input dell'utente dal Passaggio 1 viene interpretato come JavaScript (i cookie vengono rubati, ecc.).

Per fornire un esempio di come potrebbe funzionare lo scenario, prendere in considerazione un'applicazione Web che consente agli utenti di aggiungere i risultati di ricerca ai segnalibri inserendo il termine di ricerca nella stringa di query: https://my-custom-search-engine.tld/search?term=reflected%20xss

Durante il caricamento della pagina /search , JavaScript nella pagina legge il parametro di query term e fa una richiesta AJAX. Dopo aver ricevuto la risposta, JavaScript nella pagina legge la parte del termine di ricerca dell'oggetto risposta e la inserisce nella pagina utilizzando un metodo vulnerabile. (Per altri metodi pericolosi, consulta la risposta di @dandavis per .html di jQuery o link .)

In questo esempio, un utente malintenzionato dovrebbe indurre un utente a visitare https://my-custom-search-engine.tld/search?term=<script>alert(1)</script> .

    
risposta data 01.08.2018 - 06:54
fonte
1

dipende da cosa fa l'app con il ritorno ajax. ad esempio, $(selector).html(ajaxContent) di jQuery chiamerà eval() (o un equivalente) sulle stringhe nella risposta tra <script> e </script> , in determinati tipi mime. Ovviamente, questo esegue codice arbitrario in grado di rubare i cookie, reindirizzare verso cattivi posti, tentare di scaricare malware da drive-by, lo chiami.

    
risposta data 26.07.2018 - 20:58
fonte

Leggi altre domande sui tag