fastapi-code-generatorの脆弱性3件、修正版あり
fastapi-code-generatorの0.8.1より前に、OpenAPIファイルの文字列からPythonコードを注入される脆弱性が3件見つかり、CVSS v4はいずれも9.3です。外部由来の定義を扱う環境は、0.8.1へ更新し、生成済みコードも作り直してください。
同じ発表の脆弱性 3 件
- CVE-2026-63470 重大 9.3
- CVE-2026-63469 重大 9.3
- CVE-2026-63471 重大 9.3
急ぎ度: 早めに
3件ともCVSS v4が9.3の深刻度で修正版0.8.1が出ており、OpenAPIファイルに外部由来の文字列が入る環境は、早めの更新が妥当です。
関係があるか
OpenAPIファイルからfastapi-code-generatorでFastAPIのコードを生成している開発チームやCI環境が対象です。定義ファイルに社外や他チームが書いた内容、自動生成された内容が混ざる場合は、とくに当てはまります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| fastapi-code-generator | 0.8.1より前のすべての版 | 0.8.1 |
確かめ方
- 1開発環境とCIの両方で、導入されている版を確認します。
pip show fastapi-code-generatorでVersionの行を見て、0.8.1未満なら対象です。 - 2requirements.txtやpyproject.toml、ロックファイルで、版が固定されていないか、0.8.1より前に固定されていないかを確認します。
- 3コード生成に使うOpenAPIファイルの出どころを洗い出します。外部から取り込む定義や、他のツールが自動生成する定義があれば、悪用の入口になりえます。
何が起きたか
fastapi-code-generatorは、OpenAPIファイルからFastAPIアプリのPythonコードを生成するツールです。0.8.1より前の版では、定義ファイルの文字列を生成コードに埋め込むとき、引用符を無害化していません。そのため、細工された文字列が通常のデータの範囲を越えて、生成コードの一部として実行される脆弱性が3件あります。埋め込み先は、パス、summary、追加の応答キーの3か所で、それぞれ別の箇所の問題として登録されています。
- CVE-2026-63470: operationのsummaryが生成コードのdocstringに入る箇所で、細工された文字列があると、対象の経路が呼び出された時点で任意のPythonコードが実行されます(CVSS v4は9.3)
- CVE-2026-63469: 複数の応答を持つoperationで、主たる応答以外の応答キーが細工されていると、生成されたモジュールをimportした時点で任意のPythonコードが実行されます(CVSS v4は9.3)
- CVE-2026-63471: OpenAPIのパスが生成コードの経路定義に入る箇所で、細工された文字列があると、生成されたモジュールをimportした時点で任意のPythonコードが実行されます(CVSS v4は9.3)
3件とも0.8.1で修正されています。構文を壊す入力では生成自体が失敗するだけで、構文として成立するコードが生成されたときに限り、実行まで進みます。
攻撃の流れ
-
1
定義に文字列混入
OpenAPIファイルのパス、summary、応答キーのいずれかに、細工された文字列が入ります。
-
2
コード生成
生成ツールが文字列を無害化せずに、Pythonコードへそのまま埋め込みます。
-
3
生成コードを実行
モジュールのimport時、または経路の呼び出し時に、埋め込まれた式が評価されます。
-
4
プロセス権限で動作
アプリやCIのプロセスが持つ権限で、意図しない処理が走ります。
どう悪用されるか
CVSSの評価では、ネットワーク経由で、認証も利用者の操作も要らないとされています。ただし実際には、細工された文字列がコード生成に使うOpenAPIファイルの中に入っていることが前提です。自分たちだけで書いて、レビューしているファイルであれば入口は狭くなります。外部から取り込む定義や、他のツールが自動生成する定義を使っている場合は、前提を満たしやすくなります。
3件のあいだで、コードが実行されるタイミングと権限が違います。CVE-2026-63470は、生成された経路のハンドラが呼び出されたときに、サーバープロセスの権限で動きます。CVE-2026-63469とCVE-2026-63471は、生成されたモジュールがimportされた時点で動くため、アプリの起動時やテスト、CIの実行中にも起こりえます。CVE-2026-63469は、複数の応答を持つoperationで、主たる応答以外のキーが細工されている場合に限ります。
悪用が成立すると、任意のPythonコードがプロセスの権限で動き、機密性、完全性、可用性のすべてに高い影響が出ます。CIで起きれば、そこに置かれた認証情報やソースコードが影響範囲に入ります。
今すぐやること
-
1
導入している版を確認する
開発者のパソコン、ビルド用の環境、CIのイメージのそれぞれで、fastapi-code-generatorの版を調べます。複数の環境に入っていることが多いので、見落としに注意します。
pip show fastapi-code-generator -
2
修正版に更新する
fastapi-code-generatorを修正版に更新し、requirements.txtやロックファイルの固定版も書き換えます。更新の内容と詳細は、開発元のGitHubのセキュリティアドバイザリとリリースの告知で確認できます。
-
3
生成済みコードを作り直して差分を見る
ツールを更新しても、すでに生成されたファイルは直りません。修正版で再生成し、経路のデコレーター、docstring、responsesの辞書に、見慣れない式が混ざっていないかを差分で確認します。
-
4
定義ファイルの出どころとCIの権限を見直す
外部由来のOpenAPIファイルをそのままコード生成に渡していないかを確認します。渡している場合は、取り込み時の確認を入れます。CIの生成ジョブには、必要以上の認証情報を持たせないようにします。
すぐ更新できないとき
すぐに更新できない間は、信頼できない出どころのOpenAPIファイルでコードを生成しないでください。やむを得ない場合は、パス、summary、応答のキーに引用符などの不審な文字が含まれていないか、生成前に確認します。生成したコードの実行や、importを伴うテストは、認証情報を持たない隔離した環境で行うと、被害を抑えられます。
背景
fastapi-code-generatorは、OpenAPIで書いたAPI仕様から、FastAPIアプリのひな形になるPythonコードを自動で作るツールです。開発チームでは、仕様書を先に決めてコードを生成する流れや、CIで毎回生成する流れで使われます。仕様書の文字列がそのままソースコードになるため、ツールが出力時に引用符を無害化しているかどうかが、そのまま安全性に直結します。
今回の3件は、パス、summary、応答キーという別々の埋め込み先に、同じ種類の無害化漏れがあったものです。開発元は、実行されるタイミングが違うこの3つを別の問題として登録しています。import時に動くものは、アプリの起動やテストで、呼び出し時に動くものは、実際のリクエスト処理で、それぞれ発動します。
よくある質問
Q.OpenAPIファイルは自社だけで書いています。それでも更新は必要ですか。
Q.CIでコードを生成しているだけで、本番にはこのツールを入れていません。影響はありますか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
fastapi-code-generator creates FastAPI applications from OpenAPI files. Prior to 0.8.1, the generator inserts Operation.summary into a generated route-handler docstring as a triple-double-quoted string without escaping embedded triple quotes. An attacker-controlled or attacker-influenced operation summary can close the docstring and inject a valid Python expression statement into the handler body. Syntax-breaking input only causes generation to fail, but syntactically valid generated code executes with the server process's privileges when the affected route handler is called. This call-time route-handler docstring sink is distinct from the project's separate import-time route-path and additional-response-key sinks. This issue is fixed in version 0.8.1.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory github.com
- advisory nvd.nist.gov
- patch github.com
- patch github.com
- web github.com