Due vulnerabilità zero-day si fondono in una sola. Un misterioso campione consente a criminali di eseguire codice in maniera arbitraria sui loro obiettivi sfruttando privilegi più elevati.
Alla fine di marzo 2018, i ricercatori di ESET hanno identificato un interessante campione di PDF dannoso. Uno sguardo più attento ha rivelato che il campione sfrutta due vulnerabilità precedentemente sconosciute: una legata all’esecuzione di codice in modalità remota in Adobe Reader e l’altra per consentire l’escalation dei privilegi in Microsoft Windows.
L’uso di queste due vulnerabilità combinate insieme è estremamente potente, in quanto consente a un utente malintenzionato di eseguire codice in maniera arbitraria con i massimi privilegi possibili sull’obiettivo vulnerabile e con la minima interazione dell’utente. I gruppi APT usano regolarmente tali combinazioni per eseguire i loro attacchi, come nella campagna Sednit dello scorso anno.
Una volta che il campione PDF è stato scoperto, ESET ha contattato e collaborato durante la correzione di questi bug con il Microsoft Security Response Center, il team di ricerca ATP di Windows Defender e il team di risposta agli incidenti di Adobe Product Security.
Sarà possibile scaricare le patch e i consigli di Adobe e Microsoft dai seguenti link:
Le versioni del prodotto interessate sono le seguenti:
Acrobat DC (2018.011.20038 e versioni precedenti)
Acrobat Reader DC (2018.011.20038 e versioni precedenti)
Acrobat 2017 (011.30079 e versioni precedenti)
Acrobat Reader DC 2017 (2017.011.30079 e versioni precedenti)
Acrobat DC (Classic 2015) (2015.006.30417 e versioni precedenti)
Acrobat Reader DC (Classic 2015) (2015.006.30417 e versioni precedenti)
Windows 7 per Systems Service Pack 1 a 32 bit
Windows 7 per Systems Pack 1 basato su x64
Windows Server 2008 per sistemi a 32 bit Service Pack 2
Windows Server 2008 per sistemi basati su Itanium Service Pack 2
Windows Server 2008 per sistemi basati su x64 Service Pack 2
Windows Server 2008 R2 per i sistemi basati su Itanium Service Pack 1
Windows Server 2008 R2 per Systems Pack 1 basato su x64
Questo blog analizza i dettagli tecnici del campione dannoso e le vulnerabilità che ha sfruttato.
Introduzione
PDF (Portable Document Format) è un formato di file per i documenti elettronici e, come con altri formati di documenti conosciuti, può essere utilizzato dagli aggressori per scaricare malware nel computer di una vittima. Per poter eseguire il proprio codice malevolo, gli aggressori devono trovare e sfruttare le vulnerabilità nel software di lettura PDF. Ci sono diversi lettori di PDF; uno dei più famosi è Adobe Reader.
Il software Adobe Reader implementa una funzione di sicurezza chiamata sandbox, nota anche nel lettore come modalità protetta. La descrizione tecnica dettagliata dell’implementazione della sandbox è stata pubblicata sulle pagine del blog di Adobe in quattro parti ( Parte 1 , Parte 2 , Parte 3 , Parte 4 ). La sandbox rende più difficile sfruttare le vulnerabilità: anche se venisse eseguito del codice viene, l’attaccante deve comunque bypassare le protezioni della sandbox per compromettere il computer che esegue Adobe Reader. Solitamente, per superare la sandbox vengono sfruttate le vulnerabilità del sistema operativo stesso.
Questo si è rivelato uno dei rari casi in cui i criminali sono stati in grado di trovare vulnerabilità e scrivere exploit sia per il software Adobe Reader e sia per il sistema operativo.
CVE-2018-4990 – RCE in Adobe Reader
Il campione PDF dannoso incorpora del codice JavaScript che controlla l’intero processo di sfruttamento delle vulnerabilità. Una volta aperto il file PDF, viene eseguito il codice JavaScript.
All’inizio del processo di sfruttamento, il codice JavaScript inizia a manipolare l’oggetto Button1. Questo oggetto contiene un’immagine JPEG2000 appositamente creata per attivare una vulnerabilità double-free in Adobe Reader.

