Telegram Desktopに保存型XSSの脆弱性、チャット履歴全体が盗まれる恐れ

Telegram DesktopのHTMLチャットエクスポート機能に存在する保存型クロスサイトスクリプティング(XSS)の脆弱性により、攻撃者がエクスポートされた会話の内容を盗み取れる可能性があることが分かりました。

この脆弱性はTelegram DesktopのソースリポジトリでCVE番号は割り当てられずに内部管理されていましたが、Beta版6.9.4より前およびstable版7.0.1より前で生成されたエクスポートに影響していました。

ExPatch Vulnerability Researchは、Telegramが2026年7月にこのバグを修正した後にこの問題を公表しました。研究者のDenis Rostilov氏とAleksander Rostilov氏によると、攻撃者はTelegramボットが送信するインラインキーボードボタンのテキスト内に悪意のあるJavaScriptを埋め込むことができるとしています。

このコードはチャットのメッセージ履歴内で休眠状態のまま存在し、参加者が会話をHTML形式でエクスポートし、生成されたファイルをWebブラウザで開いた時点で発動します。

従来型の保存型XSS攻撃とは異なり、悪意のあるボットは必ずしも標的のグループに参加する必要はありません。ボットは一見無害に見えるURLベースのインラインキーボード付きメッセージを別のユーザーに送信し、そのユーザーがグループやスーパーグループに転送することも可能です。

Telegramは転送時に互換性のあるURLボタンを保持するため、攻撃者が制御するボタンテキストは新しいチャット履歴にもそのまま残ります。

ExPatchによると、このペイロードは目に見えないUnicode文字を使って隠すことができ、Telegramのインターフェース上ではボタンが空白または無害に見えるようにできるとのことです。

Telegram Desktop自体はチャット内容をブラウザエンジンで描画しないため、この悪意のあるHTMLは単なるテキストとして表示されます。しかし、HTMLエクスポート処理ではボタンテキストが危険な文字をエスケープしないまま生成ページに直接書き込まれていました。

脆弱性のあるコードパスはexport_output_html.cpp内にありました。Telegram Desktopはメッセージ本文、送信者名、その他のエクスポート対象フィールドのHTML特殊文字をエスケープするためにSerializeString()関数を使用していました。

しかし、インラインキーボードのボタンテキストは同様のサニタイズ処理を経ずにbutton.text.toUtf8()を使って挿入されていたため、エクスポートされたHTMLファイルを開いた際に<script>のようなタグが実行可能なマークアップとして機能してしまう状態になっていました。

このスクリプトが発動すると、送信者名、タイムスタンプ、チャットのメタデータ、さらには社内の認証情報やビジネス上のやり取りといった機密性の高い内容を含め、エクスポート文書内に表示されるすべてのメッセージにアクセスできる可能性がありました。

また、ページのローカルファイルURLも読み取ることができ、被害者のユーザー名やディレクトリ構造の一部が露見する恐れもあります。データ窃取にとどまらず、この脆弱性はエクスポートされたページのDocument Object Model(DOM)を完全に操作することも可能にしていました。

攻撃者はチャットのエクスポートを偽のTelegramブランドの認証ページに差し替えたり、メッセージを非表示にしたり、表示されるタイムスタンプや名前を改ざんしたり、会話内容そのものを書き換えたりすることもできました。

こうした改ざんはTelegramのサーバー側の履歴自体を変更するものではありませんが、コンプライアンス対応や法的レビュー、社内調査などに使われるエクスポート済みチャットの信頼性を損なう可能性があります。

研究者らはこの脆弱性をCVSS 3.1で8.2、深刻度「高(High)」と評価しており、ベクターはCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:Nです。悪用には被害者がチャットをHTMLとしてエクスポートし、そのファイルを開く操作が必要ですが、攻撃者が標的グループの通常のメッセージトラフィックへのアクセス権を取得する必要はありませんでした。

Telegramはコミット8457d13a(「Fix escaping in HTML export of keyboards」)でこの問題を修正しました。このパッチはボタンテキストにHTMLエスケープを適用するとともに、コピー用コールバックボタンに関連するJavaScript文字列インジェクションのリスクにも対処しています。

ユーザーはstableチャンネルではTelegram Desktopをバージョン7.0.1以降に、Betaチャンネルではバージョン6.9.4以降にアップデートすることが推奨されます。

これまでに生成されたHTMLエクスポートは、特に大規模グループのメッセージや信頼できない転送コンテンツを含む場合、潜在的に安全ではないものとして扱うべきです。アップデート後にチャットを再エクスポートする、あるいはJavaScriptを無効にした状態で過去のエクスポートを開くことで、リスクを軽減できます。

16,000以上の組織から得られる最新の脅威インテリジェンスで、脅威検知率を58%向上。TIフィードを統合する、貴社のSOCへ

翻訳元: https://cyberpress.org/telegram-desktop-stored-xss-flaw/

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