[緊急] Inngest TypeScript SDKの環境変数漏洩脆弱性(GHSA-2jf5-6wwv-vhxx)と対策
はじめに
日本のフロントエンドエンジニアの皆様、こんにちは。今回は、皆さんのシステムで利用されている可能性のあるInngest TypeScript SDKに関する重要なセキュリティ脆弱性(GHSA-2jf5-6wwv-vhxx / CVE-2026-42047)について解説します。この脆弱性は、特定の条件下でサーバーの環境変数が外部に漏洩する危険性があり、"high" の深刻度と評価されています。システムの安全性確保のため、詳細を理解し、速やかに対応を講じることが求められます。
脆弱性の概要
この脆弱性は、Inngest TypeScript SDKのバージョン 3.22.0 から 3.53.1 (両端含む) に存在します。通常、Inngestの serve() ハンドラは GET, POST, PUT といった一般的なHTTPリクエストを処理しますが、 PATCH, OPTIONS, DELETE のようなInngest側で対応していないHTTPメソッドが来た場合、内部の診断情報を返す汎用ハンドラにフォールバックします。
問題は、バージョン 3.22.0 で導入された変更により、この診断応答に**サーバーの環境変数(process.envの内容)**が含まれてしまうようになった点です。これにより、APIキー、秘密情報、認証情報といった機密性の高い情報が、認証されていない外部の攻撃者によって容易に取得されてしまうリスクが生じます。万が一、これらの情報が漏洩すれば、システムへの不正アクセスやデータの改ざん、なりすましなど、甚大な被害につながる可能性があります。
あなたのシステムは影響を受けますか?
以下の2つの条件を両方満たす場合、あなたのアプリケーションはこの脆弱性の影響を受けます。
- Inngest SDKのバージョンが 3.22.0 以上 3.53.1 以下である。
- serve() エンドポイントが PATCH, OPTIONS, または DELETE リクエストで到達可能である。
特に、Next.jsの**Pages Router**を利用している場合や、Expressで app.use('/api/inngest', serve(...)) のように設定している場合は注意が必要です。これらの環境では、上記のHTTPメソッドがデフォルトでハンドラに転送されるため、脆弱である可能性が高いです。
一方、Next.jsの**App Router**で GET, POST, PUT のみを明示的にエクスポートしている場合、あるいはSDKのバージョンが 3.22.0 未満、または 3.54.0 以降 (4.x系を含む) の場合は、この脆弱性の影響を受けません。現時点では、この脆弱性が実際に悪用されたという報告はありませんが、潜在的なリスクは非常に高いと言えます。
最優先で実施すべき対策
この脆弱性からシステムを保護するためには、以下の対策を速やかに実施してください。
- **Inngest SDKのアップグレード**: 最も重要な対策です。`inngest@3.54.0` 以降のバージョン、または4.x系のSDKに即座にアップグレードしてください。これは脆弱性の根本的な修正を含んでいます。アップグレードコマンド例: `npm install inngest@latest` または `yarn upgrade inngest@latest`
- **秘密情報のローテーション**: 脆弱な期間中に process.env 内に存在した可能性のある、Inngestの署名キーやイベントキーを含む、すべてのAPIキー、秘密情報、認証情報などを**念のため変更(ローテーション)**してください。漏洩の有無に関わらず、万が一に備えることが重要です。
- **アクセスログの確認**: serve エンドポイントへのアクセスログを調査し、 PATCH, OPTIONS, DELETE といったHTTPメソッドでのリクエストがないか確認してください。これにより、実際に環境変数が外部に漏洩した可能性を評価できます。
さらなるセキュリティ強化策
上記の必須対策に加え、システムのセキュリティを一層強化するために、以下の対策も検討してください。
- **古いデプロイの管理**: VercelやCloudflare Workersなどのプラットフォームでは、以前のデプロイが不変のURLで残り、新しいデプロイ後も古いデプロイが脆弱性を露呈し続ける可能性があります。不要な古いデプロイは削除するか、Vercelの「Deployment Protection」などの機能を利用して、迅速な緩和を図りましょう。
- **Inngest公式IPアドレスからのアクセス制限**: ファイアウォールやリバースプロキシ(例: Nginx, Cloudflare)の設定で、serve エンドポイントへのアクセスを、Inngestの公式IPアドレス(IPv4: http://inngest.com/ips-v4、IPv6: http://inngest.com/ips-v6)からのみ許可するように制限することも非常に有効です。これにより、不正なリクエストをブロックできます。
アップグレードが困難な場合の一時的な回避策
SDKのアップグレードが直ちに実施できない場合は、以下の**一時的な回避策**を適用することで、リスクを軽減できます。
フレームワークやリバースプロキシの層で、serve() エンドポイントが GET, POST, PUT のHTTPメソッドのみを受け付けるように設定を制限してください。Inngestの serve() エンドポイントは、これらの3つ以外のHTTPメソッドを必要としません。例えば、Next.jsのAPIルートであれば、`export const config = { runtime: 'nodejs' }` と共に `export function GET(...)` `export function POST(...)` `export function PUT(...)` のみを記述するなどです。
まとめ
今回のInngest TypeScript SDKの脆弱性は、サーバーの機密情報が漏洩する可能性のある、非常に深刻な問題です。日本のフロントエンドエンジニアの皆様におかれましては、ご自身のプロジェクトでInngest SDKを使用しているかどうか、そしてそのバージョンが脆弱性の影響を受ける範囲内にあるかどうかを速やかに確認し、推奨される対策を講じていただくようお願い申し上げます。
セキュリティは、現代のWebアプリケーション開発において最も重要な要素の一つです。常に最新の情報をキャッチアップし、脆弱性対策を怠らないようにしましょう。