Figura 1. Codice JavaScript che manipola l’oggetto Button1
Il JavaScript utilizza tecniche di heap-spray per corrompere le strutture dati interne. Dopo tutte queste manipolazioni, gli hacker raggiungono il loro obiettivo principale: leggere e scrivere la memoria sfruttando il loro codice JavaScript.

Figura 2. Codice JavaScript utilizzato per leggere e scrivere memoria
Usando questi due processi, l’attaccante individua l’indirizzo di memoria del plugin EScript.api , che è il motore JavaScript di Adobe. Utilizzando le istruzioni di assemblaggio (gadget ROP) di quel modulo, il codice JavaScript dannoso imposta una catena ROP che può consentire l’esecuzione dello shellcode nativo.

Figura 3. JavaScript dannoso che crea una catena ROP
Come passo finale, lo shellcode inizializza un file PE incorporato nel PDF e gli affida il processo di esecuzione.
CVE-2018-8120 – Escalation dei privilegi in Microsoft Windows
Dopo aver sfruttato la vulnerabilità di Adobe Reader, l’utente malintenzionato deve bypassare la sandbox. Questo è esattamente lo scopo del secondo exploit di cui trattiamo in questo documento.
La causa principale di questa vulnerabilità precedentemente sconosciuta si trova nel NtUserSetImeInfoEx funzione del win32k componente del kernel di Windows. In particolare, la subroutine SetImeInfoEx di NtUserSetImeInfoEx non convalida un puntatore dati, consentendo un dereferenziamento del puntatore NULL.

Figura 4. Routine SetImeInfoEx disassemblata
Come è evidente nella Figura 4, la funzione SetImeInfoEx prevede un puntatore a un oggetto WINDOWSTATION che viene inizializzato come primo argomento. Lo spklList potrebbe essere uguale a zero se l’utente malintenzionato crea un nuovo oggetto window station e lo assegna al processo corrente in modalità utente. Pertanto, mappando la pagina NULL e impostando un puntatore per deviare 0x2C, l’utente malintenzionato può sfruttare questa vulnerabilità per scrivere su un indirizzo a sua scelta nello spazio del kernel. Va notato che a partire da Windows 8, un processo utente non è autorizzato a mappare la pagina NULL.
Poiché l’attaccante utilizza una scrittura arbitraria primitiva, potrebbe decidere di usare tecniche diverse, ma in questo caso ne sceglie una descritta da Ivanlef0u e Mateusz “j00ru” Jurczyk e Gynvael Coldwin . L’attaccante imposta un gate di chiamata su Ring 0 riscrivendo la Global Descriptor Table (GDT). Per fare ciò ottiene l’indirizzo del GDT originale usando l’istruzione di assemblaggio SGDT, quindi costruisce la propria tabella e riscrive quella originale utilizzando la vulnerabilità di cui si è appena trattato.
A questo punto l’exploit utilizza l’istruzione CALL FAR per eseguire una chiamata di livello inter-privilege.

Figura 5. L’istruzione CALL FAR disassemblata
Una volta eseguito il codice in modalità kernel, l’exploit sostituisce il token del processo corrente con il token di sistema.
Conclusione
Inizialmente, i ricercatori ESET hanno scoperto il campione PDF all’interno di un archivio pubblico di sample pericolosi. Il campione non contiene una payload completamente definita, il che potrebbe suggerire che sia stato intercettato durante le sue prime fasi di sviluppo. Sebbene il sample non contenga un vera e propria payload malevola, gli autori hanno dimostrato un alto livello di abilità nel rilevamento delle vulnerabilità e nella scrittura degli exploit.
Indicatori di compromissione (IoC)
Rilevazioni ESET
JS/Exploit.Pdfka.QNV trojan
Win32/Exploit.CVE-2018-8120.A trojan
Hash SHA-1
C82CFEAD292EECA601D3CF82C8C5340CB579D1C6
0D3F335CCCA4575593054446F5F219EBA6CD93FE




1 Commento