Account WhatsApp compromessi su iPhone con iOS 16: l’attacco 0-click che bypassa i dispositivi collegati

WhatsApp

Un weekend tranquillo, di fine maggio: il tempo passa senza problemi fino a quando non iniziano ad arrivare messaggi ambigui sull’applicazione di WhatsApp installata sul tuo iPhone. I contatti iniziano a chiederti: “perché devo darti dei soldi?” oppure “a cosa ti serve il bonifico?”. Questi contatti stanno solo rispondendo ad un messaggio che è stato inviato dal tuo account WhatsApp; il problema è che tu non hai inviato nulla.

Questo è ciò che è accaduto negli ultimi giorni a diverse persone che si sono rivolte al nostro studio. Siamo stati contattati in più occasioni, nell’arco della stessa giornata, da utenti che avevano riscontrato la medesima anomalia. Il fatto curioso è che nessun dispositivo estraneo risultava associato all’account WhatsApp personale: la sezione “Dispositivi collegati” (“Linked Devices”) era pulita, eppure qualcuno stava inviando messaggi a nostra insaputa, dal nostro numero. Cosa sta succedendo?

A questo punto sono iniziate le nostre indagini per cercare di capire come sia possibile incorrere in una “problematica” di questo tipo. Quanto raccolto ha permesso di rivelare dei pattern comuni, utili per contestualizzare il tipo di minaccia e la superficie di attacco.

Confronto tra i casi

Mettendo a confronto i diversi casi raccolti, abbiamo individuato una serie di elementi ricorrenti che delineano lo scenario di compromissione:

• tutti i casi rilevati riguardano iPhone (dal modello 8 al 14, incluse le varianti X, XR, XS, 11, SE, 12 e 13) su cui è installata un versione di iOS 16 nelle sue diverse release;

• gli attaccanti scrivono in chat ai contatti della vittima, dal numero WhatsApp della vittima stessa, chiedendo di disporre bonifici;

• gli attaccanti sembrano avere accesso alle sole chat recenti, ovvero a quelle con cui la vittima ha interagito da poco;

• nessun dispositivo collegato è visibile nella sezione “Dispositivi collegati” delle impostazioni di WhatsApp;

• le vittime non riportano di aver compiuto alcuna azione di pairing particolare: non hanno fornito codici, non hanno inquadrato QR code, non hanno autorizzato accessi.

Per queste ragioni è stato sin da subito evidente che non si trattasse di un classico episodio di ghost pairing (nel quale l’attaccante induce la vittima a scansionare un QR code o a condividere un codice di verifica): l’assenza di qualsiasi interazione richiesta all’utente fa propendere per una compromissione di tipo 0-click, cioè per un’infezione che non richiede alcun intervento da parte della vittima e che colpisce direttamente lo smartphone o l’app WhatsApp.

Account Fantasma

Il primo aspetto senza dubbio interessante è la mancanza di un dispositivo associato. Analizzando i log di una delle copie forensi e il relativo sysdiagnose (componente del sistema operativo iOS contenente i log di diagnostica del telefono), è stato possibile notare un’anomalia nei log generati da WhatsApp: una continua sequenza di eventi di “resync”, come se l’applicazione stesse continuamente rinegoziando la sessione con i server di WhatsApp. Si tratta di eventi non molto comuni presenti in quantità insolita, a meno che qualcun altro non stia tentando in parallelo di mantenere attiva una propria sessione sullo stesso account.

Questa sequenza continua di sincronizzazione, di fatto, è il sintomo di una “competizione” tra due endpoint che cercano di mantenere attiva la stessa sessione, dinamica che approfondiremo successivamente, dopo aver discusso del probabile vettore di compromissione.

Versione di iOS

Un secondo aspetto molto interessante è che tutte le persone che ci hanno contattato possiedono un iPhone, con una specifica versione: iOS 16. Che sia questo il comune denominatore?

Partendo da tale presupposto abbiamo approfondito, ricercando tra i vari articoli presenti in rete e tra i log a disposizione, presenti tra i dati dei dispositivi compromessi. Ricercando problematiche di sicurezza correlate ad iOS 16 abbiamo notato una vulnerabilità descritta nel CVE-2025-43300, possibilmente in combinazione con il CVE 2025-55177 (vulnerabilità di WhatsApp iOS/macOS che poteva consentire il parsing di contenuti da URL arbitrari tramite messaggi di sincronizzazione dei dispositivi collegati non correttamente autorizzati):

