toshiki

区切り文字1つでアカウント乗っ取り——Telegram Desktopの脆弱性

· Hacker News #130

Telegram Desktopで、リンクを1回踏むだけでローカルのファイルを抜かれ、アカウントを乗っ取られる脆弱性が見つかった。原因はプロセス間通信で区切り文字をエスケープしていなかったこと。

  • #security
  • #vulnerability
  • #ipc
  • #bugbounty

#なぜ今日これを選んだか

セキュリティの力を伸ばしたくて、月1のバグバウンティ枠を続けている。この脆弱性は特殊な技術ではなく、「区切り文字をエスケープしていない」という基本的なミスから見つかった。しかも見つけた方法はソースコードを読むことだった。自分にも再現できる手順として、今日はこれを選んだ。

#要点

  • Telegram Desktopはリンクを、すでに起動している本体へローカルのソケット経由で渡す。そのとき命令の区切りに使うセミコロン(;)をエスケープしていなかった。そのため、リンクの中にセミコロンを入れると命令を割り込ませることができた
  • 割り込ませた OPEN: 命令から、内部用の interpret: スキームを呼べた。このスキームは、指定したファイルを確認なしでチャットへアップロードしてしまう。グループの添付ファイルが自動で保存される仕組みと組み合わせると、セッション情報を抜き出してアカウントを乗っ取れた(CVSS 8.1、CVE-2026-107181)
  • 発見者はソースコードを読んで、IPC(プロセス間通信)の組み立て方と読み取り方を追った。6月に報告し、修正版の7.2.9は9月に出ている。修正では区切り文字をエスケープし、内部スキームも削除した

#自分にとっての示唆

派手な攻撃に見えても、元をたどれば「入力の中に区切り文字が入ったらどうなるか」という一つの問いに行き着く。これはSQLインジェクションやXSSと同じ考え方で、PortSwiggerの演習で練習する内容と地続きになっている。もう一つ大事なのは、機能を一つずつ見るのではなく、自動ダウンロードと内部スキームという2つの機能を組み合わせて初めて大きな被害になった点だ。次のバグバウンティの30分では、対象のアプリについて「外から受け取る文字列が、どこで区切られて解釈されるか」を1か所だけ探してみる。自分のRustのコードでも、文字列を組み立てて区切る処理を書いていないか見直す。