GitPython: fehlerhafte Ablaufreihenfolge (CVE-2026-114145)
Veröffentlicht Zuletzt geändert Quellen: Red Hat, Debian, Debian LTS, Hersteller, OSV, CVE.org
Was ist betroffen, was ist zu tun
Aktualisieren Sie GitPython auf Version 3.2.1.
- Betroffen
- GitPython
lt *..3.2.1
- GitPython
- Behoben in
- GitPython
3.2.1
- GitPython
Unklar, ob und wie Sie betroffen sind? Frage zu dieser Schwachstelle stellen
Metriken
7,5
Priorität
XIEM Effective CVSS: höchste verfügbare CVSS-Bewertung aus NVD- und Herstellerangaben.
Quelle: Hersteller (CNA), CVSS v3
7,5
CVSS v3
Schweregrad Hoch auf der Skala von 0 bis 10.
Quelle: Red Hat, Debian, Debian LTS, Hersteller, OSV, CVE.org
0,4 %
EPSS-Score
Niedrig – Modell schätzt < 1 % Ausnutzungs-Wahrscheinlichkeit.
Quelle: FIRST EPSS, Perzentil 36,7
Alle Metriken anzeigen
- Schweregrad
- Hoch
Priorität (0–325)
Der Priorisierungs-Score ist eine zusammengeführte Kennzahl, die mehrere Einzelsignale zu einer einzigen, handlungsleitenden Rangfolge verdichtet: technische Schwere (CVSS), Ausnutzungswahrscheinlichkeit (EPSS), der Status als bekannt ausgenutzt (KEV) und der Kontext des betroffenen Assets. Ziel ist die Antwort auf die einzig wirklich wichtige Frage im Schwachstellenmanagement: Was zuerst?
Im Glossar lesen- 74.04 Methodik
Exploit-Reife
Ein Exploit ist Code oder eine Technik, die eine konkrete Schwachstelle gezielt ausnutzt, um ein unbeabsichtigtes Verhalten zu erzwingen — etwa Code auszuführen oder Rechte auszuweiten. Er ist das Werkzeug, das aus einer theoretischen Lücke einen praktischen Angriff macht.
Im Glossar lesen- kein öffentlicher PoC bekannt
XIEM Effective CVSS
XIEM® ist das gestufte Managed-Security-Betriebsmodell von NEOSEC und eine eingetragene Marke der NEOSEC GmbH. Es erweitert klassisches SIEM — die zentrale Sammlung, Normalisierung und Korrelation sicherheitsrelevanter Ereignisse — um Endpunkt-Forensik, Netzwerk-Sichtbarkeit und Täuschungstechnik und führt diese zu drei aufeinander aufbauenden Stufen zusammen: Sentry, Orchestrate und Command.
Im Glossar lesen- 7,5 Methodik
CVSS v3
CVSS ist der weltweit verbreitete, offene Standard zur Bewertung der technischen Schwere einer Schwachstelle auf einer Skala von 0 bis 10. Er beschreibt, wie leicht eine Lücke ausnutzbar ist und welchen Schaden sie anrichten kann — nicht jedoch, wie wahrscheinlich ihre tatsächliche Ausnutzung ist. CVSS und das ergänzende EPSS beantworten bewusst unterschiedliche Fragen.
Im Glossar lesen- 7,5
EPSS-Score
Der EPSS-Score ist der absolute Modell-Output für eine einzelne Schwachstelle: die geschätzte Wahrscheinlichkeit einer realen Ausnutzung in den nächsten 30 Tagen, ausgedrückt als Wert zwischen 0 und 1 (bzw. 0 % bis 100 %). Ein Score von 0,42 bedeutet „das Modell schätzt eine 42-prozentige Chance auf reale Ausnutzung binnen 30 Tagen“.
Im Glossar lesen- 0,4 %
- Niedrig – Modell schätzt < 1 % Ausnutzungs-Wahrscheinlichkeit.
EPSS-Perzentil
Das EPSS-Perzentil ist die relative Einordnung einer Schwachstelle innerhalb aller EPSS-bewerteten CVEs, ausgedrückt als Wert zwischen 0 und 1. Ein Perzentil von 0,90 bedeutet „diese CVE hat einen höheren EPSS-Score als 90 % aller anderen bewerteten CVEs“. Anders als der EPSS-Score ist es keine Wahrscheinlichkeit — sondern eine Positionierung im Ranking.
Im Glossar lesen- 36,7
- Hoch – CVE rangiert über dem Median aller heute bewerteten CVEs (Rang ≥ 36 %).
KEV-Status
Der KEV-Katalog ist eine von der US-Behörde CISA gepflegte Liste von Schwachstellen, für die eine aktive Ausnutzung in der Praxis nachgewiesen ist. Er beantwortet nicht die Frage „wie schwer?“, sondern „wird es bereits angegriffen?“ — und priorisiert damit das Patchen scharf.
Im Glossar lesen- —
- Veröffentlicht
- CISA-Bewertung (SSVC)
- Ausnutzung: keine bekannt · nicht automatisierbar · Auswirkung: vollständig
- Quelle: CISA Vulnrichment, Stand 23. Oktober 2026
CWE
CWE ist ein Katalog typischer Schwächen-Arten in Software und Hardware — etwa fehlerhafte Eingabevalidierung, unsichere Speicherbehandlung oder mangelhafte Authentisierung. Während eine CVE eine konkrete Schwachstelle in einem konkreten Produkt benennt, beschreibt eine CWE die zugrunde liegende Fehlerklasse.
Im Glossar lesen- CWE-696
Erkennungsregeln
Für diese Schwachstelle liegt noch keine NEOSEC-Erkennungsregel vor.
Einordnung nach NIS2 und CRA
Regelbasierte Einordnung aus Ausnutzungsstatus und Schweregrad. Sie ersetzt keine Prüfung im Einzelfall.
NIS2
NIS2 ist die EU-Richtlinie (EU) 2022/2555 zur Erhöhung des Cybersicherheitsniveaus in der Union. Sie weitet Pflichten gegenüber der ersten NIS-Richtlinie deutlich aus: mehr Sektoren, verbindliches Risikomanagement, gestufte Meldepflichten und persönliche Verantwortung der Geschäftsleitung.
Im Glossar lesen- Hohe technische Schwere: Bewerten und beheben Sie die Schwachstelle im Schwachstellenmanagement nach Art. 21 Abs. 2 lit. e NIS2 und dokumentieren Sie die Entscheidung.
CRA
Der CRA ist die EU-Verordnung (EU) 2024/2847 mit horizontalen Cybersicherheitsanforderungen an „Produkte mit digitalen Elementen“ — von Industriesteuerungen über Software bis zu vernetzten Verbrauchergeräten. Erstmals müssen Hersteller Sicherheit über den gesamten Produktlebenszyklus gewährleisten, Schwachstellen behandeln und Sicherheitsupdates bereitstellen.
Im Glossar lesen- Ab dem 11.12.2027 verpflichtet Anhang I Teil II CRA Hersteller betroffener Produkte mit digitalen Elementen, Schwachstellen unverzüglich zu behandeln und Sicherheitsupdates bereitzustellen.
ISO/IEC 27001
ISO/IEC 27001 ist der international führende Standard für ein Informationssicherheits-Managementsystem (ISMS). Er beschreibt einen risikobasierten, prozessorientierten Rahmen, um Informationssicherheit systematisch zu planen, umzusetzen, zu überprüfen und zu verbessern.
Im Glossar lesen- Maßnahme A.8.8, Management technischer Schwachstellen: Relevanz für Ihre Systeme bewerten, Behebung einplanen und nachweisen.
Beschreibung
Zusammenfassung
create_submodule(name, path, url) kloniert ein Submodul in das .git-Verzeichnis des Repositories, bevor es den Pfad ablehnt. Ein Pfad von ".git/hooks" wird von der Vorabprüfung akzeptiert, sodass das Submodul direkt in das laufende Hooks-Verzeichnis geklont wird. Eine Datei namens post-checkout im Submodul wird zu einem ausführbaren .git/hooks/post-checkout. Ab Version 3.2.0+ löst die spätere Indexprüfung einen ValueError aus, aber nur nachdem das Klonen bereits auf die Festplatte geschrieben hat, und es entfernt das eingepflanzte Hook nicht; in Version 3.1.x gibt es keine solche Prüfung und der Aufruf schlägt stillschweigend fehl. In beiden Fällen wird der Hook bei der nächsten Git-Operation (z. B. Checkout) ausgeführt, was zur Code-Ausführung führt.
Details
Der Checkout-Pfad wird zu spät validiert, nachdem das Klonen bereits die Festplatte verändert hat. Dies bricht die "Validierung vor Mutation" Invariante, die der Commit 43a43cd8 ("Validierung von Submodul-Checkout- und Metadatenpfaden vor Mutation") durchsetzen wollte.
Submodule.add() ruft die permissive Pfadprüfung vor dem Klonen auf, und die strenge Prüfung erreicht das ".git"-Alias nur zur Indexzeit, nachdem _clone_repo auf die Festplatte geschrieben hat:
git/objects/submodule/base.py (Submodule.add) 599: path = cls._to_relative_path(repo, path) # akzeptiert ".git/hooks" 673: mrepo = cls._clone_repo(repo, url, path, name, ...) # kloniert in /.git/hooks 714: index.add([sm], write=True) # strenge Prüfung löst hier aus
git/index/base.py (IndexFile._preprocess_add_items) 732: _validate_repo_path(entry.path) # lehnt ".git" ab, aber zu spät
_to_relative_path blockiert nur ../absolute/out-of-tree-Pfade; .git-Aliasse werden nur durch _validate_repo_path abgelehnt, das in Version 3.2.0 (Commit a75aedf3) hinzugefügt wurde und an der Indexgrenze läuft. Der ValueError, den es auf Zeile 732 auslöst, rollt nicht zurück, was _clone_repo bereits geschrieben hat.
Versionsabhängiges Verhalten:
- 3.2.0 .. tip bda18e08: _validate_repo_path löst ValueError bei index.add aus, aber der Hook ist bereits auf der Festplatte und wird nicht entfernt (falsche Reihenfolge von Validierung vs. Klonen).
- 3.1.x (z. B. 3.1.59): _validate_repo_path existiert nicht und _to_relative_path lehnt
.gitnicht ab; create_submodule(path=".git/hooks", ...) gibt ohne Fehler zurück und pflanzt den Hook stillschweigend.
Proof of Concept
Einrichtung:
evilsub/ : ein Git-Repository, dessen ROOT eine ausführbare Datei namens post-checkout enthält (die Payload)
victim/ : ein Git-Repository mit mindestens einem Commit und einer zweiten Branch, dessen .git/hooks KEINE
Beispiel-Hooks enthält (der Zustand eines minimalen/CI-Checkouts, oder git init mit einem leeren
Template-Verzeichnis, oder GIT_TEMPLATE_DIR/init.templateDir leer)
import git, os.path as osp try: git.Repo("victim").create_submodule(name="x", path=".git/hooks", url=osp.abspath("evilsub")) except ValueError: pass # 3.2.0+: ".git" wird abgelehnt, aber nur NACH dem Klonen, sodass die Pflanzung bereits stattgefunden hat. # 3.1.x: es wird keine Ausnahme ausgelöst; der Aufruf schlägt fehl und pflanzt dennoch den Hook.
victim/.git/hooks/post-checkout existiert jetzt, Modus 0755, angreiferkontrolliert, in jeder
betroffenen Version. Jeder spätere Checkout führt ihn aus:
git -C victim checkout -> der Hook wird ausgeführt -> Code-Ausführung
Live verifiziert:
- tip bda18e08 (3.2.0 + 3 Commits): create_submodule löste ValueError aus von
git/index/base.py:732, doch .git/hooks/post-checkout war vorhanden und ausführbar, und
git checkoutführte es aus. - 3.1.59: create_submodule kehrte ohne Fehler zurück; .git/hooks/post-checkout wurde eingepflanzt
und von
git checkoutausgeführt.
Auswirkungen
Beliebige Code-Ausführung. Eine Bibliothek/App, die ein Submodul aus einem
angreiferbeeinflussten path erstellt, endet mit einer angreiferkontrollierten ausführbaren Datei in
.git/hooks, die Git bei normalen späteren Operationen ausführt. Dies betrifft jeden Dienst,
der einen Submodul-Checkout-Pfad aus nicht vertrauenswürdigen Daten ableitet, z. B. einen, der ein
Submodul-Spezifikation (name/path/url) aus einer von einem Benutzer bereitgestellten Manifest- oder API-Anfrage aufnimmt und path in create_submodule einfügt. Ab Version 3.2.0+ ist die Validierung der Bibliothek selbst das, was fehlschlägt: Sie lehnt den .git-Pfad korrekt ab, aber nur nachdem das Submodul bereits geklont wurde, sodass eine App, die den ValueError abfängt, vernünftigerweise glaubt, dass der unsichere Pfad blockiert wurde.
Voraussetzungen (daher AC:H): (1) die App gibt einen angreiferbeeinflussten Submodul path weiter;
(2) der Ziel-Hook-Name ist in .git/hooks frei, was für minimale/CI/Container-Checkouts und immer dann zutrifft, wenn init.templateDir/GIT_TEMPLATE_DIR leer ist. Mit den Standard-Beispiel-Hooks vorhanden, lehnt git clone das nicht leere Ziel ab und keine Pflanzung erfolgt.
Betroffen: alle getesteten Versionen von 3.1.x (3.1.59) bis zum aktuellen tip bda18e08 (3.2.0 + 3 Commits). 3.1.x pflanzt stillschweigend; 3.2.0+ pflanzt trotz Auslösen von ValueError.
Originalquelle nur englisch verfügbar, maschinell ins Deutsche übersetzt.
Quelle: redhat_csaf, Debian Security Advisories, Debian LTS Advisories, GitHub Security Advisories, OSV (Open Source Vulnerabilities), cvelistv5, NVD (NIST)
Betroffene Produkte
Betroffen sind die folgenden Versionen. Ältere Stände derselben Reihe sind ebenfalls verwundbar, sofern nicht anders angegeben.
| Betroffene Versionen | Behoben in | ||
|---|---|---|---|
| gitpython-developers | GitPython |
|
|
| pip | Gitpython |
|
|
| pypi | gitpython |
|
|
Hersteller und Produkte
Betroffene Betriebssysteme
| Linux | debian | python-git | bookworm |
| Linux | debian | python-git | trixie |
Weakness-Klassen (CWE)
CWE-696Incorrect Behavior Order
Class
The product performs multiple related behaviors, but the behaviors are performed in the wrong order in ways that may produce resultant weaknesses.
Eintrag bei MITRE CWE-696
Quellen & Referenzen
- github.comgitpython-developers/GitPython/security/advisories/GHSA-83vg-56…x_refsource_CONFIRM, web
- github.comgitpython-developers/GitPython/pull/2264x_refsource_MISC, web
- github.comgitpython-developers/GitPython/commit/97eadb888d2f99567e3113f4e…x_refsource_MISC, web
- github.comgitpython-developers/GitPython/releases/tag/3.2.1x_refsource_MISC, web
- NVD (NIST)vuln/detail/CVE-2026-114145advisory
- github.comgitpython-developers/GitPythonpackage
Änderungen an der CVE
Wer diese CVE wann geändert hat: die NVD (Analyse, betroffene Produkte, CVSS), der Herausgeber der CVE (CNA) und ergänzende Stellen wie CISA (ADP).
Eintrag geändertCISA ADP
CISA-Einschätzung (SSVC): Ausnutzung: keine bekannt, automatisierbar: nein
Einzeländerung im Original anzeigen
Einzeländerungen dieses Ereignisses im Original der NVD Art Aktion Vorher Nachher SSVC-Einschätzung ergänzt —{"id":"CVE-2026-114145","role":"CISA Coordinator","options":[{"exploitation":"none"},{"automatable":"no"},{"technicalImpact":"total"}],"version":"2.0.3","timestamp":"2026-10-23T14:54:12.373636Z"}Kennung der Quelle: 134c704f-9b21-4f2e-91b3-4a467353bcc0
Neu erfasstGitHub
CVSS V3.1: AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
Schwachstellentyp: CWE-696
Beschreibung erfasst oder geändert
Neue Referenzen:- https://github.com/gitpython-developers/GitPython/commit/97eadb888d2f99567e3113f4e455be4ca128f697
- https://github.com/gitpython-developers/GitPython/pull/2264
- https://github.com/gitpython-developers/GitPython/releases/tag/3.2.1
- https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-83vg-56qc-22m7
8 Einzeländerungen im Original anzeigen
Einzeländerungen dieses Ereignisses im Original der NVD Art Aktion Vorher Nachher Beschreibung ergänzt —GitPython is a python library used to interact with Git repositories. Prior to 3.2.1, create_submodule() in git/objects/submodule/base.py accepts an attacker-influenced submodule path such as .git/hooks and invokes _clone_repo() before safely rejecting the destination. In 3.1.x, _validate_repo_path() does not exist and the call succeeds silently, while in 3.2.0 and later affected revisions the check in git/index/base.py raises ValueError only after the clone has written to disk and does not remove the planted file. An attacker-controlled submodule can therefore place an executable post-checkout hook that a later Git operation executes. Exploitation requires an application to accept an untrusted submodule path and a clone destination such as .git/hooks that is empty enough for Git to clone into it, which commonly means that default sample hooks are absent. This issue is fixed in version 3.2.1.CVSS ergänzt —AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:HSchwachstellentyp (CWE) ergänzt —CWE-696Betroffene Versionen (Herausgeber) ergänzt —New affected value received. <a href="https://github.com/CVEProject/cvelistV5/blob/main/cves/2026/114xxx/CVE-2026-114145.json">CVE-2026-114145</a>Referenz ergänzt —https://github.com/gitpython-developers/GitPython/commit/97eadb888d2f99567e3113f4e455be4ca128f697Referenz ergänzt —https://github.com/gitpython-developers/GitPython/pull/2264Referenz ergänzt —https://github.com/gitpython-developers/GitPython/releases/tag/3.2.1Referenz ergänzt —https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-83vg-56qc-22m7Kennung der Quelle: security-advisories@github.com
Badge einbetten
Zeigen Sie Schweregrad und KEV-Status dieser Schwachstelle auf Ihrer Seite – mit Link hierher. Das Bild wird stündlich aktualisiert.
<a href="https://intel.neosec.eu/cve/CVE-2026-114145"><img src="https://intel.neosec.eu/badge/cve/CVE-2026-114145.svg" alt="CVE-2026-114145 – NEOSEC Intel" height="20"></a>