Nextpapers online
Il meglio del web

NON APRITE QUEL PDF!

Un bug in Adobe Reader per automatizzare i form consente di inserire porzioni di JavaScript in un PDF, permettendo, ad esempio, l’esecuzione remota di codice malevolo

Ormai siamo abituati a vivere online, con applicazioni disponibili tramite interfacce Web. E tendiamo a dimenticare che alla fine un browser gira pur sempre su un sistema operativo desktop, soprattutto se si sta utilizzando il computer per lavoro o per qualcosa di importante. Molte delle operazioni della moderna vita online, come la creazione di documenti, ricevute, fatture, finiscono con il download di un file, che tipicamente è un PDF. Finché utilizziamo le applicazioni Web, buona parte della sicurezza dipende dal server che ospita i file ed esegue il codice. Una parte più o meno piccola è legata anche al nostro browser, per tutto il codice e le operazioni eseguite lato client. Una volta scaricato il PDF la “palla” della sicurezza passa al nostro sistema operativo e alle applicazioni native installate sul PC.

In altri termini, esiste una parte non irrilevante della “catena” di sicurezza legata al software lato client, quindi, di conseguenza, è fondamentale prestare sempre massima attenzione a cosa si scarica: non saranno più gli anni 2000, con le tonnellate di malware legati a software scaricati da eMule e siti che promettevano di ottenere tutto gratis, ma il codice malevolo può ancora essere veicolato come allegato di una email, oppure come
documento da downloadare.

Ed è particolarmente pericoloso, soprattutto perché pochi utenti si aspettano sorprese da un formato semplice come il PDF. Il problema sta sempre nel fatto che un file è di per sé un vettore, ciò che è più critico è il modo in cui viene interpretato dall’applicazione deputata ad aprirlo.

AGGIUNGERE CODICE JAVASCRIPT IN UN PDF

Il bug a cui facciamo riferimento appartiene a uno dei programmi più diffusi sui PC di tutto il mondo (soprattutto quelli dotati di sistema operativo Microsoft Windows): Adobe Reader. Quando un utente scarica un PDF, c’è buona probabilità che lo apra automaticamente con questa applicazione. Per capire meglio come funziona, bisogna capire come funzionano i PDF. Il loro “progenitore”, il formato PostScript, è una sorta di linguaggio di programmazione vero e proprio, che contiene le istruzioni per la stampa. Queste istruzioni devono poi essere interpretate dalle stampanti (e dai programmi che ne visualizzano l’anteprima). Un po’ come accade per un programma scritto in Python, ad esempio.

Discorso diverso per i PDF, che rappresentano una sorta di versione già compilata, così come un programma binario. Ciò non toglie che le informazioni in essi contenute debbano essere “interpretate” per essere correttamente visualizzate a schermo, con la differenza che l’interpretazione parte proprio da un binario. È più simile a una emulazione, come quando si usa una macchina virtuale per far girare un programma scritto per una architettura diversa da quella nativa del processore del proprio PC.

Nel corso degli anni il formato PDF è diventato uno standard indiscusso, ma gli utilizzi dell’informatica sono cambiati negli ultimi 30 anni, e da un po’ di tempo i PDF hanno iniziato a supportare i form, per consentire una semplice compilazione dei moduli. Non solo, hanno anche iniziato a supportare JavaScript (https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/pdfs/acrobatsdk_jsapiref.pdf) per automatizzare la gestione dei form stessi. Ed è qui che si annida il problema: se un PDF di per sé non contiene del codice da interpretare o eseguire, il codice JavaScript deve essere eseguito e questo può dare spazio di manovra a qualche malintenzionato.

Nel caso specifico, Adobe ha sviluppato alcune apposite API che permettono al codice JavaScript di accedere a determinate parti della pagina. Per esempio, la funzione print stampa un subset di pagine del documento PDF, la funzione offre una serie di parametri opzionali: nStart e nEnd che indicano il numero di inizio e fine del range di pagine da stampare, bShrinkToFit che indica se sia necessario ridimensionare le pagine per adattarle all’area di stampa, e via dicendo. Nello specifico, a partire da Adobe Acrobat 6 in avanti, i vari parametri sono supportati per retrocompatibilità, anche se è stato introdotto un nuovo elemento: printParams.

Il nuovo oggetto contiene tutte le impostazioni necessarie per la stampa, se specificato, tutti gli altri parametri vengono ignorati. Questa comodità prevista da Adobe, che in teoria facilita queste attività perché si può creare l’oggetto con le preferenze di stampa una volta sola e poi usarlo quando si vuole, ha in realtà un problema di implementazione.

L’oggetto printParams viene infatti utilizzato senza prima verificare che contenga qualcosa di legittimo, per un malintenzionato è quindi possibile creare un PDF che contenga ad esempio il codice nel [listato #1].

L’interprete JavaScript di Adobe Reader eseguirà la funzione print ignorando i vari parametri legittimi, utilizzando per le preferenze di stampa soltanto l’oggetto uAnwU19, un oggetto legittimo agli occhi di JavaScript, ma che in realtà non contiene alcuna
informazione utile per la stampa. Acrobat Reader scarterà l’oggetto ma, per via di un bug nello sviluppo, cercherà comunque di impiegarlo per continuare la stampa; si tratta di un errore conosciuto come use after free.

Per un malintenzionato, quindi, inserendo un adeguato shellcode nell’oggetto incriminato, sarà possibile sovrascrivere un’area di memoria che verrà poi eseguita e che potenzialmente potrà dare la possibilità, ad esempio, di accedere a un terminale remoto sul PC della vittima.

QUANTO E PERICOLOSO QUESTO BUG?

Si tratta di vulnerabilità piuttosto seria, non soltanto perché l’applicazione colpita è una delle più installate al mondo, ma anche perché è piuttosto semplice da sfruttare. Per un malintenzionato è sufficiente creare un PDF malevolo e caricarlo su un sito Web, o inviarlo via email. La vittima, ignara, una volta aperto il file innesca a sua insaputa l’esecuzione del codice malevolo. Al momento non abbiamo segnalazioni di PC violati con questo meccanismo, ma è anche abbastanza palese che un utente potrebbe essere stato colpito e non rendersene conto. Il bug si presenta in buona parte dei casi come un crash di Adobe Reader, la maggior parte degli utenti tende a ignorare questi eventi, al massimo bollandoli come un difetto del file. Va detto che è anche un bug difficile da identificare, proprio perché il PDF infetto risulta del tutto legittimo, anche eseguendo una scansione antimalware del file non sarà semplice capire se sia “infetto”.

LA SOLUZIONE PER DIFENDERSI

Gli scopritori del bug hanno contattato Adobe, e l’azienda ha rilasciato dei bugfix per tutte le principali versioni di Acrobat Reader. È importante ricordare che questo non è un bug nel formato PDF, ma nel modo in cui Acrobat Reader gestisce JavaScript all’interno del PDF. Quindi, chi sta utilizzando qualche altro visualizzatore di PDF non è colpito dal problema, e non deve adottare particolari contromisure. Gli utenti di Acrobat Reader, invece, devono semplicemente aggiornare il programma all’ultima versione disponibile.

Potrebbe piacerti anche
Lascia una risposta

L'indirizzo email non verrà pubblicato.