XSS

Che cos’è?

Il termine XSS si legge Cross Site Scripting¹ e denota una vulnerabilità che permette a terzi di alterare le funzionalità di un sito web.

Perché è rilevante?

Nell’usare un sito web ce ne fidiamo implicitamente, un sito web lecito ha tutti gli interessi (di mercato) ad onorare questa fiducia ma un sito web alterato con funzionalità malevoli può adottare comportamenti scorretti (e lo farà). Alcuni esempi:

  • Quando inseriamo nome utente e password ci aspettiamo che queste siano inviate solo al sito web in questione e gestite correttamente. Un sito web compromesso può inviarle a terzi per ricatti o furti di identità.
  • Quando facciamo un accredito dall’home-banking ci aspettiamo che l’importo e il destinatario siano quelli da noi indicati. Un sito web compromesso può accreditare una somma qualsiasi a terzi in modo invisibile.
  • Ogni sito ha dati sensibili salvati nei nostri computer (per esempio per riconoscere le nostre utenze), i programmi per la navigazione su internet impediscono ad un sito web di leggere i dati sensibili di un altro sito web ma non possono sapere se un sito web è compromesso o meno, dando quindi l’accesso ai dati sensibili alle funzionalità alterate (per esempio per rubarli).

Come mi difendo?

Sebbene vi siano accortezze in grado di individuare la maggior parte delle frodi che usano attacchi XSS, lo sforzo richiesto all’utente finale per un’adeguato utilizzo di queste ultime non è proporzionale ai benefici avuti in ritorno.
Come utilizzatore del sito, contatta il responsabile del sito e pretendi che prenda seriamente la vulnerabilità e chiedi di avere riscontro quando questa è stata sanata.
Come responsabile del sito, è tuo compito proteggere i tuoi utilizzatori. Mobilita il tuo parco tecnico (o amplialo) per sanare la situazione.

Cos’è tecnicamente?

Il mancato utilizzo di escape nell’output generato quando l’output è controllabile direttamente o indirettamente dall’esterno.
Cercare un dentro un sito tramite una barra di ricerca rimanda ad una pagina dove prima dei risultati sono ripetute le parole cercate, questo è un esempio di un output direttamente controllato dall’esterno.

Se un attacante controlla l’output può inserire codice arbitrario nella pagina vulnerabile, violando la fiducia dell’utente nel sito (definizione formale dell’attacco)

Come si rimedia?

Il CERT-AGID si augura che tu stia leggendo questa sezione solo per curiosità.
Utilizzare le corrette funzioni di escape in ogni porzione di output generato dinamicamente², un utilizzo obiquo di queste funzioni è molto semplice da implementare ed elimina il rischio XSS definitivamente.


¹ La X va intesa come una croce, è utilizzata al posto della C perchè l’acronimo CSS è ampiamente diffuso con significato totalmente differente.

² “Dinamicamente” ha il significato tecnico di conosciuto solo a runtime.