Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-63720-datamodel-code-generator — Code-Injection (RCE) in datamodel-code-generator über nicht validierten customBasePath (CVE-2026-63720) | Kitploit
Tools/GitHubGitHub/rahulreddykarne/cve-2026-63720-datamodel-code-generator
SchwachstellenanalyseExploitationLieferkettensicherheitLernen & BildungPayload-Entwicklung
GitHubrahulreddykarne/cve-2026-63720-datamodel-code-generator

CVE-2026-63720-datamodel-code-generator

Code-Injection (RCE) in datamodel-code-generator über nicht validierten customBasePath (CVE-2026-63720)

Repository anzeigen
22vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-63720: Code-Injection in datamodel-code-generator über unvalidierten customBasePath

Schweregrad: Hoch, CVSS 3.1 7.5 / CVSS 4.0 7.5 (zugewiesen von VulnCheck, der CNA)

Umgebungs-Obergrenze (Netzwerkdienst-Bereitstellung): bis zu 9.8

Vektor (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

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

Betroffen: datamodel-code-generator < 0.70.0

Behoben in: 0.70.0

CWE: CWE-94 (Unzureichende Kontrolle der Codegenerierung, 'Code-Injection')

Gemeldet von: Rahul Karne

CNA: VulnCheck

Veröffentlicht: 26. Juli 2026


Zusammenfassung

datamodel-code-generator validierte jeden schema-kontrollierten Import-String, der eine Code-Injection-Payload tragen konnte, bis auf einen.

Das Tool konvertiert ein Eingabeschema (JSON Schema, OpenAPI, YAML) in Python-Modellquellcode. Mehrere Schemafelder werden direkt in diesen generierten Code gerendert, daher validiert das Projekt sie vor der Verwendung als Dotted-Python-Identifier, speziell um Injection zu verhindern. Das Schema-Erweiterungsfeld customBasePath ist das eine Geschwisterfeld, das diese Prüfung überspringt. Sein Wert fließt unbereinigt in eine from ... import ...-Anweisung im generierten Output. Ein Angreifer, der das Eingabeschema kontrolliert, kann beliebiges Python mithilfe von Zeilenumbrüchen und einem punktfreien Ausdruck einbetten, und es wird in dem Moment ausgeführt, in dem das generierte Modul importiert wird – der übliche nächste Schritt nach der Modellgenerierung.

Dies ist eine unvollständige Behebung von CVE-2026-55415 (GHSA-5578-w22f-pfx9), die die Geschwisterfelder customTypePath und x-python-import gegen genau diese Klasse gehärtet hat. Diese Behebung deckte customBasePath nicht ab, das unvalidiert zum identischen Sink gelangt und bis 0.68.1 sowie in main bis 0.70.0 ausnutzbar blieb.

Auswirkungen

Beliebige Python-Codeausführung in dem Prozess, der die generierten Modelle importiert oder ausführt: auf dem Rechner des Entwicklers, einem CI-Runner oder jedem Dienst, der Modelle generiert und anschließend lädt. Vertraulichkeit, Integrität und Verfügbarkeit des Hosts sind vollständig kompromittiert, begrenzt nur durch die Berechtigungen dieses Prozesses.

Der Schweregrad hängt vollständig davon ab, wo Codegen mit nicht vertrauenswürdigem Input läuft:

  • Lokaler Entwickler-Workflow. Ein Entwickler generiert Modelle aus einem Schema, das er nicht selbst erstellt hat (ein abgerufenes oder Drittanbieter-OpenAPI-Dokument), und importiert das Ergebnis. Der Code läuft mit den Rechten des Entwicklers. Dies ist der Fall, der der zugewiesenen Basisbewertung zugrunde liegt.
  • CI-/Build-Pipeline. Eine Pipeline generiert Modelle aus Drittanbieter-Spezifikationen und führt Tests aus. Der Code läuft auf dem CI-Runner mit den Anmeldeinformationen, die dieser besitzt.
  • Netzwerkdienst (Umgebungs-Obergrenze, bis zu 9.8). Ein Dienst, der ein Schema über HTTP akzeptiert, Modelle generiert und lädt – beispielsweise eine B2B-Plattform, die SDKs automatisch aus kundenbereitgestellten OpenAPI-Spezifikationen generiert – führt den Code des Angreifers auf dem Server aus, durch eine einzige unauthentifizierte Anfrage ohne Benutzerinteraktion. Dies ist die Bereitstellung, die das eigene Geschwister-Advisory des Maintainers (GHSA-m34r) als betroffen nennt.

Wer ist betroffen: Jede Verwendung von datamodel-code-generator < 0.70.0, die (1) Modelle aus einem Schema generiert, dessen customBasePath-Wert vom Angreifer beeinflusst ist, und (2) das generierte Modul importiert oder ausführt. Der Standard-Workflow Codegen-dann-Import erfüllt (2) von Natur aus.

Wer ist nicht betroffen:

  • Alle, die 0.70.0 oder neuer verwenden, wo customBasePath validiert wird.
  • Workflows, die Modelle ausschließlich aus vollständig vertrauenswürdigen First-Party-Schemas generieren.
  • Workflows, die Quellcode generieren, ihn aber nie importieren oder ausführen (selten, da das Generieren von Modellen, um sie zu nutzen, der Zweck des Tools ist).

Reichweite

MetrikWertQuelle
Downloads, gesamt194 Millionenpepy.tech/projects/datamodel-code-generator
Downloads, letzte 30 Tage16,3 Millionenpepy.tech
Typische BereitstellungEntwickler-Rechner, CI/CD-Pipelines und SDK-Generierungsplattformen, die Codegen aus OpenAPI / JSON Schema betreibenin der Funktion des Tools begründet

Technische Details

Grundursache

Der Wert des Schemafelds customBasePath wird ohne Identifier-Einschränkung in den generierten Code übernommen. Drei Punkte in der Codebasis sind relevant (Pfade relativ zu src/datamodel_code_generator/):

  • Schema-Einstiegspunkt. parser/jsonschema.py definiert das Feld custom_base_path mit alias="customBasePath" (~Zeile 644), das über _resolve_base_class(...) an mehreren Aufrufstellen konsumiert wird.
  • Fehlende Validierung. parser/base.py, _resolve_base_class (~Zeile 1665), gibt den Wert nur nach einem lokalen normalize() zurück (Deduplizierung/Trimmen). Es wird keine Identifier-Validierung angewendet.
  • Sink. imports.py, Import.from_full_path() (~Zeile 35), gibt den Wert wörtlich als from ... import ...-Zeile aus. Der Wert wird auch als Klassenbasis in model/base.py set_base_class (~Zeile 1324) verwendet und von der Modellvorlage roh gerendert (class {{ class_name }}({{ base_class }}):).

Da der Wert ohne Einschränkung in den Python-Quellcode geschrieben wird, bleiben eingebettete Zeilenumbrüche und ein punktfreier Ausdruck im Output als eigene, einzeln parsebare Zeilen erhalten, und die mittlere Zeile wird beim Import ausgeführt.

Die Payload ist notgedrungen punktfrei. Import.from_full_path teilt den Wert an . auf, sodass ein normaler os.system(...)-Aufruf auseinandergerissen würde. Durch die Verwendung von getattr(__import__('os'),'system')(...) wird jeder . vermieden, während derselbe Aufruf weiterhin aufgelöst wird; die umgebenden Zeilenumbrüche halten die ausgegebenen from ... import ...-Zeilen syntaktisch gültig, sodass die injizierte mittlere Zeile sauber läuft.

Warum dies eine gehärtete Codebasis überstand

Dies ist kein Projekt, das Injection vernachlässigt hat. Der Maintainer hat genau diese Klasse wiederholt über mehrere Advisories gehärtet (GHSA-5578, m34r, 8m8r, wjv6), indem er jedes Mal einen schema-kontrollierten Import- oder Typ-String durch _validate_dotted_python_identifier_path leitete, bevor dieser die Codegenerierung erreicht. Die Geschwisterfelder customTypePath (validiert bei parser/jsonschema.py ~Zeilen 4956, 5202) und x-python-import (~Zeile 2096) durchlaufen beide diesen Validator.

customBasePath ist das eine Geschwisterfeld ohne einen solchen Aufruf. Es erreicht denselben Import.from_full_path-Sink über einen anderen Pfad (_resolve_base_class), der nie in die Validierung eingebunden wurde, die die anderen Felder erhielten. Der Defekt überlebte genau deshalb, weil die umgebende Verteidigung vollständig wirkte: Ein Prüfer, der nach unvalidierten Import-Strings sucht, sieht Validatoren auf den Feldern, die er zuerst prüft, und dieses Feld führt über einen Helfer, der wie Basisklassen-Auflösung aussieht statt wie Import-Behandlung. Es ist eine Lücke in einer systematischen Behebung, keine gänzlich fehlende, weshalb es bis in die neueste Version überdauerte.

Voraussetzungen für die Ausnutzung

Ein Angreifer benötigt:

Tool herunterladen