Telegram Desktopのチャット履歴HTMLエクスポートに潜むXSS脆弱性

Telegramのやり取りをルーティンで書き出すだけの操作が、保存されたチャット履歴を密かにメッセージ窃取の道具へと変えてしまう恐れがあります。セキュリティ研究者らは、Telegram Desktop内に潜んでいた悪質な脆弱性を発見しました。この重大な欠陥により、HTML形式のチャットアーカイブへ悪意あるJavaScriptをひそかに注入することが可能でした。驚くべきことに、このバグはクライアント内でおよそ2年4か月にわたって放置されていました。そのため、修正前に生成されたファイルは、Telegramアプリを最新版に更新した後でも、深刻なセキュリティ脅威をもたらし続ける可能性があります。

チャットアーカイブに潜むStored XSSの仕組み

この脆弱性は、本質的には「Stored Cross-Site Scripting(格納型XSS)」に分類されるものです。Telegram DesktopにはチャットログをHTMLページとして保存する機能があり、ユーザーはその後、通常のWebブラウザでこれを開きます。ファイル生成の過程で、アプリケーションはメッセージ本文や送信者名などのフィールドに含まれる危険な文字を正しくエスケープ処理していました。しかし、Telegramボットが使用するインラインキーボードボタンに埋め込まれたテキストのサニタイズには、致命的に失敗していたのです。

この明白な見落としにより、ボタンの文字列は必要な処理を一切経ないままHTML出力へとそのまま流れ込んでいました。悪意あるボットは、ボタンのタイトルにscriptタグを容易に埋め込むことができ、Telegram Desktopはその内容を何の疑いもなく機能するHTMLマークアップとして記録してしまいます。重要なのは、この悪意あるコードがメッセンジャーアプリ自体の中では実行されなかった点です。デスクトップ版・モバイル版いずれのクライアントも、ボタンのテキストを独自のインターフェースで描画しており、Webページとして解釈することを拒否します。本当の危険が現実のものとなるのは、その後、ユーザーがやり取りをエクスポートし、生成されたファイルをWebブラウザで開いた瞬間でした。

グループへの参加を必要としないボット経由の配信

悪意あるペイロードを送り込むにあたって、不正なボットはターゲットグループのメンバーである必要すらありませんでした。URLボタンはメッセージの転送後も保持されるため、攻撃者は細工したメッセージをあらかじめ準備しておき、無関係な、警戒していないチャットへと送り込むよう仕組むことができました。履歴の中に安全に潜り込んでしまえば、悪意ある文字列は何か月、あるいは何年もの間おとなしく潜伏し続け、エクスポートされるまさにその瞬間まで完全に不活性なままとなります。

細工されたHTMLファイルが読み込まれた後は、追加のユーザー操作は一切必要ありませんでした。注入されたJavaScriptは、読み込まれたページの内容に対して即座に完全なアクセス権を獲得します。メッセージ本文、送信者名、投稿日時、さらにはチャットのタイトルや種別までも組織的に収集し、その機密情報を外部サーバーへひそかに送信することができました。さらにこのスクリプトは、表示されているページを丸ごと改ざんし、メッセージや日付、名前を欺瞞的に書き換えたり、偽の認証フォームを表示したりする能力すら備えていました。これらの改変は、あくまでブラウザ内でのアーカイブの見た目に影響するものであり、Telegramのサーバー上に存在する本来のやり取り自体は改変されない点に注意が必要です。

この欠陥は、Telegramボットのアクセスモデルに関して根深い問題を生じさせました。通常、プライバシーモードが有効なボットは、標準的なグループのやり取りや過去ログを閲覧することができません。しかし、悪意あるメッセージはエクスポート後にこの基本的な境界を実質的に突破してしまいます。コードはユーザーのブラウザ上でネイティブに実行され、開かれたHTMLページに存在するすべてのメッセージへ容易にアクセスできてしまうのです。研究者らはこの脆弱性の深刻度を明確に評価し、CVSS 3.1スケールで8.2というスコアを付けました。

発見・修正、そして今なお残る危険

この脆弱なコードは、2024年3月にリリースされたTelegram Desktop 4.15.1で当初導入されたものでした。研究者のDenis Rostilov氏とAlexander Rostilov氏は、2026年6月1日にこの問題を特定しました。それからわずか2日後、両氏は詳細な説明とデモンストレーション、そして動作する概念実証コードを添えて、この問題をTelegramに責任ある形で開示しました。開発チームは6月30日にパッチを策定し、7月2日にはこの重要な修正がTelegram Desktopのリポジトリへ統合されました。このパッチは、ボタンテキストに対する欠落していたエスケープ処理をついに実装すると同時に、コピーボタンのハンドラ経由で従来利用可能だった補助的なコード注入経路も無効化しました。

最初の修正版テストビルドであるTelegram Desktop 6.9.4は2026年7月3日にリリースされ、続いて安定版の7.0.1が7月14日にリリースされました。ユーザーは、新規に生成されるエクスポートでボタンテキストが正しく処理されるようにするため、Telegram Desktop 7.0.1以降へアップグレードするだけで対応できます。

旧アーカイブに残る脅威

重要なのは、クライアントを更新しても、パッチ適用前に生成されたHTMLファイルは決して無害化されないという点です。既存の旧アーカイブに、武器化されたボタンを含むメッセージがすでに含まれている場合、そのJavaScriptはファイル内に恒久的に埋め込まれたままとなり、次に開かれた際に実行される状態にあります。研究者らは、Telegram Desktopのアップデート後に、必要なやり取りを改めてエクスポートし直すよう、ユーザーに強く推奨しています。古いHTMLアーカイブを開かざるを得ない場合は、特に転送メッセージを大量に含む大規模グループの履歴が含まれるファイルであれば、ブラウザでJavaScriptを明示的に無効化した状態で開くべきです。

Telegramは7月1日、Telegram HTMLエクスポートXSSに関する報告を正式に確認し、研究者らに500ドルの報奨金を提示しました。称賛に値することに、両氏はこの報奨金の受け取りを辞退し、代わりにその資金を慈善団体へ寄付するよう求めました。公開されたやり取りによれば、Telegramはパッチが広く配布された後でさえ、悪用が今後も続くリスクを理由に、脆弱性の詳細を公に開示することを頑なに認めませんでした。この研究の公表日である9月12日の時点で、Telegramは専用のセキュリティ情報を発表しておらず、この脆弱性には公式のCVE識別子もまだ付与されていません。

翻訳元: https://meterpreter.org/telegram-desktop-html-export-xss/

本記事は meterpreter.org の記事を翻訳・要約したものです。