L'autoiniezione JavaScript è pericolosa?

5

Ho un'applicazione web giocattolo che può essere descritta approssimativamente come un archivio di valori-chiave per utente. Dopo aver effettuato l'accesso, l'utente può visualizzare e modificare il suo insieme di coppie chiave-valore. Le chiavi e i valori sono memorizzati in un database sul server. Le chiavi o i valori non sono condivisi tra gli utenti in alcun modo.

Ho appena scoperto che il codice JavaScript incluso nelle chiavi o nei valori non era stato correttamente scappato. Quindi, se un utente ha aggiunto una chiave foo con un valore di bar <script>alert(1)</script> , lo script verrebbe eseguito nel browser dell'utente.

Ovviamente l'ho risolto non appena l'ho notato. Ma mi è stato chiesto: Questo può essere sfruttato per fare qualcosa di dannoso? Ricorda che le coppie chiave-valore vengono SOLO mostrate all'utente che le ha create.

(L'unico scenario che mi viene in mente è piuttosto esagerato: un utente malintenzionato convince l'utente a navigare verso la mia applicazione Web e quindi a fare clic su un bookmarklet canaglia. Il bookmarklet salva una coppia chiave-valore con uno script che ruba il coppie di valori-chiave dell'utente. Poiché questo è persistente nel database, le coppie valore-chiave verranno inviate all'avversario ogni volta che l'utente carica la pagina, ma con un bookmarklet canaglia è comunque possibile fare quasi tutto ...)

    
posta cberzan 08.11.2012 - 18:19
fonte

4 risposte

7

Potrebbero esserci alcuni potenziali per un attacco CSRF, in cui un utente malintenzionato salva una coppia di valori chiave per conto degli utenti. Quindi il JS eseguibile nella coppia di valori chiave potrebbe essere utilizzato per eseguire l'attacco XSS del mulino per rubare i loro cookie e potenzialmente consentire all'utente malintenzionato di accedere all'applicazione come vittima.

Sono d'accordo con il commento di Jimmy. Se c'è qualche possibilità di scrub correttamente l'input dell'utente, quella sarebbe sicuramente la mia prima priorità.

    
risposta data 08.11.2012 - 19:41
fonte
4

È difficile dire senza guardare la tua app in dettaglio, ma sì, c'è un potenziale per gli attacchi qui. Se esiste un modo in cui una coppia chiave-valore potrebbe essere memorizzata nel profilo di un utente, dove il valore è parzialmente o completamente controllato da qualcun altro, questo potrebbe portare a un attacco XSS.

Esempio: Supponiamo che ci sia un modo per inviare a un utente un messaggio istantaneo, e il messaggio viene automaticamente salvato nell'archivio dei valori-chiave del destinatario (o forse c'è un pulsante che l'utente può premere per salvarlo). Allora hai problemi.

Se la tua app ha molte funzionalità, ci sono molti modi in cui i dati non fidati potrebbero finire per essere memorizzati nell'archivio dei valori-chiave. Pertanto, suggerirei di correggere questa vulnerabilità. Un modo standard per risolvere questo problema è sfuggire il valore prima di inserirlo nel documento HTML.

    
risposta data 08.11.2012 - 19:46
fonte
0

Se un account utente viene compromesso, un utente malintenzionato potrebbe archiviare una chiave con javascript dannoso se lo desidera.

Questo sarebbe il più grande pericolo che vedo.

    
risposta data 08.11.2012 - 18:58
fonte
0

Come D.W. dice che è difficile dirlo senza conoscere l'applicazione. Se tu fossi al 110% sicuro che il valore della chiave non verrebbe mai mostrato a nessun altro utente che all'utente che lo ha messo lì, allora non vedo alcun pericolo ma quel dosatore compensa il fatto che è aperto per XSS. Devi sempre sistemare queste cose - le applicazioni si evolvono e un giorno il valore chiave diventa improvvisamente aperto ad altri utenti e poi hai problemi:)

    
risposta data 09.11.2012 - 11:41
fonte

Leggi altre domande sui tag