Telegram Desktop-fout zorgt ervoor dat verborgen JavaScript berichten uit HTML-exports kan exfiltreren

Een fout in Telegram Desktop zorgde ervoor dat de boodschap van een bot verborgen JavaScript in chats plaatste die gebruikers naar HTML-bestanden exporteerden, zeiden beveiligingsonderzoekers van ExPatch in een artikel dat op 12 september werd gepubliceerd.

In Telegram zag het bericht er gewoon uit, met een linkknop, en het script werd alleen uitgevoerd als iemand het exportbestand in een webbrowser opende. Vervolgens kan het elk bericht in dat bestand naar een door de aanvaller bestuurde server kopiëren, of herschrijven wat op de pagina wordt weergegeven.

Telegram heeft in juli een oplossing uitgebracht, maar de app-update werkt geen bestanden bij die met eerdere versies zijn geëxporteerd, dus oude HTML-exports kunnen het script nog steeds dragen.

Telegram Desktop, de app van Telegram voor Windows, macOS en Linux, kan een enkele chat of alle chats van een account opslaan als HTML-pagina’s die in een browser worden geopend. Bots kunnen rijen knoppen onder hun berichten plaatsen, wat Telegram inline toetsenborden noemt, en de bot kiest de tekst die op elke knop wordt weergegeven.

Tot de oplossing schreef de exportcode die knoptekst rechtstreeks in de HTML-pagina zonder eraan te ontsnappen, ontdekten de onderzoekers Denis Rostilov en Aleksander Rostilov.

Door te ontsnappen worden tekens zoals < geconverteerd, zodat een browser ze als tekst weergeeft in plaats van ze als code te behandelen, en bij de export wordt dit toegepast op berichttekst, namen van afzenders en andere velden.

Een bot zou daarom een ​​scripttag in de tekst van een knop kunnen plaatsen, opgevuld met onzichtbare tekens, zodat de knop er leeg uitzag in de Telegram Desktop-build die ze testten.

De bot hoeft niet aanwezig te zijn in de chat waarop hij zich richt. Een bericht waarvan de enige knoppen weblinks zijn, behoudt die knoppen wanneer het wordt doorgestuurd, dus elk lid dat het bericht van de bot naar een groep doorstuurt, draagt ​​het script met zich mee, ontdekten de onderzoekers. Het bericht blijft dan net als elk ander bericht in de geschiedenis van de chat staan ​​totdat het wordt verwijderd, en kan maanden of jaren later worden geëxporteerd.

Ze meldden de fout op 3 juni aan Telegram, twee dagen nadat ze deze ontdekten, en zeggen dat ze deze alleen op hun eigen accounts en testgroepen hebben getest. Hun artikel beweert niet dat iemand de fout tegen echte gebruikers heeft gebruikt.

Toen een exportbestand met het bericht werd geopend, werd het script zonder verdere klikken uitgevoerd, aldus de onderzoekers. Het kon elk bericht in dat bestand lezen, inclusief de namen van de afzenders en tijdstempels, de naam, het type en het aantal leden van de chat, en het lokale bestandspad, en ze allemaal naar de server van de aanvaller sturen.

De exportcode van Telegram Desktop splitst lange exports op in bestanden van elk 1.000 berichten, zodat één bestand hoogstens zijn eigen inhoud onthult, en niet de hele chat of het Telegram-account.

Het script kan de pagina ook herschrijven. In de demonstratie van de onderzoekers werd de hele export vervangen door een nep-Telegram-verificatieformulier.

Dezelfde controle zou datums, afzenders of berichttekst kunnen wijzigen in een bestand dat als record wordt gebruikt, zeiden ze. Het veranderde niets aan Telegram’s eigen kopie van de chat of aan het exportbestand dat op schijf was opgeslagen.

De onderzoekers beoordeelden de fout met een 8,2 op 10 op de CVSS 3.1-schaal, en er bestaat sinds 14 september geen score van Telegram of van de Amerikaanse National Vulnerability Database (NVD).

Er moesten drie dingen waar zijn om het script te kunnen uitvoeren: de HTML-export was gemaakt met een Telegram Desktop-versie vóór de oplossing, het bericht met het script viel in de geëxporteerde chat en het bestand werd geopend in een browser waarin JavaScript was ingeschakeld.

