Sono a conoscenza del fatto che la scoperta riportata dal team di sicurezza è valida. Consente di analizzare lo scenario che probabilmente hanno segnalato poiché anch'io l'ho visto nelle valutazioni delle applicazioni manuali.
Scenario 1:
Prendiamo ad esempio la pagina di accesso di un'applicazione o, meglio ancora, un modulo di richiesta della carta di credito. Dopo che tutti i campi del modulo sono stati compilati e si è fatto clic sul pulsante "Invia", il client invia i dati sensibili in una richiesta POST al server. Se la risposta del server è "200 OK", il browser manterrà i dati POST nella memoria del browser consentendo attacchi di riproduzione. Come indicato in una precedente risposta, si potrebbe premere il pulsante "indietro", quindi "Avanti", quindi "Aggiorna", in cui il browser rinvia nuovamente i dati sensibili POST. Spesso riceverai un messaggio pop-up dal tuo browser che ti informa che sta per inviare nuovamente i dati precedentemente inviati.
Scenario 2:
Gli stessi dati vengono inviati tramite una richiesta POST al server. Questa volta, il server risponde con un codice di stato di 300 tipi, probabilmente un reindirizzamento 302 che invia il client a qualunque sia la pagina successiva. Tuttavia, il browser client che ha ricevuto una risposta di tipo 300 NON conserva o memorizza nella cache i dati POST nella memoria del browser. NON È POSSIBILE ripetere il retro, inoltrare, aggiornare l'esperimento e sperare di vedere ripetuti i dati POST precedenti. Tutto dipende dalla risposta del server.
Puoi testarlo da solo se hai accesso a un proxy locale come Burp.
Imposta il browser in modo che punti al tuo proxy. Accedi alla pagina Web vulnerabile.
Compila i campi, premi Invia e guarda la richiesta inviata nel tuo strumento proxy. Dovresti vedere i vari campi del modulo contenenti dati sensibili nella sezione dati della richiesta POST. Supponendo che la risposta del server fosse un passaggio "200 OK" al passaggio successivo. Sul browser, premi il pulsante Indietro, quindi avanti, quindi aggiorna. Dovresti ricevere il messaggio popup dal tuo browser che ti avvisa che sta per inviare nuovamente i dati inviati in precedenza. Hit OK. Ora guarda l'ultima richiesta nel tuo strumento proxy. Avrà risentito la richiesta POST e gli stessi dati sensibili di prima. ORA, prova questo stesso esperimento su un sito Web che restituisce 302 reindirizzamenti ai dati POST. NON sarai in grado di ottenere il browser per riprodurre i dati pubblicati.
Quindi, qual è il rischio o la minaccia che potresti chiedere? Innanzitutto sono gli attacchi di replay.
La tua più grande preoccupazione dovrebbe essere il malware. Il tuo secondo più grande vettore di minacce sarebbe un dispositivo condiviso. La preoccupazione è che sia il malware che una persona con accesso al dispositivo possano "riprodurre" la richiesta e quindi essere in grado di vedere i dati sensibili inviati nella richiesta POST. Il malware leggerà i dati direttamente dalla memoria del browser. Una persona dovrebbe usare uno strumento per vedere di nuovo la richiesta POST.
*** Alcuni avvertimenti:
* L'utilizzo di Autocomplete = off impedisce solo l'archiviazione dei dati nei contenitori di archiviazione dei campi modulo. È indipendente e non ha alcuna relazione con questo problema. Suggerirei comunque di garantire che tutti i campi modulo che accettano informazioni sensibili debbano avere il completamento automatico impostato su "off". Il malware spesso cerca e legge i dati dei campi dei moduli salvati in quanto solitamente contiene informazioni succose.
** L'uso di intestazioni di controllo della cache non ha alcuna rilevanza in questo problema, come per le pagine che sono memorizzate nella cache del disco (directory Internet temporanee). Ancora una volta, dovresti utilizzare le direttive di controllo della cache e impedire che i dati riservati vengano archiviati in chiaro sul tuo sistema.
*** Risposta "200 OK" sui dati POST in una richiesta JSON è un non-problema. È l'unico scenario fuori dalla mia testa che posso pensare a dove non è possibile eseguire l'attacco di replay quando il server risponde con un '200 OK'.
Spero che questo aiuti. Sono sicuro che non è elencato come una vulnerabilità di alto livello a causa delle limitazioni del vettore di attacco. Comunque, è solo uno degli innumerevoli strati della sicurezza!