数百万人と数百もの人気アプリでコード実行権限を獲得する方法
(kibty.town)「もちろんFirebaseが(部分的に)原因だった」
- AIエディタ Cursor のインストーラのダウンロード過程で、Lulu ファイアウォールを通じて ToDesktop へ接続を試みていることを確認
- ToDesktop は Electron アプリのパッケージング、SDK、アップデートなどを提供するサービス
- アプリが Firestore を使っていることを確認し、開発者ツールを通じて Firebase の基本的な調査を開始
- Firebase: Google が提供するアプリ向けバックエンドプラットフォームで、Firestore という NoSQL データベースを通じてクライアント側のデータ保存と処理を支援
- 開発者ツール(DevTools)とソースマップ(sourcemap)を活用して、Firestore で使われているコレクションを調査
temporaryApplicationsという名前のコレクションが見つかったが、古い一覧にすぎず機密情報はなかった(2022年以降更新されていない)- 主要なロジックとデプロイ作業の大半は npm パッケージ
@todesktop/cliを通じて行われていることを確認 @todesktop/cliにもソースマップがあり、sourcemapper で元のソース構造を把握
ToDesktop CLI をのぞく
- ToDesktop CLI: アプリのデプロイ、ソースコードのアップロードなど主要機能を担当
- CLI のソースマップを分析する中で、Firebase Cloud Function の
getSignedURLを悪用して任意の S3 アップロードを試せる脆弱性を発見したが、実際に意味のあるファイルパスを見つけるのは難しそうだった
Postinstall スクリプトでデプロイパイプラインをハイジャックする
- 目標: ビルドが進行するコンテナ(サーバー)でコード実行権限を得ること
package.jsonのpostinstallスクリプトにリバースシェル(reverse shell)のペイロードを入れ、ビルドコンテナからの接続を受信- コンテナ内部へのアクセスに成功し、ビルド環境の構造と重要なファイルを調査
config.json.encryptedファイルを確認し、復号方式も突き止めて実際の秘密情報(config.json)を抽出- さらに Firebase Admin キー(広範な権限を持つキー)も内部で発見
Post-exploitation
- この脆弱性により、任意にアプリアップデートを配布でき、ユーザーがアプリを再起動した際に即座に悪意あるコードを実行できる
- 実際にテスト用アプリへアップデートを配布した後、クライアント側で RCE(リモートコード実行)を再現
影響範囲
- ToDesktop を使うすべてのアプリに悪意あるアップデートを配布できるため、数百万人以上のユーザーに潜在的な影響を与えうる問題
- 例として挙げられているアプリ:
- ClickUp (https://clickup.com)
- Cursor (https://cursor.com) (現在は独自のビルドシステムへ移行)
- Linear (https://linear.app)
- Notion Calendar (https://calendar.notion.so)
- とりわけこれらのユーザーは IT・技術業界の従事者が多く、攻撃時の被害が大きくなる可能性が高い
The fix
- 報告後ただちに ToDesktop 側と連絡を取り、解決プロセスを進行
- ToDesktop は迅速に問題へ対応し、追加の報奨も提供
- ビルドコンテナとは分離された権限のサイドカーコンテナで署名、アップロードなどの重要な作業を行うよう構成を変更
- ToDesktop の公式セキュリティ incident レポートは こちら で確認可能
- セキュリティ事故はどの企業にも起こりうるが、重要なのは対応姿勢であり、ToDesktop は迅速かつ協力的に対処して好印象を残した
まだコメントはありません。