De onderzoekers onderzochten alleen de HTML-export van Telegram Desktop en gingen niet in op het JSON-exportformaat of de exportfuncties van de andere apps van Telegram.

Of een doorgestuurd botbericht in een export terechtkomt, hangt af van de wijze waarop de export plaatsvindt. Het exporteren van een enkele chat uit het menu omvat de berichten van elk lid. Een volledige accountexport omvat standaard alleen de eigen berichten van de accounteigenaar in groepen en kanalen, maar alle berichten in één-op-één-chats en chats met bots, volgens de exportcode en de documentatie van Telegram.

De oplossing, commit 8457d13a door Telegram Desktop-ontwikkelaar John Preston, voegt de ontbrekende escape toe. Het is geschreven op 30 juni en bereikte de bètaversie van 6.9.4 op 3 juli en de stabiele release van 7.0.1 op 14 juli, de eerste vaste versies die op GitHub werden gepubliceerd. De regel zonder ontsnapping was sinds 4.15.1 in maart 2024 in stabiele releases, ongeveer twee jaar en vier maanden.

  • Aangetast: Telegram Desktop 4.15.1 (maart 2024) tot en met 6.9.3
  • Vast: 6.9.4 bèta (3 juli 2026), 7.0.1 (14 juli 2026) en hoger

De onderzoekers adviseren gebruikers om:

  • Update Telegram Desktop naar 7.0.1 of hoger, of naar 6.9.4 of hoger op het bètakanaal.
  • Exporteer na het bijwerken alle chats die vóór de oplossing naar HTML zijn geëxporteerd opnieuw, of open de oude bestanden alleen als JavaScript is uitgeschakeld.
  • Behandel elke HTML-export die vóór de oplossing is gemaakt als niet-vertrouwd, vooral als deze afkomstig is uit een grote groep waarvan de oorsprong van elk bericht moeilijk te controleren is.

Totdat de app is bijgewerkt, is er geen reden om nieuwe HTML-exports te maken, aangezien alleen exports die door de oudere code zijn geproduceerd de fout vertonen.

Vanaf 14 september had Telegram geen richtlijnen gepubliceerd voor gebruikers met oudere exportproducten.

Geen advies, geen CVE

De release-opmerkingen voor 6.9.4 en 7.0.1, de changelog van de app en Telegram’s aankondiging van de update op 14 juli vermelden de oplossing niet, en de Telegram Desktop-repository op GitHub vermeldt geen beveiligingsadviezen.

Er is ook geen CVE-identificatie voor de fout. De onderzoekers merkten op dat een zoektocht op 11 september in openbare kwetsbaarheidsdatabases door The Hacker News op 14 september niets vond.

De onderzoekers zeggen dat Telegram de fout op 1 juli bevestigde en een bugpremie van $ 500 aanbood, die ze afwezen en vroegen om aan een goed doel te schenken. Ze vroegen om een ​​gecoördineerde publicatiedatum en boden aan te zwijgen totdat de patch werd verzonden.

“We hebben ook de mogelijkheid van een publieke onthulling overwogen, maar we kunnen dit niet goedkeuren, omdat het openbaar maken van zelfs de reeds aangepakte problemen in de toekomst meer Telegram-gebruikers in gevaar zou kunnen brengen. Als informatie over een kwetsbaarheid bijvoorbeeld openbaar wordt gemaakt, kunnen kwaadwillende actoren proberen deze te misbruiken, waardoor Telegram-gebruikers financiële schade oplopen”, schreef Telegram Support in een e-mail van 1 juli die de onderzoekers als screenshot publiceerden.

De onderzoekers lezen dat als een weigering om publicatie toe te staan, zelfs na een fix. Ze zeggen dat hun rapport niet onder een geheimhoudingsovereenkomst viel en publiceerden ze op 12 september, nadat de oplossing was verzonden.

Telegram’s gepubliceerde bugbounty-regels zeggen dat kwetsbaarheden “die aan het publiek of aan derden worden bekendgemaakt voordat ze worden aangepakt” niet in aanmerking komen voor een premie. De pagina zegt niets over publicatie na een fix.

Thijs Van der Does