it.xnews.jp
出典: Ammar's Blog 生成: 2026-06-03 読了 約 4 分 model: claude-haiku-4-5 原文: https://blog.ammaraskar.com/github-token-stealing/ raw.md

VSCodeの脆弱性で1クリックのGitHubトークン盗難が可能に

リンククリックだけで、ユーザーの全リポジトリへの読み書きアクセス権を持つGitHubトークンを盗み出せるVSCodeの脆弱性が発見された。攻撃者は悪意あるJupyterノートブックとキーボードイベント送信を組み合わせて、拡張機能のインストールをトリガーし、任意のコード実行を可能にする。

Ammar Askarによって発見されたこの脆弱性は、VSCodeのウェブビュー(iframe)サンドボックスの設計とメッセージパッシング機構に起因する。攻撃はVSCodeのブラウザ版(github.dev)およびデスクトップ版の両方で機能する。発見者は公開開示の1時間前にGitHubセキュリティに報告した。

脆弱性の仕組み

VSCodeはwebviewをiframeで実装し、異なるオリジンを使用してコンテンツをサンドボックス化している。github.devはブラウザで完全に動作する軽量版VSCodeであり、GitHub POSTsするOAuthトークンは特定のリポジトリに限定されず、ユーザーがアクセス可能なすべてのリポジトリへのフルアクセス権を持つ。

VSCodeのウェブビューはWindow.postMessage() APIを使用してメインエディタとウェブビューフレーム間で通信を行う。特に、キーボードショートカット処理はdid-keydownイベントを介したメッセージパッシングで実装されている。

contentWindow.addEventListener('keydown', handleInnerKeydown);

VSCodeコード内では以下のようにキーボードイベントが処理される:

const handleInnerKeydown = (e) => {
    // ...
    hostMessaging.postMessage('did-keydown', {
        key: e.key,
        keyCode: e.keyCode,
        code: e.code,
        shiftKey: e.shiftKey,
        altKey: e.altKey,
        ctrlKey: e.ctrlKey,
        metaKey: e.metaKey,
        repeat: e.repeat
    });
};

攻撃の手法

攻撃者は悪意あるJupyterノートブックを使用してJavaScriptペイロードを埋め込む。このペイロードはkeydownイベント(Ctrl+Shift+A と Ctrl+F1)を発生させ、VSCodeの拡張機能インストール機能をトリガーする。

VSCodeのドロップダウンオプション

github.devのデモ画面

VSCode 1.97では新しい拡張機能パブリッシャーに対する信頼システムが導入されたが、ローカルワークスペース拡張機能は信頼されたワークスペース内でインストールされると信頼できるパブリッシャーチェックをスキップする。攻撃フローは以下の通りである:

github.devにはCSRFトークンが存在しない。ユーザーが過去にそのダイアログを通過し、ブラウザのローカルストレージを削除していない場合、攻撃に対して無防備となる。ローカルストレージを削除することで、この攻撃から身を守ることができる。

概念実証が作成・テストされ、GitHubトークンの盗難とプライベートリポジトリへのクエリが可能であることが確認された。

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

Ammar's Blog「1-Click GitHub Token Stealing via a VSCode Bug」 https://blog.ammaraskar.com/github-token-stealing/

(VSCode issue tracker の報道による)

この記事をシェア