CVE-2026-47712
NiskieCVSS 3.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 4 - wyżej niż 4% wszystkich znanych CVE
Streszczenie
Podatność w bibliotece Dulwich (wersje 0.24.0 do 1.2.4) pozwala na zapis pliku łatki poza zamierzonym katalogiem poprzez złośliwy temat commita. Funkcja format_patch używa tematu commita do utworzenia nazwy pliku, a brak sanityzacji znaków takich jak /, \, .. czy : umożliwia ścieżkę traversal.
Ocena ryzyka
Atakujący może umieścić plik łatki w dowolnym miejscu systemu plików, co może prowadzić do nadpisania krytycznych plików lub eskalacji uprawnień w środowisku korzystającym z Dulwich do przetwarzania commitów z niezaufanych źródeł.
Rekomendacja
Należy natychmiast zaktualizować bibliotekę Dulwich do wersji 1.2.5 lub nowszej. Jeśli aktualizacja nie jest możliwa, należy stosować walidację ścieżki wyjściowej lub używać strumienia stdout zamiast zapisu do pliku.
Inne podatności w Dulwich
Zobacz wszystkie- CVE-2026-114095Średnie
Dulwich przed wersją 1.2.9 zawiera podatność na odmowę usługi w Pack.resolve_object, która pozwala atakującym wywołać nieskończoną rekurencję poprzez samoodwołujące się obiekty OFS_DELTA. Atakujący może dostarczyć złośliwy plik packfile z delta_offset równym 0, aby wyczerpać CPU podczas operacji clone, fetch lub cat-file.
- CVE-2015-0838Wysokie
Przepełnienie bufora w funkcji apply_delta w implementacji C w pliku _pack.c w Dulwich przed wersją 0.9.9 umożliwia zdalnym atakującym wykonanie dowolnego kodu za pomocą spreparowanego pliku pakietu.
- CVE-2014-9706Wysokie
Funkcja build_index_from_tree w pliku index.py w Dulwich przed wersją 0.9.9 umożliwia zdalnym atakującym wykonanie dowolnego kodu poprzez commit z ścieżką katalogu zaczynającą się od .git/, co nie jest prawidłowo obsługiwane podczas wypisywania drzewa roboczego.
- CVE-2017-16228Krytyczne
Dulwich przed wersją 0.18.5, przy użyciu podprocesu SSH, pozwala zdalnym atakującym na wykonywanie dowolnych poleceń poprzez URL SSH z początkowym znakiem minus w nazwie hosta.
- CVE-2026-114098Wysokie
Dulwich w wersjach od 0.22.5 do 1.2.8 zawiera podatność path traversal w stash.py pop(), która pozwala atakującym zapisywać dowolne pliki poza drzewem roboczym poprzez symlinki katalogów pośrednich. Atakujący może stworzyć złośliwe repozytorium, którego przywrócony stash zapisuje ładunek do .git/hooks/post-checkout, osiągając wykonanie kodu przy następnym checkout.
- CVE-2026-114097Wysokie
Dulwich w wersjach od 0.23.1 do 1.2.8 zawiera podatność path traversal w CommitFilter._apply_index_filter(), która pozwala atakującym zapisywać pliki poza katalogiem roboczym poprzez symlinki utrzymujące się między commitami. Atakujący może stworzyć repozytorium, w którym symlink przodka przekierowuje zapisy plików potomka podczas filter_branch, umożliwiając wykonanie kodu poprzez zapis do .git/hooks.
- CVE-2026-114096Wysokie
Dulwich w wersjach od 0.24.0 do 1.2.8 zawiera podatność polegającą na podążaniu za symlinkami w porcelain.checkout(paths=[...]), która pozwala atakującym zapisywać dowolne pliki poprzez użycie surowego os.open bez O_NOFOLLOW. Atakujący może stworzyć repozytorium, w którym symlink w drzewie roboczym wskazuje na .git/hooks/post-checkout, tak że przywrócenie pliku z tagu zapisuje złośliwy hook umożliwiający wykonanie kodu.
- CVE-2026-114094Wysokie
Dulwich w wersjach przed 1.2.9 nie waliduje prefiksów liter dysków DOS w elementach ścieżek drzewa Git w systemie Windows, co pozwala na zapis dowolnych plików. Atakujący może stworzyć złośliwe repozytorium z wpisem drzewa o nazwie 'C:', który omija walidację NTFS i zapisuje pliki poza drzewem roboczym, osiągając zdalne wykonanie kodu.
- CVE-2026-38974Średnie
W bibliotece Dulwich w wersji do 1.1.0 w pliku contrib/paramiko_vendor.py brakuje weryfikacji klucza hosta SSH. Oznacza to, że podczas połączeń SSH nie jest sprawdzane, czy klucz publiczny serwera jest zaufany.
- CVE-2026-52726Wysokie
Dulwich w wersjach od 0.23.2 do 1.2.5 nie waliduje ścieżek submodułów podczas klonowania z rekurencją. Atakujący może umieścić złośliwy plik .gitmodules i drzewo gitlink ze ścieżką .git/hooks, co prowadzi do zapisu plików do katalogu .git/hooks ofiary. Wykonywalne pliki są następnie uruchamiane przy każdym wywołaniu haka, co umożliwia zdalne wykonanie kodu.
Oryginalny opis (angielski, źródło NVD)
Dulwich is a pure-Python implementation of the Git file formats and protocols. Starting in version 0.24.0 and prior to version 1.2.5, dulwich.porcelain.format_patch(outdir=...) derives each patch filename from the commit's subject line. Prior to this fix, get_summary only replaced spaces with dashes - path separators (/, \), parent-directory components (..), and other filename-hostile characters (e.g. :) were preserved verbatim and passed straight into os.path.join(outdir, f"{i:04d}-{summary}.patch"). A malicious commit subject could therefore direct the generated patch file outside the requested outdir. This is fixed in Dulwich 1.2.5. Users should upgrade to 1.2.5 or later. dulwich.patch.get_summary now mirrors git's format_sanitized_subject: only `[A-Za-z0-9._]` are kept, runs of other characters collapse to a single -, consecutive . collapse to a single ., trailing ./- are stripped, and the result is length-limited. This makes the returned string safe to embed as a filename component, so format_patch can no longer be steered out of outdir via the commit subject. Until upgrading, callers that pass untrusted commits to porcelain.format_patch can use stdout=True and write the patch to a destination they control, rather than letting format_patch choose the filename; validate the chosen path before opening - e.g. compare os.path.realpath(returned_path) against os.path.realpath(outdir) and reject any patch whose resolved path is not inside outdir; and/or pre-screen commits and refuse to format any whose subject's first line contains /, \, .., or other characters that are not safe on the target filesystem.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

