CVE-2026-114145
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 17 - wyżej niż 17% wszystkich znanych CVE
Streszczenie
GitPython to biblioteka Pythona do interakcji z repozytoriami Git. Przed wersją 3.2.1 funkcja create_submodule() w git/objects/submodule/base.py akceptuje ścieżkę podmodułu kontrolowaną przez atakującego, taką jak .git/hooks, i wywołuje _clone_repo() przed bezpiecznym odrzuceniem celu. W wersji 3.1.x _validate_repo_path() nie istnieje i wywołanie kończy się po cichu, a w 3.2.0 i późniejszych sprawdzenie w git/index/base.py zgłasza ValueError dopiero po zapisaniu klonu na dysk i nie usuwa umieszczonego pliku. Atakujący może umieścić wykonywalny hook post-checkout, który zostanie uruchomiony przez późniejszą operację Git.
Ocena ryzyka
Atakujący może doprowadzić do wykonania dowolnego kodu w kontekście aplikacji używającej GitPython, jeśli aplikacja akceptuje niezaufaną ścieżkę podmodułu i cel klonowania.
Rekomendacja
Zaktualizuj GitPython do wersji 3.2.1 lub nowszej. Unikaj przekazywania niezaufanych ścieżek podmodułów do create_submodule().
Inne podatności w GitPython
Zobacz wszystkie- CVE-2026-44244Wysokie
GitPython to biblioteka Pythona służąca do interakcji z repozytoriami Git. W wersjach przed 3.1.49 metoda GitConfigParser.set_value() nie weryfikowała wartości pod kątem nowych linii, co pozwalało na wstrzykiwanie złośliwych ścieżek do konfiguracji Git.
- CVE-2026-44243Wysokie
GitPython to biblioteka Pythona służąca do interakcji z repozytoriami Git. Przed wersją 3.1.48 istniała podatność, która pozwalała atakującym na manipulację plikami poza katalogiem .git repozytorium poprzez niewystarczającą walidację ścieżek odniesienia.
- CVE-2026-42284Wysokie
GitPython to biblioteka Pythona służąca do interakcji z repozytoriami Git. W wersjach przed 3.1.47 funkcja _clone() nieprawidłowo waliduje opcje multi_options, co pozwala na wykonanie złośliwych hooków podczas klonowania repozytoriów.
- CVE-2026-42215Wysokie
GitPython to biblioteka Pythona służąca do interakcji z repozytoriami Git. W wersjach od 3.1.30 do przed 3.1.47, biblioteka blokuje niebezpieczne opcje Git, ale odpowiednie argumenty Pythona mogą je ominąć, co prowadzi do wykonania dowolnych poleceń.
- CVE-2026-78676Krytyczne
GitPython przed wersją 3.1.59 niebezpiecznie przetwarza wieloliniowe wartości konfiguracji git podczas zapisu, co może przekształcić uśpione wartości w aktywne dyrektywy, takie jak core.hooksPath. Atakujący może spreparować plik konfiguracyjny z osadzonymi nowymi liniami, co po zapisie przez GitPython umożliwia wykonanie dowolnego kodu.
- CVE-2026-67324Krytyczne
GitPython 3.1.50 nie rozpoznaje połączonych krótkich form opcji, takich jak -u<value> (krótka forma --upload-pack=<value>), podczas egzekwowania domyślnej bramy niebezpiecznych opcji. Gdy aplikacja przekazuje opcje klonowania pod wpływem atakującego do Repo.clone_from(..., multi_options=..., allow_unsafe_options=False), atakujący może dostarczyć -u<helper>, aby ominąć bramę blokującą --upload-pack/-u, powodując wykonanie przez Git określonego polecenia pomocniczego podczas klonowania. Naprawione w wersji 3.1.51.
- CVE-2023-40267Krytyczne
GitPython w wersjach przed 3.1.32 nie blokuje niebezpiecznych opcji w clone i clone_from. Problem ten występuje z powodu niekompletnej poprawki dla CVE-2022-24439.
- CVE-2026-110860Średnie
GitPython od wersji 3.1.62 do 3.2.0 zawiera błąd podążania za dowiązaniami symbolicznymi w Submodule.move(), który sprawdza cel tylko leksykalnie i nie odrzuca dowiązań symbolicznych w pośrednich komponentach ścieżki. Niezaufane repozytorium może zatwierdzić dowiązanie symboliczne wskazujące poza drzewo robocze, przez co aplikacja przenosząca zainicjowany podmoduł pod nim przenosi checkout na zewnątrz i uszkadza indeks oraz .gitmodules.
- CVE-2026-110859Wysokie
GitPython przed wersją 3.2.0 zawiera podatność wstrzyknięcia argumentów w metodzie Head.checkout() pozwalającą zdalnym atakującym odczytać dowolne pliki poprzez podanie nazwy gałęzi interpretowanej jako opcja git. Atakujący może hostować repozytorium, którego domyślna gałąź nazywa się --pathspec-from-file=<path>, powodując wyciek zawartości plików przez komunikaty GitCommandError w aplikacjach klonujących i przełączających się na aktywną gałąź.
- CVE-2026-110858Wysokie
GitPython w wersjach od 3.1.30 do 3.2.0 zawiera podatność zdalnego wykonania kodu w metodzie Remote.pull(), której zabezpieczenie przed niebezpiecznymi opcjami sprawdza tylko argumenty nazwane, a nie pozycyjny refspec. Atakujący kontrolujący refspec może podać --upload-pack=<command>, aby wykonać polecenia systemowe jako proces wywołujący przez transport lokalny lub SSH.
Oryginalny opis (angielski, źródło NVD)
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.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

