Siti web: attenzione al “copia-incolla”

siti-web:-attenzione-al-“copia-incolla”

Perché non puoi fidarti delle cose che copi e incolli dai siti web? Scopriamolo insieme.

Metti via wget e curl, i tuoi “client” SOAP e WSDL, server WebDAV, API REST e callback JSON; quando si tratta di spostare i dati dai siti web al computer, il materiale appiccicoso che unge le ruote è il caro buon vecchio copia e incolla.

Questo lato dei “guanti tattili”, Ctrl+C e Ctrl+V è il più vicino possibile a raggiungere e afferrare qualcosa dal web. È il cyber-afferramento che impari nella tua cyber-infanzia e non dimentichi mai il cyber perché lo ripeti all’infinito.

La ripetizione ci insegna che ciò che entra nella nostra mano quando Ctrl+C (prendi) esce dalla nostra mano quando premiamo Ctrl+V (lascia).

Ma se non fosse così? E se allungassi la mano per prendere una mela ma quando aprissi la mano avessi una pera? O un piranha?

Incollare da siti con Javascript

Javascript è un linguaggio di programmazione che può essere incorporato in siti web HTML e, forse più di qualsiasi altra tecnologia, è ciò che ha trasformato il web da una raccolta di documenti che puoi leggere in una raccolta di applicazioni che puoi utilizzare.

Non può uscire dal tuo browser e mettere cose sul tuo computer, ma all’interno dei confini di una pagina web può accedere a tutti i tipi di potenti funzionalità che rendono possibile qualsiasi cosa, da Nyan Cat a Gmail.

Con la tua autorizzazione può attivare notifiche push e geolocalizzazione, e senza la tua autorizzazione Javascript può memorizzare megabyte di dati nella cache del browser, aprire finestre, spostare oggetti nella pagina, disegnare oggetti su tele virtuali, registrare le sequenze di tasti e tenere traccia del mouse.

E, grazie a una funzione chiamata execCommand (‘copy’) può anche incollare cyber-pirhana negli appunti.

Siti web pericolosi: la demo pratica

Un’eccellente dimostrazione di come questo accada, e perché è 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 echonot evil” e testimoniare con orrore come ciò che effettivamente incollano è crudelmente diverso; echo “evil“.

Il execCommand(‘copy’)comando che esegue questa magia deve avere un trigger, noto come “evento” da eseguire, quindi il codice di Ayrey utilizza il keydown evento che viene attivato quando si utilizza la scorciatoia da tastiera per Ctrl+C.

Il codice attende quindi 0,8 secondi e cambia il testo dagli appunti.

I frammenti di testo nell’esempio non sono solo parole, sono validi comandi del computer che possono essere eseguiti all’interno di una finestra di terminale (quella misteriosa finestra nera senza funzionalità con testo bianco che gli “utenti esperti” non vedono mai e che i veri fanatici usano per ottenere lavoro fatto).

Alla fine echo “evil” c’è una nuova riga e se si digita una nuova riga in una finestra del terminale, verrà eseguito immediatamente il comando precedente.

In altre parole Ayrey ti ha offerto qualcosa che non funzionerà finché non glielo dici e poi lo ha sostituito alle tue spalle con qualcos’altro che funzionerà non appena lo incollerai.

Fortunatamente per chiunque utilizzi l’esempio di Ayrey, è un comando benigno che finisce per essere eseguito, ma ovviamente, in caso di attacco hacker, non sarà così.

Un utente malintenzionato potrebbe facilmente farti pensare che stai copiando qualcosa di sicuro e sostituirlo con un comando che elimina la tua home directory e ruba il file della tua password.

Pastejacking con CSS

Se disattivi completamente Javascript o utilizzi un componente aggiuntivo del browser come NoScript che ti consente di scegliere quando eseguire javascript, puoi renderti invulnerabile alla tecnica di pastejacking di Ayrey, ma c’è un altro modo per inserire di nascosto i comandi negli appunti che non si basa su Javascript.

L’HTML è il linguaggio in cui sono scritte le pagine web, ma è CSS (Cascading Style Sheets) a determinarne l’aspetto.

È CSS che riorganizza le pagine per funzionare in qualsiasi cosa, dai telefoni agli schermi cinematografici, ridimensiona il testo, aggiunge colonne, aggiunge colore, arrotonda i bordi, posiziona i loghi e fornisce lo spazio bianco che i designer amano aggiungere e i clienti adorano chiedere ai designer di rimuovere.

Può anche essere utilizzato per posizionare le cose sulla pagina o, più utile per i malintenzionati, fuori dalla pagina dove non puoi vederlo.

L’hacker Jann Horn ha una demo che mostra proprio questa tecnica sul suo sito web thejh.net. Nell’esempio di Horn, quello che sembra essere un comando per copiare un repository di origine git: git clone git://git.kernel.org/pub/scm/utils/kup/kup.git, è in effetti un comando molto più lungo che copia ancora un repository di git source ma non prima di aver scritto un avviso personalizzato accanto alla prima riga del file della password: git clone /dev/null; chiaro; echo -n “Ciao “;whoami|tr -d ‘n’;echo -e ‘!

Ecco perché è importante non copiare il codice da siti web di cui non ti fidi!

Sotto l’apparenza, nel codice della pagina, tutto il testo è lì come lo vedi sopra, ma Horn ha usato i CSS per visualizzare il brutto bit nei 100 pixel centrali sopra ea sinistra della pagina proprio dove non puoi vederlo.

Non fidarti del copia e incolla dei siti web

Per programmatori, sviluppatori, amministratori, hacker e fanatici di tutti i gusti, il web è lo strumento di apprendimento più utile che si possa immaginare. Esempi di codice sono ovunque sul web pronti per essere decifrati, discussi, interrogati, presi in esame, smontati e, soprattutto, copiati, incollati ed eseguiti.

Sfortunatamente, grazie ai CSS, non sai per forza cosa stai copiando e, grazie a Javascript, non sai per forza cosa c’è negli appunti.

Ci sono terminali che ti avviseranno se stai incollando qualcosa che termina con un carattere di nuova riga, e ci sono browser, ad esempio Lynx o Mosaic, che possono isolarti dalla modernità di CSS e Javascript. La migliore difesa, tuttavia, è quella che chiunque abbia la conoscenza e l’inclinazione a copiare e incollare comandi in un terminale dovrebbe già conoscere a memoria:

non puoi fidarti dell’input dell’utente.

Ti suggeriamo di non fare affidamento su strumenti di terze parti per salvarti, ma supponi che tutto sia ostile fino a quando non lo avrai “disinfettato” o dimostrato che va bene.

Il modo più semplice per farlo è incollare tutto ciò che copi da una pagina web in qualcosa che non può eseguire comandi. Alcuni sono ad esempio NOTEPAD o TextEdit ed esaminarlo prima.

Quindi copialo di nuovo e incollalo dove vuoi davvero in tutta sicurezza.