Modern Frontend CVEs

対象CVE: CVE-2026-71867

[緊急警告] OrvalのRCE脆弱性 (CVE-2026-71867) 解説と対策

OpenAPI仕様からコードを生成する人気ツールOrvalのMSWモック生成機能に、深刻度CriticalのRCE脆弱性が見つかりました。悪意のあるOpenAPIスペックを処理すると、開発環境で任意のコードが実行される可能性があります。

1. Orvalとは何か?

Orvalは、OpenAPI (Swagger) 仕様書からTypeScriptの型定義、APIクライアント、そしてMSW (Mock Service Worker) のモックなどを自動生成してくれるツールです。APIスキーマからコードを自動生成することで、開発の効率化と型安全性の向上に大きく貢献するため、多くのフロントエンドプロジェクトで利用されています。

2. 脆弱性の概要と深刻度

今回発見された脆弱性 (GHSA-2w86-xfrc-g85r / CVE-2026-71867) は、OrvalがMSWモックを生成する際の処理に起因するRemote Code Execution (RCE) の脆弱性であり、深刻度は最も高い「Critical」と評価されています。この脆弱性が悪用されると、攻撃者が制御するOpenAPIスペックをOrvalで処理した開発者のマシン上で、任意のJavaScriptコードやOSコマンドが実行される危険性があります。

3. 具体的な脆弱性のメカニズム

Orvalは、`output.mock: true` の設定でMSWモックを生成する際、OpenAPIスキーマで定義されたプロパティ名をJavaScriptのオブジェクトリテラルのキーとして出力します。この際、プロパティ名に含まれるシングルクォート(`'`)が適切にエスケープされないという問題がありました。

具体的には、以下のような悪意のあるプロパティ名がOpenAPIスペックに含まれていたとします。

`x': 0, [require("fs").writeFileSync("PWNED","")]: 0, 'y`

通常、JavaScriptのオブジェクトリテラルではキーは文字列として扱われますが、`[ ]` で囲むことで任意のJavaScript式を評価し、その結果をキーとして使用する「Computed Property Key」という機能があります。

脆弱なOrvalは、この悪意あるプロパティ名をエスケープせずにそのままモックコードに埋め込んでしまい、結果として以下のようなコードが生成されていました。

```ts export const getOpResponseMock = (...): Thing => ({'x': 0, [require("fs").writeFileSync("PWNED","")]: 0, 'y': faker...., ...overrideResponse}); ```

この生成されたモックファクトリ関数が、テスト実行時やMSWハンドラーでモックが使用される際に呼び出されると、`[require("fs").writeFileSync("PWNED","")]` の部分が評価され、`require("fs").writeFileSync("PWNED","")` が実行されてしまいます。これにより、ファイルシステムへの書き込みなど、Node.js環境における任意のJavaScriptコードやOSコマンドの実行が可能となるのです。

4. フロントエンド開発者への影響

この脆弱性は、フロントエンド開発者が日常的に使用するツールチェーンに直接的なリスクをもたらします。

### 開発環境でのRCEリスク

攻撃者が制御するOpenAPI/Swaggerスペックファイル(例えば、公開リポジトリや信頼できないソースからダウンロードしたもの)を基にOrvalでモックを生成し、その生成されたモックを含むテストコードを実行したり、MSWでモックサーバーを起動したりすると、開発者のPC上で任意のコードが実行される可能性があります。これにより、機密情報の窃取、システムの改ざん、バックドアの設置など、深刻な被害につながりかねません。

### CI/CD環境への波及

もしCI/CDパイプライン上で外部のOpenAPIスペックを自動的に取得し、Orvalでモックを生成・テストしている場合、CI/CD環境自体もRCEの標的となる可能性があります。ビルドサーバーが侵害されると、サプライチェーン攻撃に発展するリスクも考えられます。

5. 対策と推奨事項

開発元からは、この脆弱性に対する修正がリリースされています。迅速な対応が求められます。

### Orvalのバージョンアップ

まず第一に、使用しているOrvalのバージョンを脆弱性が修正された最新バージョンに速やかにアップデートしてください。公式ドキュメントやリリースノートを確認し、安全なバージョンに移行することが最優先です。

GitHub Advisoryによると、修正は特定のコミットで行われていますが、常に最新の安定版を使用することが推奨されます。

### 最新情報のリソース

* GitHub Advisory: [GHSA-2w86-xfrc-g85r](https://github.com/advisories/GHSA-2w86-xfrc-g85r)

### OpenAPIスペックの信頼性確認

外部から取得するOpenAPIスペックファイルについては、その信頼性を常に確認し、不明なソースからのファイルは安易に利用しないようにしてください。可能であれば、スペックファイルのレビュー体制を設けることを推奨します。

### ビルド・テスト環境の分離

開発環境やCI/CD環境において、信頼できない入力を処理するプロセスは、可能な限りサンドボックス化された環境や権限の低いユーザーで実行することを検討してください。これにより、仮に攻撃が成功したとしても、被害範囲を限定できる可能性があります。

### 開発者向けの技術的修正について

Orvalの内部的な修正としては、プロパティ名をJavaScriptの文字列キーとして安全にエスケープすること(例えば`JSON.stringify`を使用すること)が挙げられています。また、オブジェクトリテラルの`[ ]`の隣に生のプロパティ名を補間しないよう、コード生成ロジックを見直すことが重要です。

6. まとめ

OrvalのMSWモック生成機能におけるRCE脆弱性は、フロントエンド開発者が直面する可能性のある重大なリスクです。OpenAPIスペックを扱う全ての開発者は、この脆弱性の影響を理解し、速やかにOrvalを最新バージョンにアップデートするなどの対策を講じることが求められます。常に利用しているライブラリやツールのセキュリティ情報に注意を払い、安全な開発プラクティスを心がけましょう。

← ブログ一覧に戻る