CVE-2026-47781
WysokieCVSS 8.4Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 3 - wyżej niż 3% wszystkich znanych CVE
Streszczenie
PDM to menedżer pakietów i zależności dla Pythona. W wersjach do 2.26.9 włącznie, PDM automatycznie ładuje lokalne wtyczki projektu z katalogu .pdm-plugins podczas inicjalizacji, co pozwala plikowi kontrolowanemu przez atakującego w niezaufanym repozytorium na wykonanie dowolnego kodu Pythona przed przetworzeniem jakiegokolwiek polecenia. Dzieje się tak, ponieważ load_plugins() działa podczas Core.init() i dodaje .pdm-plugins przez site.addsitedir(), który przetwarza pliki .pth i natychmiast wykonuje każdą linię zaczynającą się od import, więc kod wykonuje się z uprawnieniami użytkownika wywołującego pdm, a nawet proste polecenie takie jak pdm --version je wyzwala (co ma największy wpływ w CI, automatyzacji i kontekstach uprzywilejowanych).
Ocena ryzyka
Ryzyko polega na wykonaniu dowolnego kodu w kontekście użytkownika uruchamiającego pdm, co w środowiskach CI lub z podwyższonymi uprawnieniami może prowadzić do pełnej kompromitacji systemu.
Rekomendacja
Zaleca się aktualizację PDM do wersji 2.27.0 lub nowszej, która zawiera poprawkę eliminującą automatyczne ładowanie wtyczek z niezaufanych źródeł.
Inne podatności w PDM
Zobacz wszystkie- CVE-2026-47764Wysokie
pdm to menedżer pakietów i zależności dla Pythona. Wersje przed 2.27.0 są podatne na path traversal przez write_to_fs. Funkcja InstallDestination.write_to_fs() w src/pdm/installers/installers.py nadpisuje klasę bazową, aby dodać obsługę dowiązań symbolicznych/twardych, ale zastępuje bezpieczną metodę _path_with_destdir() (która waliduje przez Path.resolve() + is_relative_to()) zwykłym os.path.join() bez walidacji ścieżki. Złośliwy wheel z wpisami traversal może zapisywać dowolne pliki.
- CVE-2026-47763Średnie
pdm, menedżer pakietów i zależności dla Pythona, przed wersją 2.27.0 zapisuje kilka plików stanu lub konfiguracji lokalnych projektu bez ochrony przed dowiązaniami symbolicznymi. Złośliwe repozytorium może umieścić te pliki jako dowiązania symboliczne, a lokalne operacje PDM mogą nadpisać cele dowiązań, co umożliwia dowolne nadpisywanie plików z uprawnieniami wywołującego użytkownika.
Oryginalny opis (angielski, źródło NVD)
PDM is a Python package and dependency manager. In versions up to and including 2.26.9, PDM automatically loads project-local plugins from a .pdm-plugins directory during initialization, allowing an attacker-controlled file in an untrusted repository checkout to execute arbitrary Python code before any command is parsed. This happens because load_plugins() runs during Core.init() and adds .pdm-plugins via site.addsitedir(), which processes .pth files and immediately executes any line beginning with import, so the code runs with the privileges of the user invoking pdm and even a benign command such as pdm --version triggers it (making the impact strongest in CI, automation, and privileged contexts). The issue is fixed in version 2.27.0.

