CVE-2026-61820
WysokieCVSS 8.5Prawdopodobieństwo exploitacji (EPSS)
Podwyższone ryzykoPercentyl 52 - wyżej niż 52% wszystkich znanych CVE
Streszczenie
pg_partman to rozszerzenie PostgreSQL zarządzające tabelami partycjonowanymi. W wersjach przed 5.5.0 funkcja inherit_template_properties() ręcznie otacza nazwy kolumn klucza głównego z pg_attribute.attname podwójnymi cudzysłowami bez escapowania osadzonych znaków cudzysłowu. partman_user będący właścicielem tabeli szablonu może utworzyć spreparowaną nazwę kolumny, która wychodzi poza wygenerowany identyfikator ALTER TABLE ADD PRIMARY KEY, gdy proces w tle stosuje klucz do partycji potomnej.
Ocena ryzyka
Wygenerowany SQL wykonuje się z uprawnieniami pg_partman_bgw.role, domyślnie superużytkownika PostgreSQL, co umożliwia kompromitację całej bazy danych i wykonanie poleceń systemu operacyjnego jako konto usługi PostgreSQL. Spreparowany identyfikator katalogu utrzymuje się do usunięcia i może ponownie zadziałać przy późniejszym tworzeniu partycji.
Rekomendacja
Zaktualizuj pg_partman do wersji 5.5.0 lub nowszej. Ogranicz uprawnienia partman_user i przejrzyj istniejące nazwy kolumn w tabelach szablonów pod kątem nietypowych znaków.
Inne podatności w pg_partman
Zobacz wszystkie- CVE-2026-61781Krytyczne
pg_partman to rozszerzenie PostgreSQL zarządzające tabelami partycjonowanymi według czasu lub identyfikatora. W wersjach przed 5.5.0 funkcja create_partition_time() odczytuje zapisywalną wartość tekstową part_config.time_encoder i interpoluje ją bez cytowania identyfikatora do dynamicznie wykonywanego zapytania SELECT. Rola z udokumentowanymi uprawnieniami INSERT i UPDATE partman_user może zapisać kod SQL zamiast nazwy funkcji. Gdy pg_partman_bgw później tworzy partycję podrzędną dla zestawu z kluczem tekstowym lub UUID, worker wykonuje zapisany kod SQL z uprawnieniami pg_partman_bgw.role, które domyślnie odpowiadają superużytkownikowi PostgreSQL. Trwały wiersz konfiguracji może wielokrotnie przywracać podwyższony dostęp przy kolejnych cyklach konserwacji, a skuteczne wykorzystanie może pozwolić na kompromitację całej bazy danych i wykonanie poleceń systemu operacyjnego jako konto usługi PostgreSQL. Problem został naprawiony w wersji 5.5.0.
- CVE-2026-61822Średnie
pg_partman przed wersją 5.5.0 ma podatność w funkcji run_maintenance(), która obsługuje wyjątki poza pętlą przetwarzającą wiersze z part_config. Wyjątek dla jednego zestawu partycji natychmiast przerywa pętlę i pomija wszystkie kolejne zestawy. Użytkownik z dostępem partman_user może wstawić lub zaktualizować wiersz, który niezawodnie powoduje błąd, i przypisać mu niską wartość maintenance_order, aby był przetwarzany przed legalnymi wierszami.
- CVE-2026-61821Wysokie
pg_partman to rozszerzenie PostgreSQL zarządzające tabelami partycjonowanymi. W wersjach przed 5.5.0 funkcje drop_partition_id() i drop_partition_time() używają part_config.retention_schema jako celu dla ALTER TABLE SET SCHEMA i akceptują dowolną niepustą nazwę schematu. Rola z dostępem partman_user może wybrać schemat docelowy, w którym nie ma normalnego uprawnienia CREATE, a proces w tle wykonuje przeniesienie z uprawnieniami pg_partman_bgw.role, domyślnie superużytkownika PostgreSQL, omijając kontrolę autoryzacji.
- CVE-2026-61819Wysokie
pg_partman to rozszerzenie PostgreSQL zarządzające tabelami partycjonowanymi. W wersjach przed 5.5.0, gdy zainstalowany jest pg_jobmon i part_config.jobmon ma wartość true, procedury obsługi wyjątków w wielu funkcjach pg_partman umieszczają p_parent_table dosłownie w literale SQL używanym do wywołania pg_jobmon.add_job(). partman_user może utworzyć nazwę tabeli nadrzędnej zawierającą apostrof, który kończy literał i wstrzykuje SQL, gdy uruchomiona zostanie dotknięta ścieżka wyjątku.
- CVE-2026-61818Wysokie
pg_partman to rozszerzenie PostgreSQL zarządzające tabelami partycjonowanymi. W wersjach przed 5.5.0 funkcja undo_partition() odczytuje part_config.time_encoder jako nieograniczony tekst i interpoluje go bez cytowania identyfikatora do dynamicznie wykonywanej instrukcji SELECT. Rola z dostępem partman_user może zapisać SQL zamiast nazwy funkcji, a SQL wykonuje się z uprawnieniami wywołującego undo_partition().
- CVE-2026-61817Wysokie
pg_partman to rozszerzenie PostgreSQL zarządzające tabelami partycjonowanymi. W wersjach przed 5.5.0 funkcje run_maintenance(), show_partitions(), show_partition_info(), undo_partition() i partition_data_time() interpolują zapisywalną wartość tekstową part_config.time_dncoder bez cytowania identyfikatora do dynamicznego SQL. Rola z udokumentowanymi uprawnieniami partman_user może zapisać SQL zamiast nazwy funkcji dekodera.
Oryginalny opis (angielski, źródło NVD)
pg_partman is a PostgreSQL extension that manages partitioned tables by time or ID. Prior to 5.5.0, inherit_template_properties() manually surrounds primary-key column names from pg_attribute.attname with double quotes without escaping embedded double-quote characters. A partman_user who owns a template table can create a crafted column name that breaks out of the generated ALTER TABLE ADD PRIMARY KEY identifier when the background worker applies the key to a child partition. The generated SQL then executes with pg_partman_bgw.role privileges, which default to PostgreSQL superuser, permitting database-wide compromise and operating-system command execution as the PostgreSQL service account. The crafted catalog identifier persists until removed and can trigger again during later partition creation. This issue is fixed in version 5.5.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

