Apple, come era prevedibile da giorni, ha rilasciato il più velocemente possibile un aggiornamento del proprio sistema operativo iOS, che è al cuore dei dispositivi Apple iPhone, iPhod Touch e iPad. L’aggiornamento mette fine – almeno per ora – alle due falle utilizzate dall’hacker comex per effettuare da remoto e in maniera totalmente automatizzata il famigerato JailBreak.

Le due falle, come già detto in un articolo precedente, erano state utilizzate per eseguire del codice da remoto (CVE-2010-1797) e poi uscire dalla sandbox ed eseguire il codice con privilegi di root (CVE-2010-2973). Alcuni dettagli erano stati già specificati in un articolo precedente, altri vengono spiegati meglio in questo articolo.

La prima falla, presente nel lettore di file PDF integrato, permette tramite un documento PDF volutamente malformato di eseguire del codice inserito all’interno del documento stesso. Prima specifica da fare: molti si sono chiesti se in questa falla c’entrasse Adobe Acrobat Reader. Assolutamente no, Apple utilizza un proprio engine di rendering dei file PDF, e la falla è presente in questo engine. Più esattamente il problema risulta essere in una non corretta gestione di alcuni font CFF, nel caso dell’exploit utilizzato da comex di un Type1C font. L’esecuzione di codice avviene a causa di uno stack overflow.

Il font è stato incluso in uno stream del file PDF, stream che è stato poi compresso tramite il filtro FlateDecode (zLib). Questo specifico stream contiene sia il font malformato che il secondo exploit per ottenere i privilegi di root ed evadere dunque dalla sandbox.

Il secondo exploit, che è quello più grave, sfrutta una falla nel framework IOSurface, un framework utilizzato per condividere interfacce grafiche tra varie applicazioni e gestito interamente dal kernel. Alcuni parametri degli object IOSurface creati non vengono correttamente validati dal framework, causando un integer overflow. Essendo il codice gestito nel kernel, questo errore permette di eseguire codice con privilegi di root, ottenendo così di evadere dalla sandbox.

iOS IOSurface exploit

Nel caso dell’exploit, i parametri non correttamente validati dell’object IOSurface sono IOSurfaceAllocSize, IOSurfaceBytesPerRow, IOSurfaceHeight e IOSurfaceWidth. Come è possibile vedere dall’immagine, questi parametri vengono generati appositamente per sfruttare la falla in maniera corretta ed eseguire dunque l’exploit.

Con il rilascio dell’update da parte di Apple, anche l’hacker comex ha rilasciato il codice sorgente degli exploit utilizzati, rendendo molto più semplice la vita ad eventuali malintenzionati che potrebbero sfruttare il codice per installare codice nocivo nei sistemi Apple non aggiornati. È necessario infatti ricordare che tutti gli iPhone e iPod Touch con un firmware iOS inferiore al 4.0.2 sono vulnerabili a questi due exploit – mentre il dispositivo iPad è vulnerabile se ha qualsiasi firmware inferiore all’iOS 3.2.2. Indipendentemente se i dispositivi sono stati sbloccati o meno tramite tecnica di JailBreak, saranno comunque vulnerabili se non utilizzano gli ultimi firmware messi a disposizione dalla Apple.

Vista la gravità – e la complessità – dell’attacco, è caldamente raccomandato l’aggiornamento dei propri dispositivi al firmware 4.0.2, se si tratta di iPhone o iPod Touch, oppure al firmware 3.2.2 se si tratta di iPad.

Una piccola nota a margine è dovuta: il framework IOSurface è stato messo a disposizione anche nei sistemi Mac OS X, a partire da Mac OS X 10.6 Snow Leopard. Che possa essere potenzialmente presente anche qui questa grave falla?