ios

La vulnerabilità identificata pare sia correlata al processo delle immagini da parte di una libreria del sistema operativo, libreria utilizzata da diverse applicazioni come, appunto, WhatsApp. In aggiunta, nelle ultime settimane, la letteratura online in relazione a questa vulnerabilità sembra sia stata ampiamente documentata, rendendo di conseguenza più facile lo sfruttamento. Stando a quanto riportato dalla descrizione della vulnerabilità, le versioni di iOS minori della 16.7.12 sembrano essere vulnerabili, versioni compatibili con quelle da noi rilevate nei dispositivi delle vittime.

A supporto di questa tesi, all’interno degli unified logs estratti dal dispositivo sono state rinvenute molteplici occorrenze di errori generati proprio dalla libreria che si occupa del parsing delle immagini, in orari compatibili con quelli relativi alla compromissione degli account WhatsApp.

Riproduzione dello scenario in laboratorio

Per chiudere il cerchio attorno alla sequenza anomala di “resync” osservata nei log, i nostri tecnici hanno provato a riprodurre in laboratorio una parte dello scenario di compromissione, impiegando un device di “test” con installata una versione di iOS vulnerabile. L’attività ha permesso di confermare che esiste effettivamente una catena di azioni in cui un dispositivo estraneo si presenta al server di WhatsApp, apparendo come il dispositivo “vittima”. In tale condizione non vi è alcun tipo di avviso su quest’ultimo da parte di WhatsApp o di iOS.

In altre parole, partendo dal dispositivo compromesso è possibile esfiltrare il materiale crittografico utile per l’handshake di avvio sessione, necessario per istanziare un nuovo client WhatsApp altrove, agganciato però all’account della vittima. È proprio in questa fase che si genera la sequenza continua di “resync” nei log (riscontrati parimenti nei test del nostro laboratorio): il telefono legittimo e il client dell’attaccante si contendono la sessione, riautenticandosi ciclicamente sui server di WhatsApp. Questo modello operativo è pienamente coerente con quanto raccolto sul campo, ovvero con un account che invia messaggi a contatti recenti pur in totale assenza di dispositivi collegati visibili dalle impostazioni dell’app.

Indicazioni operative per utenti e vittime

Sulla base di quanto osservato sui casi reali e di quanto verificato durante la riproduzione dello scenario, possiamo proporre alcune indicazioni pratiche, fermo restando che l’analisi è tuttora in corso e che gli aggiornamenti potranno modificare il quadro qui descritto.

In ottica di prevenzione, trattandosi presumibilmente di un attacco 0-click, è utile ridurre la superficie d’attacco limitando gli automatismi e attivando la Lockdown Mode tramite le Impostazioni Restrittive dell’Account (Strict Account Settings). Non abbiamo ancora verificato se l’abilitazione della verifica in due passaggi su WhatsApp riduca concretamente il rischio di compromissione, ma resta una buona pratica generale. La raccomandazione principale rimane comunque l’aggiornamento del sistema operativo all’ultima patch di sicurezza disponibile: nei casi raccolti, tutti i dispositivi vulnerabili eseguivano una release di iOS 16, mentre la vulnerabilità CVE-2025-43300 risulta corretta nelle versioni successive (quantomeno per gli iPhone).

Se l’account risulta già compromesso, dalle osservazioni condotte emergono alcuni elementi utili: utilizzando il blocco delle chat (la funzione che le rende nascoste tramite codice o biometria) gli attaccanti sembrano non riuscire più a leggerle né a scrivere ai relativi contatti; per “estromettere” l’attaccante pare efficace aggiornare l’app WhatsApp o installarla su un nuovo dispositivo procedendo a una nuova autenticazione; infine, dato che tutti i casi raccolti riguardano dispositivi con iOS 16, l’aggiornamento del sistema operativo dovrebbe far venire meno le condizioni di sfruttamento dell’infezione.

Una raccomandazione importante per chi riceve messaggi sospetti: se un contatto chiede l’esecuzione di un bonifico via WhatsApp, è preferibile verificare la richiesta con una telefonata diretta. Scrivere alla vittima sulla stessa chat WhatsApp potrebbe non essere efficace, perché i messaggi potrebbero essere visualizzati dall’attaccante senza arrivare al legittimo titolare dell’account.

Chiaramente, dal punto di vista delle indagini e della preservazione delle prove, il consiglio di massima è rivolgersi ad un team esperto che possa fornire consigli più approfonditi, idonei per ogni caso specifico, auspicando al contempo la possibilità di non perdere prove utili per futuri approfondimenti.

