Perché non fidarsi di ciò che si copia e incolla dalle pagine web

Accantonate wget e curl, i client SOAP e WSDL, i server WebDAV, le API REST e i callback JSON; quando si tratta di trasferire dati dai siti web al vostro computer, quella roba appiccicosa che unge gli ingranaggi è copia e incolla .

Questo lato dei guanti aptici, Ctrl+C e Ctrl+V è quanto di più vicino possiamo immaginare per raggiungere e afferrare qualcosa dal web. È la cyber-presa che cyber-impari nella tua cyber-infanzia e mai cyber-dimentichi perché la cyber-ripeti all’infinito.

La ripetizione c’insegna che ciò che entra nella nostra mano quando Ctrl+C (afferriamo qualcosa), esce dalla nostra mano quando Ctrl+V (rilasciamo).

Ma cosa succede se non accade?

E se allunghi la mano per afferrare una mela e quando la apri trovi una pera? O un piranha?

Pastejacking con JavaScript

JavaScript è un linguaggio di programmazione che può essere integrato nelle pagine web HTML e, forse più di ogni altra tecnologia, è quello che ha trasformato la rete da una raccolta di documenti da poter leggere in un insieme di applicazioni da poter utilizzare.

Non può uscire dal browser e mettere cose nel computer, ma entro i confini della modalità sandbox di una pagina web, può accedere a tutte le potenti funzionalità che rendono possibile qualsiasi cosa: da Nyan Cat a Gmail (e, quando siete completamente nyanizzati Chrome Experiments.)

Con il vostro permesso può attivare notifiche push e geolocalizzazione e senza il vostro permesso JavaScript è in grado di memorizzare megabyte di dati nella cache del browser, aprire finestre, spostare oggetti all’interno della pagina, disegnare oggetti sui canvas virtuali, memorizzare i tasti premuti e tracciare il mouse.

E, grazie a una funzione chiamata execCommand('copy'), è anche possibile incollare i cyber-pirhana negli appunti.

Un’ottima dimostrazione di come farlo e perché sia una cattiva idea è stata messa insieme dall’hacker Dylan Ayrey su Github e sul suo sito personale security.love .

Nella demo gli utenti sono invitati a copiare il testo echo "not evil" e ad assistere con orrore che ciò che realmente incollano è il crudelmente diverso echo "evil"\n.

Il comando execCommand('copy') che esegue questa magia deve avere un trigger, noto come ‘evento’ per essere eseguito, in modo che il codice di Ayrey utilizzi l’evento keydown che viene attivato quando si utilizza la scorciatoia da tastiera Ctrl+C. Il codice attende quindi 0,8 secondi e passa il testo alla clipboard.

I frammenti di testo nell’esempio non sono solo parole ma comandi veri e propri che possono essere eseguiti all’interno di una finestra di terminale (quella misteriosa, monotona finestra nera con testo bianco che i ‘power user’ non vedono mai e i veri geek utilizzano per completare il lavoro).

L’\n alla fine di echo "evil"\n è un ritorno a capo e se si digita un ritorno a capo in una finestra di terminale verrà eseguito immediatamente il comando precedente.

In altre parole Ayrey vi ha offerto qualcosa che non verrà eseguito fino a quando non gli si dice di farlo, per poi sostituirlo, alle vostre spalle, con qualcos’altro che verrà eseguito non appena s’incolla.

Fortunatamente per coloro che utilizzano l’esempio di Ayrey si tratta di un comando benigno che vien semplicemente eseguito ma ovviamente non si deve farlo: l’autore di un attacco potrebbe altrettanto facilmente farvi pensare che stiate copiando qualcosa di sicuro e sostituirlo con un comando che cancella l’home directory e ruba il file delle password.

Pastejacking con CSS

Se si disattiva completamente Javascript, o si utilizza un componente aggiuntivo del browser come NoScript che consente di scegliere quando eseguire Javascript, si sarà immuni dal pastejacking di Ayrey; ma c’è un altro modo per trafugare comandi negli appunti che non si affida a JavaScript.

HTML è il linguaggio con il quale sono scritte le pagine web ma è CSS (Cascading Style Sheets) che determina come si presentano.

È CSS che riorganizza le pagine affinché si adattino a tutto: dai cellulari agli schermi cinematografici, ridimensiona il testo, aggiunge colonne, aggiunge il colore, arrotonda i bordi, dispone loghi e fornisce la spaziatura che i designer amano aggiungere e che i clienti amano chiedere ai designer di rimuovere.

Può anche essere usato per disporre oggetti sulla pagina o, meglio ancora per i molesti pastejacker, al di fuori della pagina dove non si possa vedere.

L’hacker Jann Horn ha un demo che mostra proprio questa tecnica sul suo sito thejh.net.

Nell’esempio di Horn, ciò che sembra essere un comando per copiare un repository git source:

git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

…in realtà è un comando molto più lungo che sì copia un repository git source, ma non prima di aver scritto un avvertimento personalizzato nella prima riga del file delle password.

git clone /dev/null; clear; echo -n "Hello ";whoami|tr -d '\n';echo -e '!\nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust!
Here'"'"'s the first line of your /etc/passwd: ';head -n1 /etc/passwd
git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

In sordina, nel codice della pagina, tutto il testo è là, come lo si vede sopra; ma Horn ha utilizzato CSS per mostrare la robaccia a metà dei 100 pixel in alto a sinistra della pagina, dove non è visibile.

Non fidatevi del taglia e incolla dalle pagine web

Per programmatori, sviluppatori, amministratori, hacker e geek di tutti i gusti il web è lo strumento di apprendimento più utile che si possa immaginare. Gli esempi di codice sono ovunque sul web, pronti per essere decifrati, discussi, messi in discussione, vagliati, esaminati e, soprattutto, copiati, incollati ed eseguiti.

Purtroppo, grazie a CSS, non si sa, necessariamente, cosa si stia copiando e, grazie a Javascript, necessariamente, non si sa cosa ci sia negli appunti.

Ci sono terminali che vi avviseranno se state incollando qualcosa che termina con un ritorno a capo e ci sono browser, come Lynx o Mosaic, che possono isolarvi dalla modernità del CSS e Javascript. La miglior difesa, però, è quella che chiunque con la conoscenza e l’inclinazione a copiare e incollare comandi in un terminale dovrebbe già avere impresso nella memoria: non ci si può fidare dell’input dell’utente

Suggerisco di non affidarvi a strumenti di terze parti per salvarvi: date per scontato che tutto sia ostile fino a quando non lo abbiate controllato, o dimostrato che sia OK

Il modo più semplice per farlo è quello d’incollare qualsiasi cosa copiate da una pagina web in qualcosa che non possa eseguire comandi, come Blocco note o TextEdit ed esaminarlo.

Poi copiatelo di nuovo e incollatelo dove lo volete veramente.

(Il post è stato tradotto in italiano grazie all’esplicita autorizzazione di Naked Security )

Fonte: Why you can’t trust things you copy and paste from web pages

Written by admin

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *