Angular Language Serviceの脆弱性がリモートコード実行を可能にする

VS Code Angular Language Serviceエクステンション(Angular.ng-template)において深刻度の高い脆弱性が公開されました。この脆弱性により、攻撃者は悪意のあるプロジェクトフォルダを開くだけで、開発者のマシン上で任意のコードを実行できます。

メンテナーのalan-agius4によってGHSA-ccq4-xmxr-8hcqとして公開されたこの脆弱性は、バージョン21.2.4より前のすべてのエクステンションバージョンに影響し、機密性・完全性・可用性のいずれにおいても高い影響を示すCVSS v4.0スコアが付与されています。

この公開は特に重大な時期と重なっています。わずか数日前、11〜18分間だけ活動した侵害済みのNx Console VS Codeエクステンションが、約3,800件の内部GitHubリポジトリに侵入し、GitHub・npm・AWS・Kubernetes・HashiCorp Vaultから認証情報を窃取しました。

Angular Language Serviceのアドバイザリは、開発者のIDEツールを直接標的とする攻撃対象領域が拡大していることを浮き彫りにしています。

アドバイザリには、それぞれ単独でホストの完全な侵害を達成できる、複数の異なる実行チェーンが詳述されています。

JSDocホバーMarkdownコマンドインジェクション(CWE-94、CWE-79):エクステンションのクライアント側コード(client/src/client.ts)は、VS CodeのMarkdownツールチップレンダラーをisTrusted: trueフラグで設定しており、アクティブコンテンツを有効にしています。

しかしAngular Language Serverは、server/src/handlers/hover.tsおよびserver/src/text_render.tsを通じてホバーコンテンツを転送する前に、JSDoc文字列内の括弧や生リンクをサニタイズまたはエスケープしません。

Atscott氏によると、攻撃者はTypeScriptやJavaScriptファイルのJSDocコメント内、あるいはサードパーティのnpmパッケージの依存関係に悪意のあるcommand: URIを埋め込むことができます。

開発者がアノテーションされたシンボルにカーソルを合わせ、レンダリングされたツールチップリンクをクリックすると、VS Codeはホストマシン上でインジェクションされたコマンドを実行します。

非サニタイズのtsdk ワーク スペース構成 / 安全でない動的ライブラリのロード(CWE-427、CWE-494):エクステンションは、VS CodeのWorkspace Trustモデルを検証したり開発者の同意を求めたりすることなく、リポジトリレベルの.vscode/settings.jsonファイルから直接typescript.tsdkおよびjs/ts.tsdk.pathのワークスペース設定を読み取ります。

Alan-Agius4氏によると、このパスはバックグラウンドのNode.js言語サーバーへの--tsdk引数として渡され、Nodeネイティブのrequire()を介して攻撃者が制御するディレクトリからtsserverlibrary.jsを動的にロードします。

悪意のあるtsserverlibrary.jsを細工した.vscode/settings.jsonとともにリポジトリに配置するだけで十分であり、ユーザーの操作はまったく必要ありません。エクステンションはワークスペースの初期化時にスクリプトを静かにロードして実行します。

どちらの攻撃ベクターも、悪意のあるリポジトリから開発者を保護するために特別に設計されたVS CodeのWorkspace Trust機能の中核的な保証を回避します。

tsdkの経路は特に潜伏性が高く、フォルダを開く際にバックグラウンドで完全に実行されます。つまり、git clone・コードレビュー・依存関係の監査といった日常的な操作が、Angularチームが述べているように、直接のシェルレベルのエクスプロイトとなります。

セキュリティ研究者たちはIDEエクステンションをサプライチェーン攻撃の高価値なベクターとして警告を強めており、Live Server(7,200万件以上のインストール)・Code Runner(3,700万件以上のインストール)・Markdown Preview Enhancedを含む人気エクステンションでも、最近重大な脆弱性が確認されています。

この脆弱性のベクターはCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:Nであり、ネットワーク経由の配信、低い攻撃複雑性、特権不要を反映しています。

4つのCWE弱点がマッピングされています:CWE-79(クロスサイトスクリプティング)、CWE-94(コードインジェクション)、CWE-427(非制御検索パス要素)、CWE-494(整合性チェックなしのコードのダウンロード)。現時点ではCVE識別子は割り当てられていません。

Angular Language Serviceエクステンションを使用している開発者は、Angularリポジトリのプルリクエスト#68857、#68858、#68859、#68886にわたる修正が適用されたバージョン21.2.4に直ちに更新する必要があります。

パッチ適用に加えて、セキュリティの専門家はVS Codeエクステンションの自動更新を無効にしてアップグレード前に変更内容を確認すること、およびサイレントなサプライチェーン型の侵害を防ぐためdevcontainer.jsonファイルでエクステンションのバージョンを固定することを推奨しています。

組織はエンジニアリングエンドポイント全体のIDEエクステンションを監査し、検証済みバージョンに固定されていないものはすべて削除するとともに、脆弱なバージョンを実行している開発者のワークステーションは侵害されている可能性があるものとして扱い、アクセス可能なすべてのシークレットや認証情報をローテーションすることが求められます。

翻訳元: https://cyberpress.org/angular-language-service-flaws/

ソース: cyberpress.org