Il nostro team sta proseguendo le attività di analisi, raccogliendo ulteriori copie forensi e verificando in dettaglio il modello di attacco. Nel frattempo, la raccomandazione operativa più rilevante resta quella di aggiornare la propria versione di iOS con l’ultima patch di sicurezza disponibile, così da ridurre notevolmente le probabilità di infezione.

Recupero di messaggi WhatsApp eliminati tramite Msgstore Increment

Recentemente, durante l’analisi di uno smartphone Android, è stato necessario recuperare dei messaggi cancellati appartenenti ad una chat eliminata dall’applicazione di WhatsApp. Fino a poco tempo fa anche effettuando un’analisi tramite software professionali quali Cellebrite UFED, Oxygen Forensic Detective e Magnet Axiom, non era possibile recuperare tale chat poiché eliminata prima del suo inserimento all’interno del classico backup periodico locale del database “msgstore.db” e quindi non visibile con le metodologie standard di recupero dati.

Di recente la funzionalità di recupero delle chat non presenti nei backup periodici è stata aggiunta ai software di mobile forensics, ma riteniamo utile illustrare in dettaglio come era possibile anche prima dell’aggiunta – e lo è tuttora – procedere manualmente con l’ispezione dei file relativi all’applicazione di WhatsApp e recuperare chat cancellate.

Nello specifico, illustreremo come recuperare una porzione della chat – non presenti nel DB o nei backup tradizionali – grazie all’analisi di un altro file di backup, incrementale e non completo: il “msgstore-increment.db“.

Cos’è il msgstore-increment.db e a cosa serve?

L’applicazione di WhatsApp, quando installata su dispositivi Android, effettua dei backup periodici del database principale “msgstore.db”, contenente tutte le informazioni correlate all’account di WhatsApp, inclusi i messaggi.

Purtroppo, la creazione dei backup e la loro gestione, in alcuni casi, può risultare difficoltosa da parte dell’applicazione soprattutto in situazione in cui i dati gestiti risultano essere centinaia di MB se non GB. Per questo motivo, per minimizzare la perdita dei dati e ottimizzare la gestione della memoria sul dispositivo, WhatsApp esegue dei backup incrementali, tra ogni backup completo, dentro i quali vengono salvati solo i cambiamenti avvenuti nell’applicazione: ad esempio, se il giorno successivo al backup completo vengono inviati cento messaggi, essi vengono inclusi all’interno del backup incrementale eseguito per quel giorno.

Questo significa che, se in seguito alla creazione del backup completo vengono inviati cento messaggi e poi cancellati, essi possono essere recuperati dal backup incrementale, ammesso che non siano stati eliminati prima della sua creazione.

A oggi, software professionali come Cellebrite UFED o Oxygen Forensics supportano il parsing del backup incrementale msgstore-increment, ma fino a pochi mesi fa era una funzionalità probabilmente ancora in lavorazione, dato che è comparsa di recente. Di conseguenza, per tentare il recupero dei messaggi eliminati, in passato, è stato necessario comprendere le logiche alla base di questo tipo di dato e creare uno script in grado di automatizzare l’estrazione di eventuali messaggi cancellati, ma ancora presenti nell’increment, mentre oggi chi ha a disposizione software professionali può eseguire il recupero direttamente tramite le funzionalità interne.

Come funziona e come si estraggono i dati dall’archivio msgstore-increment.db?

