[緊急警告] orvalのZodクライアントに深刻なリモートコード実行の脆弱性 (CVE-2026-71866) が発覚
脆弱性概要:orval ZodクライアントにおけるImport-time RCE
`orval`はOpenAPI/Swagger仕様からTypeScriptの型定義、APIクライアント、そしてデータ検証ライブラリである`zod`のスキーマなどを自動生成するツールです。今回報告されたGHSA-6mr6-jvcr-2f25 (CVE-2026-71866) は、この`orval`が生成する`zod`クライアントのコードに潜む深刻な脆弱性です。この脆弱性を悪用されると、悪意のあるOpenAPI仕様に基づいて生成されたコードをインポートするだけで、攻撃者が任意のコードを実行できる「リモートコード実行(RCE)」が可能になります。
どのようにしてRCEが発生するのか?技術的詳細
この脆弱性の根本原因は、`orval`が`zod.object({...})`を生成する際に、スキーマのプロパティ名を適切にエスケープせずにJavaScriptのオブジェクトキーとして埋め込んでいる点にあります。
通常、JavaScriptのオブジェクトリテラルでは、キーは文字列リテラルとして二重引用符で囲まれます。例えば `{ "propertyName": value }` のようにです。しかし、悪意のあるプロパティ名に `"` (二重引用符) が含まれている場合、`orval`がそのプロパティ名をエスケープせずにコード生成すると、生成されるコードは以下のようになります。
具体例として、PoCではプロパティ名に `"a":zod.string(),[require("fs").writeFileSync("PWNED","")]:zod.string(),"b` のような文字列が与えられます。`orval`はこれをエスケープせずに埋め込むため、生成されるコードは以下のようになります。
```ts export const OpBody = zod.object({ "a":zod.string(),[require("fs").writeFileSync("PWNED","")]:zod.string(),"b": zod.string().optional() }) ```
このコードでは、`"a"` の後の `"` が予期せず文字列キーを閉じ、その直後に `[require("fs").writeFileSync("PWNED","")]` というJavaScriptの「算出プロパティキー(computed property key)」が注入されています。算出プロパティキーは、オブジェクトが定義される際に内部の式が評価されます。
さらに重要な点は、このコードが `export const X = ...` という形式で生成されるため、このモジュールが`import`される際に、注入された`require("fs").writeFileSync("PWNED","")`が自動的に実行されてしまう点です。これにより、特別な操作をせずとも、単にモジュールをインポートするだけで攻撃者の意図するコード(例: ファイル書き込み、`child_process`を使ったOSコマンド実行)が実行されることになります。これは「Import-time RCE」と呼ばれ、非常に危険な脆弱性です。
想定される影響とリスク
この脆弱性の深刻度は「Critical」と評価されており、CVSSスコアでも最も高いレベルに相当します。
攻撃者は、OpenAPI/Swagger仕様を改ざんするか、悪意のある仕様を配布することで、これを利用して`orval`でクライアントコードを生成した開発者の環境で任意のコードを実行できます。これは開発環境だけでなく、CI/CDパイプラインや、場合によってはビルドされた成果物にも影響を及ぼす可能性があります。
特に、外部から提供された、あるいは信頼できないOpenAPI仕様を`orval`で処理しているプロジェクトは、直接的なリスクに晒されています。
対策方法
**1. orvalのバージョンアップ**: この脆弱性は`orval`のバージョン8.19.0で確認されています。最新バージョンへのアップデートが最も重要な対策となります。`orval`のメンテナーは、プロパティ名をJavaScript文字列キーとして適切にエスケープする(`JSON.stringify`のような手法を用いる)修正を推奨しています。
**2. 信頼できないOpenAPI仕様の利用回避**: 不明なソースや信頼できない第三者から提供されたOpenAPI/Swagger仕様を`orval`で直接処理することは避けてください。可能な限り、仕様の内容をレビューし、不正なプロパティ名が含まれていないか確認する習慣をつけましょう。
**3. 生成されたコードのレビュー**: 自動生成されたコードであっても、セキュリティ上重要な部分(特に外部からの入力が影響する箇所)については、定期的にレビューを行い、予期せぬコードや不審なパターンが含まれていないか確認することが望ましいです。
まとめ
`orval`のZodクライアントにおけるリモートコード実行の脆弱性は、開発プロセスにおいてコード生成ツールの入力に対する信頼性を再考させる重要な警鐘です。開発者の皆さんは、利用している`orval`のバージョンを確認し、速やかに適切な対策を講じてください。安全なフロントエンド開発環境を維持するため、常に最新のセキュリティ情報を追い、迅速に対応することが求められます。