CVE-2026-67322
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 18 - wyżej niż 18% wszystkich znanych CVE
Streszczenie
GitPython przed wersją 3.1.52 jest podatny na wyciek zmiennych środowiskowych w metodzie Repo.clone_from(). Adres URL zdalnego repozytorium jest przetwarzany przez Git.polish_url(), który na platformach innych niż Cygwin wywołuje os.path.expandvars() na URL-u przed wykonaniem git clone. Atakujący kontrolujący URL klonowania może osadzić tokeny $NAME lub ${NAME}, które są rozwijane do wartości zmiennych środowiskowych procesu (np. AWS_SECRET_ACCESS_KEY lub GITHUB_TOKEN). Powstały URL, zawierający teraz sekret, jest przesyłany przez sieć do hosta kontrolowanego przez atakującego podczas próby klonowania.
Ocena ryzyka
Atakujący może przechwycić wrażliwe zmienne środowiskowe, takie jak klucze API lub tokeny uwierzytelniające, co prowadzi do nieautoryzowanego dostępu do zasobów chmurowych lub repozytoriów.
Rekomendacja
Zaktualizuj GitPython do wersji 3.1.52 lub nowszej. Unikaj używania Repo.clone_from() z adresami URL pochodzącymi od użytkownika bez uprzedniej walidacji.
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-100689Średnie
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.
- CVE-2026-87819Wysokie
GitPython przed wersją 3.1.60 zawiera podatność na odmowę usługi przez wyrażenie regularne w Actor.name_email_regex, które przetwarza pola autora i commitera commitów. Atakujący mogą stworzyć obiekt commita z nieprawidłowym polem autora zawierającym niezamknięty nawias ostry, co powoduje kwadratowe cofanie się i wyczerpanie zasobów CPU na ponad dwie minuty na każdy dostęp do commita.
- CVE-2026-87818Średnie
GitPython 3.1.59 nie ogranicza opcji --no-index w wysokopoziomowym API diff, co pozwala atakującym czytać dowolne ścieżki systemu plików jako operandy repozytorium. Atakujący mogą połączyć --no-index z -I/--ignore-matching-lines, aby stworzyć zależny od treści wyrocznię boolowską, wielokrotnie odpytywać lokalne pliki i odzyskiwać jednoliniowe sekrety poprzez rozróżnialne odpowiedzi sukcesu lub błędu.
Oryginalny opis (angielski, źródło NVD)
GitPython before 3.1.52 is vulnerable to environment-variable exfiltration in Repo.clone_from(). The caller-supplied remote URL is passed through Git.polish_url(), which on non-Cygwin platforms calls os.path.expandvars() on the URL before invoking git clone. An attacker who controls the clone URL can embed $NAME or ${NAME} tokens that are expanded to the values of the hosting process's environment variables (e.g., AWS_SECRET_ACCESS_KEY or GITHUB_TOKEN). The resulting URL, now containing the secret, is transmitted over the network to an attacker-controlled host during the clone attempt, disclosing the secret.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