Il primo passo è stato quello di approfondire il funzionamento del backup incrementale, avendo prima replicato uno scenario in cui questa funzionalità ha generato degli increment. Tramite l’analisi dei dati generati dall’applicazione WhatsApp, sono stati individuati e analizzati diversi file denominati “msgstore-increment.db.crypt14”, ovvero archivi compressi e cifrati. Tali archivi sono stati decifrati attraverso l’utilizzo dello strumento “wa-crypt-tools” (https://github.com/ElDavoo/wa-crypt-tools) e, successivamente, decompressi, ottenendo file strutturati in formato JSON e un file binario denominato “messages.bin”.

archivio-decifrato-increment

Contenuto dell’archivio msgstore-increment.db.crypt14, backup incrementale

Tra i file in JSON ne è presente uno chiamato “header.json” dentro il quale sono contenute informazioni utili, relative agli altri file presenti nella cartella, compreso “messages.bin”. Inoltre, dall’analisi effettuata sul file binario, è stato possibile determinare il formato utilizzato per la codifica dei dati, ovvero il protocollo protobuf.

Protobuf è un formato di serializzazione dati sviluppato da Google e viene spesso utilizzato nella trasmissione delle informazioni tra applicazioni o per la memorizzazione di dati in un formato binario poiché risulta essere più leggero e performante rispetto a JSON o XML.

Il funzionamento è relativamente semplice, è necessario definire la struttura dei dati tramite la creazione di un file “.proto” e utilizzare un compilatore per la creazione di uno script in grado di codificare i dati basandosi, appunto, sul protocollo definito. Di seguito un esempio di definizione del protocollo:

Esempio di definizione per protobuf

Esempio di definizione per protobuf

In questo caso, uno script basato su tale definizione sarà in grado di creare un file binario contenente i dati “nome” ed “eta” riportati nel file protobuf.

Nell’applicazione di WhatsApp avviene la stessa cosa: il file binario “messages.bin” viene creato da una porzione di codice contenuta nell’applicazione ed è basato su un file “proto” dentro la quale è definita la struttura dei messaggi e delle conversazioni.

Inoltre, il file binario “messages.bin” viene strutturato con una o più porzioni del dato binario codificato con protobuf, tali porzioni vengono definiti anche segmenti o “length-delimited” (https://protobuf.dev/programming-guides/encoding/#length-types). Pertanto, per leggere il contenuto del file è prima necessario separare i vari segmenti e successivamente procedere con la lettura.

Rappresentazione dei segmenti contenuti nel file messages.bin

Rappresentazione dei segmenti contenuti nel file messages.bin

Per la separazione di ogni singolo segmento presente nel file “messages.bin” abbiamo creato uno script in python, che mettiamo a disposizione sulla nostra repository GitHub (https://github.com/Forenser-lab/wa-increment-decoder/blob/main/splitter.py), in grado di leggere il file “messages.bin” e creare diversi file binari ognuno contenente il dato (segmento) protobuf da leggere.

Successivamente, per la lettura di ogni singolo file, abbiamo utilizzato il tool “protobuf inspector” (https://github.com/mildsunrise/protobuf-inspector), uno script in grado di leggere un file binario codificato con protobuf:

Output del tool protobuf_inspector

Output del tool protobuf_inspector

Nonostante sia stato possibile estrapolare i vari messaggi contenuti nei segmenti, essi sono risultati un’aggregazione di dati “anonimi”. Sebbene alcuni dei dati ottenuti dall’estrazione della chat contengano campi con un significato intuitivo, come il testo del messaggio o il timestamp, altri sono risultati ignoti rendendo di conseguenza difficoltoso stabilirne il significato reale. Questo accade poiché noi non siamo in possesso della definizione del protocollo “proto” utilizzato da Meta e in grado di leggere correttamente i dati contenuti nel file binario.

Ciononostante, in rete, sono presenti diversi progetti di reverse engineering aventi oggetto la definizione del protocollo impiegato su WhatsApp, incluso quello del repository GitHub Wa-Proto (https://github.com/wppconnect-team/wa-proto) effettuato sulla versione web del software. Successivamente, provando ad adattare la loro definizione per il nostro scopo, siamo riusciti a decodificare correttamente l’intero contenuto del file binario “messages.bin” ottenendo tutti i dati in chiaro con il loro relativo significato.

A questo punto, è stato semplice creare uno script in grado di generare un file CSV contenente tutti i messaggi presenti nel file binario, indicando il caso in cui un messaggio risultasse essere stato eliminato. Si noti che sono stati effettuati alcuni test che hanno considerato anche i media (immagini, video, etc.) e in alcuni casi nella cartella decifrata e decompressa relativa all’increment è presente il folder “messages.bin” contenente miniature di immagini eliminate (successivi aggiornamenti saranno orientati a verificare in che misura è possibile recupera media o tracce di essi).

Proof of Concept di decifratura e analisi del msgstore-increment.db

Innanzitutto, è stato riprodotto lo scenario: abbiamo inizializzato una nuova chat, utilizzandola per qualche giorno per poi infine eliminarla, evitando che fosse memorizzata nel backup “msgstore.db”. Grazie a questa riproduzione, sebbene i messaggi della chat non siano stati inclusi nel backup settimanale, sono comunque stati inseriti nel backup incrementale giornaliero.

Nell’immagine seguente viene riportata un’illustrazione dello scenario riprodotto. Nello specifico è possibile vedere come il backup principale venga creato alle ore 02:00 AM del 10/01, successivamente alle ore 01:35 PM dello stesso giorno viene creata una conversazione con ID 123 che sarà inclusa nel backup incrementale alle ore 02:00 AM del 11/01. Infine, alle ore 04:00 PM del giorno 11/01 la chat con ID 123, viene eliminata (ma risulta ancora presente nel backup incrementale creato precedentemente):

Timeline dello scenario di riferimento

Timeline dello scenario di riferimento

Successivamente, sono stati estratti i backup incrementali dal dispositivo Android, solitamente contenuti nella directory “/data/media/0/Android/media/com.whatsapp/WhatsApp/Databases/” e opportunamente decriptati tramite l’apposita chiave di cifratura, ottenendo così i seguenti file:

  • msgstore-increment-1-2025-01-16.1.db;
  • msgstore-increment-2-2025-01-16.1.db;
  • msgstore-increment-3-2025-01-16.1.db;
  • msgstore-increment-4-2025-01-16.1.db.

I vari backup sono stati inseriti tutti all’interno della stessa cartella e in seguito è stato eseguito lo script da noi creato per il recupero dei messaggi, il quale ha generato un file CSV contenente la lista di tutti i messaggi estratti:

Generazione del file CSV contenente i messaggi recuperati

Generazione del file CSV contenente i messaggi recuperati

Conclusioni

Grazie ad un approfondimento sulla gestione dei backup nell’applicazione di WhatsApp per dispositivi Android, siamo riusciti a comprendere come essi vengono strutturati tramite il concetto di backup incrementali. L’analisi ci ha portato alla creazione di un piccolo tool, scritto in python, in grado di estrarre in modo strutturato i messaggi dal backup incrementalemsgstore-increment.db” in modo efficiente, con dettagli di rilievo come il timestamp e senza bisogno di utilizzare altri strumenti.

La funzionalità dei backup incrementali permette il recupero di messaggi eliminati tra la creazione di un backup integrale, locale, “msgstore.db.crypt14” e un altro, quindi non recuperabili tramte le tradizionali tecniche di analisi forense e undelete dal DB sqlite o dai backup.

Per chi volesse sperimentare o provare l’estrazione di questi messaggi, lasciamo qui di seguito il link dello script scaricabile dalla nostra repository GitHub (https://github.com/Forenser-lab/wa-increment-decoder).

Acquisizione forense e decrittazione del backup WhatsApp “crypt.15” su Android in modo sicuro e gratuito

Oggigiorno l’acquisizione forense dei dati utente dell’applicazione WhatsApp durante le attività di perizia informatica si pone come una delle principali necessità nell’ambito della cristallizzazione di evidenze digitali ed è sempre più importante per il Digital Forensics Expert avere a disposizione più alternative quando si parla di tecniche di acquisizione del dato.

Ci sono ad esempio situazioni nelle quali non si può procedere con una copia forense integrale dello smartphone, per questioni di tempo o di spazio, oppure il Sistema Operativo non permette un’acquisizione FFS (Full File System) o Physical tale da poter accedere al database whatsapp decifrato, o ancora non si vuole correre il rischio di un APK downgrade che potrebbe non sempre funzionare a dovere o magari non si ha tempo/banda sufficiente per fare sincronizzazione con cloud Google Drive o iCloud per caricare online il backup per poi scaricarlo da remoto e richiedere a Whatsapp l’SMS o token di autenticazione.

Ancora più appetibili in informatica forense sono le soluzioni gratis ed open source, così come quelle che richiedono pochi e semplici passaggi, utilizzando al più qualche riga di codice. Un’interessante ricerca portata avanti dal team Forenser ha analizzato attentamente un metodo che pochi tra i principali strumenti di acquisizione dell’informatica forense commerciali impiegano, riuscendo a identificare e testare un metodo per produrre un’acquisizione forense dei dati utente di WhatsApp che si può potenzialmente eseguire anche da remoto, in forma cifrata e con la successiva decrittazione in un processo rapido, ripetibile e gratuito.

Questa guida vi condurrà attraverso gli aspetti teorici e di comparazione con altri metodi simili utilizzati sul mercato, mostrandovi i vantaggi e gli svantaggi di quello che verrà descritto indicando la strumentazione necessaria, lo svolgimento di dettaglio e infine fornendovi il codice per decifrare le chat Whatsapp acquisite.

Read More