VSCode

Microsoft の Visual Studio Code (VS Code) コード エディターおよび開発環境には、悪意のある拡張機能が Windows、Linux、および macOS 資格情報マネージャーに保存されている認証トークンを取得できる欠陥が含まれています。

これらのトークンは、Git、GitHub、その他のコーディング プラットフォームなどのさまざまなサードパーティ サービスや API との統合に使用されるため、トークンを盗むと、侵害された組織のデータ セキュリティに重大な影響を及ぼし、不正なシステム アクセスやデータ侵害につながる可能性があります。等

この欠陥はCycode の研究者によって発見され、開発した実用的な概念実証 (PoC) とともに Microsoft に報告されました。しかし、このテクノロジー巨人は、拡張機能が他の環境からサンドボックス化されることが予想されていないため、この問題を修正しないことを決定した。

拡張機能を使用してシークレットを盗む

Cycode によって発見されたセキュリティ問題は、拡張機能がオペレーティング システムに認証トークンを保存できるようにする API である VS Code の「Secret Storage」で認証トークンが分離されていないことが原因です。

これは、Windows 資格情報マネージャー (Windows の場合)、キーチェーン (macOS の場合)、またはキーリング (Linux の場合) と通信するための VS Code のラッパーである Keytar を使用して行われます。

これは、VS Code で実行されている拡張機能は、たとえ悪意のある拡張機能であっても、Secret Storage にアクセスし、Keytar を悪用して保存されているトークンを取得できることを意味します。

Cycode 研究者の Alex Ilgayev 氏は、組み込みの GitHub と Microsoft 認証以外の認証情報はすべて、サードパーティの拡張機能の使用によって保存されたと述べました。

「組み込みの Github/Microsoft 認証を除き、VSCode に保存されたすべてのトークンは拡張機能から取得されます」と Ilgayev 氏は語りました。

「それらは、Git、Azure、Docker/Kubernetes などの (Microsoft の) 公式拡張機能、または CircleCI、GitLab、AWS などのサードパーティ拡張機能によって定義されます。」

ログイントークンを含むキーチェーン
ログインパスワードを含むキーチェーン
出典: サイコード

この問題を発見した Cycode の研究者は、VS Code 拡張機能を備えた人気のコーディング プラットフォームである CircleCI のトークンを盗む悪意のある拡張機能を作成する実験を開始しました。彼らは、CircleCI の拡張機能を変更して、安全なトークンを公開し、研究者のサーバーに直接送信するコマンドを実行することでこれを実現しました。

彼らは徐々に、ターゲット拡張機能のコードを改ざんせずにこれらの秘密を抽出する、より汎用性の高い攻撃方法を開発しました。

このプロセスの鍵は、VS Code 拡張機能がオペレーティング システムによってキーチェーンへのアクセスをすでに許可されているアプリケーション内から実行されるため、キーチェーンへのアクセスが許可されていることを発見することでした。

「私たちは、他の拡張機能だけでなく、GitHub および Microsoft アカウント用の VS Code の組み込みログインおよび同期機能からもトークンを取得することに成功した、概念実証の悪意のある拡張機能を開発しました。これにより、「トークン窃取」攻撃が行われました。」 – Cycode。

次に、取得したトークンを復号化する必要がありましたが、Cycode は、トークンの暗号化に使用されているアルゴリズムが、通常は安全である AES-256-GCM であることを発見しました。ただし、トークンの暗号化に使用されるキーは現在の実行可能パスとマシン ID から派生するため、キーの再作成が簡単になります。

取得したトークンを復号化する
シークレットの解読に役立つ情報
出典: サイコード

取得されたトークンは、VS Code の Electron 実行可能ファイルで実行されるカスタム JS スクリプトによって復号化され、ローカルにインストールされた拡張機能のすべてのパスワードが解読されて出力されます。

取得したトークンを復号化する
取得したトークンを復号化する
出典: サイコード

Cycode の研究者によって発見された 2 番目の欠陥は、「getFullKey」関数が、拡張機能の名前と発行者から派生した特定の「extensionId」によってシークレットを取得するというものでした。

この問題により、誰でもこれらのフィールドを変更し、VS Code を騙して別の拡張機能の安全なトークンへのアクセスを許可することができます。

Cycode は、CircleCI を再び模倣した PoC 拡張機能を使用してこれをテストしました。ただし、他の拡張機能を複製してその秘密にアクセスすることは簡単であると彼らは指摘しました。

開示と修正(ではない)

Cycode は、2 か月前にこの問題を Microsoft に公開し、PoC 拡張機能と保存されている拡張機能トークンを盗む機能も実証したと述べました。

いずれにせよ、Microsoft のエンジニアはこれをセキュリティ上の懸念とは考えず、VS Code のシークレット ストレージ管理フレームワークの既存の設計を維持することにしました。

は上記に関するコメントを求めて Microsoft に問い合わせましたが、質問に対する回答は得られていません。