Red Hot Cyber

La cybersecurity è condivisione.
Riconosci il rischio, combattilo, condividi le tue esperienze ed 
incentiva gli altri a fare meglio di te.

Cerca

Telegram: tra RCE, problemi di privacy e bug bounty… da due bug hunter italiani

Redazione RHC : 6 Maggio 2023 08:39

  

Autore: Davide Turaccio

In Italia abbiamo pizza, pasta e persone cercano i bug di sicurezza informatica. 

Oggi voglio parlare di alcuni bug che abbiamo riscontrato negli anni in Telegram io, Davide Taruccio e un mio collega ricercatore di bug che vuole rimanere anonimo.

La RCE su WebView di Telegram Web

Come ogni mese Telegram rilascia un aggiornamento, e in questo specifico mese sono uscite le Web App per i bot su Telegram. Abbiamo subito deciso di testare la nuova funzionalità sui vari client offerti da Telegram, e siamo riusciti a far girare qualsiasi eseguibile già sul computer semplicemente aprendo un sito con WebView.

Telegram ha recentemente introdotto le app Web per i bot (https://telegram.org/blog/notifications-bots#bot-revolution), consentendo così l’utilizzo di un browser all’interno di Telegram, cosa potrebbe andare storto?

Il giorno stesso del rilascio, abbiamo immediatamente creato un bot e implementato la nuova funzionalità per aprire un sito tramite WebView, e abbiamo provato qualcosa di molto semplice per iniziare, abbiamo testato l’apertura di collegamenti tramite protocolli diversi da http, come file :// sftp:// ssh:// smb://, utilizzando i vari metodi forniti da javascript, come window.replace() e window.open().

Ad un’ora esatta da quando abbiamo iniziato a leggere la documentazione, abbiamo trovato un RCE e tramite questo semplice codice era possibile aprire qualsiasi eseguibile già presente sul computer con Windows 10.


Testare l’exploit su più piattaforme

È stato tutto fantastico ed era giunto il momento di testare l’exploit su più client e diversi sistemi operativi. Su Android e IOS abbiamo effettuato alcuni test ma non è successo nulla alle app che erano molto più limitate rispetto a un ambiente desktop tradizionale.

Abbiamo provato su Linux, nessun risultato, niente aperto, abbiamo provato su Windows 11, niente neanche qui, su Windows 7 invece ha funzionato.

Purtroppo il codice sorgente non era ancora stato rilasciato quindi non sapevamo perché su Windows 10 e 7 funzionasse mentre su 11 no, meno male che a pochi giorni dal rilascio è stato aggiornato anche il codice sorgente.

E così abbiamo scoperto che edgechromium (webview2) veniva eseguito su Win11 mentre edgehtml veniva utilizzato su Win10 e versioni precedenti. Pochi giorni dopo la nostra segnalazione a Telegram, hanno risolto il problema controllando che i collegamenti esterni fossero solo http[s] e rimuovendo edgehtml.

Poi l’abbiamo provato su macOS e con nostra sorpresa non solo ha funzionato sul client tdesktop, che è quello che gira su Windows, macOS e Linux, ma anche sul client specifico per macOS, che è TelegramSwitft.

Diversi mesi dopo il rilascio della funzione, hanno finalmente rilasciato la fonte aggiornata per il client macOS.

Cercando di migliorare l’exploit

Ok, l’exploit ha funzionato su Win7, Win10 e macOS, e ora?

Ma aprire i programmi già installati non ci bastava, volevamo fare di più, non potevamo nemmeno eseguire qualcosa scaricato automaticamente da Telegram Desktop nella cartella dei download, perché non riuscivamo ad avere il nome dell’utente.

Abbiamo provato a eseguire alcuni parametri aggiuntivi per cmd per provare a prendere il controllo della macchina, ma ancora una volta senza successo. Siamo stati in grado, tuttavia, di aprire collegamenti utilizzando altri protocolli, come calcolatrice: che apriva calcolatrice su Windows, smb:// e ssh:// funzionavano ma non si poteva fare molto, forse, avremmo potuto sfruttare samba con pass the hash, ma non abbiamo testato poiché non era il nostro obiettivo.

Anche su macOS, prima che potessero eseguire qualsiasi cosa, apparivano chiedendo il permesso all’utente, quindi ancora una volta, niente di veramente sfruttabile. Insomma, si trattava di una RCE eseguita con un semplice window.open() ma purtroppo o forse dovrei dire per fortuna poco utile senza altri exploit.

Abbiamo segnalato il problema al team di Telegram ed è stato riconosciuto, lo hanno anche risolto e ora WebView, su Windows e Mac è più sicuro.

WebK e WebZ, non viene visualizzato alcun avviso all’apertura di collegamenti esterni

Non c’è molto da dire su questo bug, semplicemente l’apertura dei link sui due nuovi client web di Telegram è avvenuta senza avvisare l’utente che stavano uscendo da Telegram, quindi un attacco di phishing sarebbe stato molto più semplice da portare a termine, soprattutto essendo web clienti.
Invece su tutti gli altri client c’è un popup che ti avvisa, anche sul vecchio web client.

Attraverso il vecchio client Web, è possibile ottenere l’IP di una persona facendole utilizzare un bot in linea. Molti anni fa c’era un bug su Telegram che consentiva a un bot in linea di prendere l’IP di un utente perché la miniatura della foto veniva scaricata dal client e non veniva inoltrata da Telegram come accadeva per la foto a piena risoluzione.

Era un bug scoperto da non so chi, era popolare nei vari gruppi Telegram L’ho segnalato al supporto volontario di Telegram (e non direttamente a [email protected]) molto tempo fa, quasi tutti i client avevano questo bug e non sono stato pagato per questo, ai tempi non avevo nemmeno pensato di chiedere se c’era una taglia, in più non avevo nemmeno scoperto il bug, ero solo riuscito a riprodurlo.

Anni dopo, però, l’ho riprovato e apparentemente per qualche motivo non è mai stato risolto sul web di Telegram, oppure è stato reintrodotto per errore, questa volta però ho deciso di segnalarlo via e-mail alla sicurezza.

Hanno confermato il bug e pagato una taglia, tuttavia, poiché il client è ora deprecato, non è stato risolto; semplicemente non usare il vecchio client web di Telegram! Ma se sei proprio sicuro di voler provare il vecchio client, non sarò io a fermarti, quindi ecco il link: https://web.telegram.org/?legacy=1

Fai trapelare gli utenti dietro post di canali anonimi

Esistono diversi modi per capire chi c’è dietro un canale che scrive come utente. Alcuni di questi metodi funzionano anche con amministratori anonimi.

1. Utilizzo di un bot inline
Anche solo aprendo per un attimo un bot inline (ad esempio premendo un pulsante con switch_inline_query e scegliendo una chat), il bot sarà a conoscenza dell’utente che ha utilizzato il bot, ovviamente per essere sicuro che sia è l’utente anonimo in cui dovrebbe essere fatto in modo che l’utente invii un messaggio con quel bot in linea. In alternativa, assicurati che nessun altro stia utilizzando il bot.

2. Utenti che hanno visualizzato il messaggio
Questo metodo funziona solo con gli utenti che scrivono come canale ma non funziona con gli amministratori anonimi, basta aprire il menu per vedere gli utenti che hanno visualizzato il messaggio.
Ovviamente, in questo caso non puoi essere sicuro e potresti già vedere gli utenti dall’elenco della chat.
Ma può aiutare a capire chi possiede il canale.

3. Premendo un pulsante di un bot (i pulsanti inline, quelli allegati al messaggio)
Premendo un pulsante inline il bot riceve tutte le info dell’utente, funziona sia per gli amministratori anonimi che per la scrittura come canale.
Per capire chi è l’amministratore anonimo, puoi prendere l’elenco degli utenti del gruppo e attendere che l’unico utente non presente nell’elenco prema il pulsante.
Ancora una volta non puoi essere sicuro al 100%, ma in alcuni casi limite potresti capirlo, poiché potresti avere falsi positivi.

4. Senza internet e riavvio dell’app (Android)
I messaggi vengono tutti inviati normalmente, ma il client li mostra come se li stessi inviando come canale

Passaggi da riprodurre:
– Imposta l’utente principale per scrivere nella chat
– Vai offline
– Imposta il canale per scrivere nella chat
– Invia messaggi
– Imposta l’utente principale per scrivere nella chat
– Chiudi l’app
– Apri l’app

5. Game bot (come @gamee)
Il punteggio con il tuo nome viene mostrato se stai postando come canale e stai giocando.
Non succede per gli amministratori anonimi.
Non ho avuto modo di testare quali dati riceve il bot, ma immagino che riceva in entrambi i casi tutti i dati dell’utente, oltre all’indirizzo IP.

6. Partecipa a una chiamata di gruppo
Funziona solo per la scrittura come canale e non per gli amministratori anonimi

7. Modificare la foto di gruppo o appuntare un messaggio
La notifica del servizio appare con il nome dell’utente
Funziona solo per la scrittura come canale e non per gli amministratori anonimi

8. Sondaggio
Non c’è molto da dire in questo caso, basta che un utente voti in un sondaggio non anonimo e vedrai l’utente tra i votanti.
È una cosa molto semplice, ma un utente potrebbe non pensarci e l’app non lo protegge in alcun modo, mentre lui pensa di essere anonimo.

Capisco che metà delle cose siano quasi irrilevanti e lo sono di proposito, tuttavia chiamandole “anonime” una persona si aspetta di essere più protetta, un avvertimento prima di compiere determinate azioni (anche se appare solo una volta) penso sia un buona soluzione
Come già accade nelle chat segrete, ti avvisa prima di utilizzare un bot inline.

Conclusione

Alcuni di questi “bug” sono stati corretti da Telegram, ma non ho mai ricevuto risposta. Penso che Telegram dovrebbe creare una pagina sul sito dedicata al bug bounty, scrivendo cosa considerano nell’ambito del bug bounty e per cosa pagano di più, dato che hanno pagato molto in passato per bug come le chiamate p2p che venivano usate da predefinito e ha fatto trapelare l’IP dell’utente (duh).

Redazione
La redazione di Red Hot Cyber è composta da un insieme di persone fisiche e fonti anonime che collaborano attivamente fornendo informazioni in anteprima e news sulla sicurezza informatica e sull'informatica in generale.