Modern Frontend CVEs

対象CVE: CVE-2026-54662

[緊急解説] swagger-typescript-apiに危険なコードインジェクション脆弱性 (GHSA-hqj5-cw9f-rx67)

『swagger-typescript-api』で生成されるAPIクライアントにコードインジェクション脆弱性が発見されました。悪意のあるOpenAPI仕様を渡されると、生成されたコードをimportするだけで任意のコードが実行されるため、速やかな対策が必要です。

はじめに:『swagger-typescript-api』の深刻な脆弱性とは

日本のフロントエンドエンジニアの皆さん、こんにちは。今回は、OpenAPI仕様からTypeScriptのAPIクライアントコードを自動生成する人気ツール『swagger-typescript-api』に発見された、非常に危険なコードインジェクション脆弱性(GHSA-hqj5-cw9f-rx67 / CVE-2026-54662)について解説します。この脆弱性は深刻度 'high' と評価されており、悪用されると、皆さんの開発環境やCI/CDパイプライン、さらには本番環境にまで影響を及ぼす可能性があります。対策を急ぎましょう。

脆弱性の詳細:なぜ危険なのか?

この脆弱性の根源は、『swagger-typescript-api』がAPIクライアントコードを生成する際に、OpenAPI仕様の `servers[0].url` フィールドの値を適切にエスケープせずに、生成されるTypeScriptクラスの `baseUrl` フィールドの文字列リテラルに直接埋め込んでいたことにあります。

具体的には、攻撃者は `servers[0].url` に、例えば `https://api.example.com"; static _pwn = (IIFE)(); public x: string = "` のような悪意のある文字列を仕込むことができます。これにより、生成されるTypeScriptコード内で文字列リテラルが意図せず閉じられ、その後に攻撃者が指定した任意のTypeScriptコードが挿入されてしまいます。この挿入されたコードは、生成されたクライアントモジュールが単に `import` されるだけで、自動的に実行されてしまうという点が極めて危険です。

通常の脆弱性では、特定の関数を呼び出したり、インスタンスを生成したりしないとコードが実行されないケースが多いですが、この脆弱性はモジュールを読み込むだけで攻撃が成立します。つまり、APIクライアントを使用していなくても、プロジェクト内でこの生成コードが読み込まれるだけで、攻撃者の意図する任意のコード(例えば `fs` モジュールを使ったファイル読み書き、ネットワーク通信、子プロセス起動など)が、そのプロセスが持つ権限で実行されてしまうのです。PoCでは `/etc/passwd` ファイルの内容を読み取ることが確認されています。

特に注意すべきプロジェクトと環境

以下のような状況で開発を行っているプロジェクトは、特にこの脆弱性の影響を受けやすいと考えられます。

<ul><li>**外部のURLからOpenAPI仕様を取得してクライアントコードを生成している場合**: 信頼できない第三者が公開しているAPI仕様を使用していると、悪意のある仕様を取り込んでしまうリスクがあります。</li><li>**CI/CDパイプラインで自動生成を行っている場合**: ベンダーやパートナーから提供された、あるいは不特定の開発者が関わるプロジェクトの仕様ファイルから、自動的にクライアントコードを生成している場合、潜在的なリスクがあります。</li><li>**ユーザー提供の仕様からクライアントを生成する多テナントSaaS**: ユーザーが独自のAPI仕様をアップロードしてクライアントを生成するようなサービスでは、悪意あるユーザーが攻撃を仕掛ける可能性があります。</li><li>**コントリビューターが仕様ファイルを変更できるOSSプロジェクト**: 不特定多数のコントリビューターが参加するプロジェクトで、OpenAPI仕様の変更を含むプルリクエストが適切にレビューされずにマージされると、悪意が混入する可能性があります。</li></ul>

今すぐ取るべき対策

この脆弱性に対しては、速やかな対応が求められます。以下の対策を検討してください。

<ul><li>**『swagger-typescript-api』を最新の修正済みバージョンにアップデートする**: これが最も推奨される、かつ簡単な対応策です。脆弱性が修正されたバージョンに更新することで、自動的に安全なコードが生成されるようになります。</li><li>**根本的な修正としてエスケープ処理を導入する(もしテンプレートをカスタマイズしている場合)**: `servers[0].url` の値をコードに埋め込む前に、JavaScriptの文字列リテラルとして安全にエスケープする処理(例: `JSON.stringify` 関数でエスケープしてから、生成される文字列の前後の引用符を削除する)を導入してください。具体的には、`fetch-http-client.ejs` および `axios-http-client.ejs` テンプレート内の該当箇所を確認し、修正が必要です。しかし、**自己修正よりも公式アップデートが圧倒的に安全かつ確実です。**</li><li>**信頼できないソースのOpenAPI仕様は慎重にレビューする**: 外部から取得したOpenAPI仕様を使用する際は、その内容、特に `servers[0].url` のような文字列が埋め込まれる可能性のあるフィールドについて、悪意のある記述がないか細心の注意を払ってレビューしてください。</li></ul>

まとめ

『swagger-typescript-api』のコードインジェクション脆弱性は、その実行タイミングと影響範囲の広さから、非常に危険です。特にフロントエンド開発においては、npmパッケージや外部ツールに潜むこのようなサプライチェーン攻撃のリスクを常に意識する必要があります。ご自身のプロジェクトで『swagger-typescript-api』を使用している場合は、すぐにバージョンを確認し、最新版へのアップデートを強くお勧めします。セキュリティは常に最新の状態を保つことが重要です。安全な開発を心がけましょう。

← ブログ一覧に戻る