[重要] @a2ui/web_coreにおけるクリティカルなXSS脆弱性(CVE-2026-10032)について
はじめに:@a2ui/web_coreとその脆弱性
フロントエンド開発において、UIコンポーネントライブラリやフレームワークは開発効率を大幅に向上させます。しかし、その根幹部分に潜む脆弱性は、アプリケーション全体に甚大な影響を及ぼす可能性があります。今回は、A2UIプロジェクトのコアライブラリである`@a2ui/web_core`に発見された、深刻度『Critical』のXSS脆弱性(GHSA-72qq-p3r5-f7wq / CVE-2026-10032)について、日本のフロントエンドエンジニアの皆様に向けて詳しく解説します。
本脆弱性は、`openUrl`関数が提供するURLスキームの検証不備に起因し、ユーザーがクリックするだけで任意のJavaScriptが実行されてしまうというものです。この機会に、ご自身のプロジェクトが影響を受けていないか確認し、適切な対策を講じてください。
脆弱性の詳細:`javascript:` URIによる任意コード実行
この脆弱性の核心は、`@a2ui/web_core`の`openUrl`関数が、与えられたURLを`window.open()`に直接渡す際に、URIスキームの適切な検証を行わない点にあります。具体的には、悪意のあるエージェント(攻撃者)が`Button`コンポーネントのアクションに`javascript:`スキームを持つURLを仕込むことで、ユーザーがそのボタンをクリックした際に、ブラウザ上で任意のJavaScriptコードを実行させることが可能になります。
`window.open()`関数は、`javascript:`スキームのURLを受け取ると、その後に続く文字列をJavaScriptコードとして解釈し実行する特性があります。通常、これをアプリケーション側で無効な入力としてフィルタリングする必要がありますが、`@a2ui/web_core`の脆弱なバージョンではそのチェックが欠けていました。
具体的なコードとデータフロー
脆弱なコードは以下の部分にありました。
---
`renderers/web_core/src/v0_9/basic_catalog/functions/basic_functions.ts:428-430`
```ts export const OpenUrlImplementation = createFunctionImplementation(OpenUrlApi, args => { if (args.url && typeof window !== 'undefined' && window.open) { window.open(args.url, '_blank'); } }); ```
---
上記のコードでは、`args.url`が何の検証もなしに`window.open()`に渡されています。また、`OpenUrlApi`のZodスキーマも単に`string`型であることを要求するだけで、スキームの検証は行われていませんでした。
この問題は、`Button`コンポーネントが`ActionSchema`を受け入れ、その`ActionSchema`が`functionCall`を許容するというデータフロー全体を通じて発生します。最終的に、攻撃者が設定した`javascript:alert(document.domain)`のようなURLが`openUrl`関数に到達し、実行されてしまいます。
影響範囲と深刻度
本脆弱性は、`@a2ui/web_core`のバージョン`0.10.2`未満を使用している全てのA2UIレンダラーに影響します。公式に提供されているReact、Lit、Angularのレンダラーはもちろん、`web_core`の基本カタログに依存するカスタムレンダラーも対象となります。
XSS(クロスサイトスクリプティング)は、攻撃者がユーザーのブラウザ上で任意のJavaScriptコードを実行できる非常に危険な脆弱性です。これにより、以下のような深刻な攻撃が可能になります。
<ul><li>ユーザーのセッションハイジャック(クッキーの盗難)</li><li>個人情報や機密データの窃取</li><li>表示内容の改ざん(フィッシング詐欺など)</li><li>悪意のあるリダイレクト</li></ul>
これらの理由から、本脆弱性は『Critical』と評価されており、迅速な対応が求められます。
対策:`@a2ui/web_core`のバージョンアップを!
この脆弱性は、`@a2ui/web_core`のバージョン`0.10.2`で修正されています。修正内容としては、`openUrl`関数が受け入れるURLスキームを`http:`と`https:`に限定し、それ以外のスキームや無効なURLはブロックするようになりました。
皆様のプロジェクトでは、直ちに`@a2ui/web_core`をバージョン`0.10.2`以上にアップデートすることを強く推奨します。
```bash # npmの場合 npm install @a2ui/web_core@latest # yarnの場合 yarn upgrade @a2ui/web_core --latest ```
プロジェクトの依存関係を確認し、`package.json`や`yarn.lock`、`pnpm-lock.yaml`などで使用されているバージョンを最新に更新してください。
フロントエンドエンジニアが学ぶべき教訓
今回の脆弱性は、UIライブラリの便利さと引き換えに、URLや外部からの入力を適切に検証することの重要性を改めて示しています。
<ul><li>**外部入力のサニタイズと検証**: ユーザー入力やAPIからのデータ、特にURLは常に信頼せず、アプリケーションの期待する形式やスキームに合致するか厳格に検証する必要があります。</li><li>**既知の脆弱性情報のチェック**: 依存ライブラリの脆弱性情報は、GitHub Security AdvisoriesやNVDなどを定期的にチェックし、SnykやDependabotのようなツールを活用して自動で検出・通知される仕組みを構築しましょう。</li><li>**`window.open()`の利用に注意**: `window.open()`や`innerHTML`、`eval()`などの関数は、XSSのリスクを高める可能性があるため、利用する際には細心の注意を払い、可能な限り安全な代替手段を検討してください。</li></ul>
まとめ
`@a2ui/web_core`におけるクリティカルなXSS脆弱性(CVE-2026-10032)は、迅速な対応が求められる深刻な問題です。`0.10.2`未満のバージョンを利用している場合は、速やかにアップデートを実施し、攻撃のリスクからアプリケーションとユーザーを保護してください。
安全なフロントエンドアプリケーション開発のためには、常に最新のセキュリティ情報をキャッチアップし、脆弱性対策を怠らないことが不可欠です。本記事が皆様のセキュリティ対策の一助となれば幸いです。