Katalog CVE

CVE-2026-100689

ŚrednieCVSS 5.9
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.40%

Percentyl 32 - wyżej niż 32% wszystkich znanych CVE

Streszczenie

GitPython przed wersją 3.1.62 nie waliduje pola path odczytywanego z niezaufanego pliku .gitmodules podczas aktualizacji submodułów. Podczas gdy wcześniejsza poprawka (GHSA-hmq2-w58f-27jc) dodała Submodule._validated_name() ograniczające pole name, a wewnętrzny mechanizm ochrony Submodule._to_relative_path() jest stosowany w add() i move(), metoda Submodule.update() wyznacza bezwzględną lokalizację checkout z surowej wartości path bez tej ochrony. Wpis .gitmodules zawierający komponenty przejścia katalogowego (np. path = ../../../tmp/escaped) może spowodować tworzenie katalogów przez os.makedirs() poza drzewem roboczym repozytorium, wypełnienie ich z URL submodułu oraz usunięcie przez shutil.rmtree() przy użyciu force_remove. Luka naprawiona w GitPython 3.1.62.

Ocena ryzyka

Aplikacje aktualizujące submoduły na commicie innym niż HEAD (np. przez API dla historycznych commitów) mogą pozwolić atakującemu na tworzenie i usuwanie katalogów poza repozytorium. Typowy przepływ clone-then-update nie jest podatny, ponieważ ponownie wyznacza ścieżkę z kanonicznego drzewa.

Rekomendacja

Zaktualizuj GitPython do wersji 3.1.62 lub nowszej. Unikaj aktualizacji submodułów na commitach innych niż HEAD na podstawie niezaufanych plików .gitmodules.

Inne podatności w GitPython

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

GitPython before 3.1.62 does not validate the `path` field read from an untrusted .gitmodules file when updating submodules. While a prior fix (GHSA-hmq2-w58f-27jc) added Submodule._validated_name() to constrain the `name` field, and GitPython's own containment guard Submodule._to_relative_path() is applied in add() and move(), Submodule.update() derives the absolute checkout location from the raw `path` value without that guard. A .gitmodules entry containing directory traversal components (e.g., path = ../../../tmp/escaped) can therefore cause directories to be created via os.makedirs() outside the repository working tree, populated from the submodule URL on the clone path, and removed via shutil.rmtree() when force_remove is used. Exploitation requires an application flow that updates submodules at a non-HEAD commit (such as a historical-commit API); the common clone-then-update flow re-derives the path from a canonical tree lookup and is not affected. The issue is fixed in GitPython 3.1.62.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS