VS Code のバグを介した1クリックでの GitHub トークン窃取
VS Codeのバグを介した1クリックでのGitHubトークン窃取
最近のセキュリティ開示により、Visual Studio Code (VS Code) における重大な脆弱性が明らかになりました。これにより、攻撃者はわずか1クリックでユーザーのGitHub認証トークンを盗み出すことが可能になります。このエクスプロイトは、エディタの拡張機能インストールプロセスにおけるバグと、パブリッシャーの信頼システム(publisher trust systems)のバイパスを組み合わせたものであり、実質的に攻撃者にユーザーのGitHubアカウントへのアクセス権を与えます。
この脆弱性は、IDEの信頼モデルを標的にしているため、特に深刻です。信頼されているツールが、資格情報の窃取のためのゲートウェイへと変貌してしまいます。GitHubトークンが広範な権限を持つことが多い開発者にとって、このような漏洩の影響は壊滅的であり、リポジトリ全体や組織の機密情報が侵害される可能性があります。
The Mechanics of the Exploit
エクスプロイトの仕組み
攻撃ベクトルは、悪意のある拡張機能のインストールを防ぐために設計された「パブリッシャーの信頼」システムをバイパスすることに基づいています。通常、VS Codeはパブリッシャーに対するユーザーの信頼に基づいて拡張機能をスクリーニングします。しかし、研究者はこれを回避する方法を発見しました。
Bypassing Publisher Trust
パブリッシャーの信頼のバイパス
エクスプロイトの核心は、「local workspace extensions」を使用することにあります。これらの拡張機能は、公式のマーケットプレイスからダウンロードされるものとは異なり、パブリッシャーのスクリーニング対象になりません。ローカル拡張機能を利用することで、攻撃者は初期のセキュリティチェックを回避できます。
しかし、大きな障害が存在します。Content Security Policy (CSP) が、これらのローカル拡張機能内での JavaScript の実行をブロックすることがよくあるためです。これを克服するために、攻撃者は2段階のプロセスを使用します。
The Keybinding Trigger: ローカルワークスペース拡張機能がインストールされます。この拡張機能の主な目的は、悪意のあるペイロードを実行することではなく、特定のキーボードショートカットを特定のコマンドにバインドし、通常のパブリッシャーチェックなしで別の拡張機能をインストールするコマンドをトリガーするものです。
The Payload Delivery: ユーザーがショートカットをトリガーすると、「本物」の悪意のある拡張機能がインストールされます。トリガーが最初の拡張機能によって開始された内部コマンドであったため、通常であれば信頼できないパブリッシャーについてユーザーに警告するセキュリティプロンプトをバイパスします。
The Impact: From IDE to Account Takeover
影響:IDEからアカウントの乗っ取りへ
悪意のある拡張機能がアクティブになると、VS Code API にアクセスできるようになります。そこから、エディタ内に保存されているユーザーの GitHub 認証トークンにアクセスできます。VS Code は、バージョン管理や同期のために GitHub と深く統合されていることが多いため、これらのトークンは高権限のトークンであることが頻繁にあります。
Hacker News のコミュニティメンバーが指摘したように、リスクはトークンだけに留まりません。もし攻撃者が webview 内で Cross-Site Scripting (XSS) を実現できれば、ユーザーの環境における Remote Code Execution (RCE) の可能性が現実的なものとなります。
if you have some other XSS in a webview that you can get a victim to open, you get effectively full RCE on their computer. Github creds or the computer, can't decide which one is worse.
webview 内で被害者を誘導して開かせることができる別の XSS がある場合、実質的に彼らのコンピュータ上で完全な RCE が獲得できます。GitHub の資格情報かコンピュータか、どちらがより悪いかは決められません。
Architectural Critiques and Defense-in-Depth
構造的批判と多層防御
このバグの発見は、IDE セキュリティの「原罪」とも言える、ブラウザやエディタ環境内で、世界的に読み取り可能、あるいは容易にアクセス可能な形式で高権限トークンが永続的に存在するという問題について、より広範な議論を呼び起こしました。
The Problem with github.dev
github.dev の問題点
批判的な意見を持つ人々は、VS Code のウェブ版 (github.dev) は、広範な権限を持つ GitHub にサインインしているため、根本的に欠陥があると考えています。より安全なアプローチは、編集中の特定のリポジトリへのアクセスのみを許可する、一時的でスコープされたトークンを使用して IDE を起動する「single-repo service」を実装することです。
It'='d be like if you had a god-permissioned GitHub API token stored in world-readable plaintext on your workstation for the malicious-NPM-package-of-the-week to the find.
それは、今週の悪意のある NPM パッケージのように、あなたのワークステーション上で、世界的に読み取り可能なプレーンテキストで、全能の権限を持つ GitHub API トークンを保存しているようなものです。
The Human Element and MSRC
人間的要素と MSRC
この開示は、独立したセキュリティ研究者と Microsoft Security Response Center (MSRC) の間の継続的な摩擦についても浮き彫りにしました。一部の研究者は、MSRC との「恐ろしい経験」を報告しており、バグが適切なクレジットや謝辞なしに、密かに修正されることがあると主張しており、これが迅速な脆弱性報告を指標として妨げている要因となっています。
Mitigating the Risk
リスクの軽減策
開発者にとって、主な防御策は「ゼロトラスト」の考え方です。あるユーザーが共有したように、セキュリティを重視する開発者であっても、様々なベクトル(スパムボットや仮想通貨マイナーなど)を通じてトークン漏洩の被害に遭う可能性があります。 \n* Segregation: OrbStack のようなツールや仮想化環境を使用して、開発作業を分離してください。
- Control Damage: トークンが最終的に漏洩することを前提とし、可能な限りトークンに最小権限の原則を適用してください。
- Audit Tokens: GitHub セッション・トークンとアクティブな拡張機能を確認し、定期的に、許可されていないアクセスが存在しないか確認してください。