CVE-2026-61781
KrytyczneCVSS 9.9Streszczenie
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.
Ocena ryzyka
Atakujący z uprawnieniami partman_user może uzyskać uprawnienia superużytkownika PostgreSQL, co może prowadzić do pełnej kompromitacji bazy danych i wykonania poleceń systemu operacyjnego.
Rekomendacja
Należy zaktualizować pg_partman do wersji 5.5.0 lub nowszej, która naprawia tę podatność.
Inne podatności w pg_partman
Zobacz wszystkie- 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-61820Wysokie
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.
- 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, create_partition_time() reads the writable part_config.time_encoder text value and interpolates it without identifier quoting into a dynamically executed SELECT statement. A role with the documented partman_user INSERT and UPDATE privileges can store SQL rather than a function name. When pg_partman_bgw later creates a child partition for a text- or UUID-keyed set, the worker executes the stored SQL with pg_partman_bgw.role privileges, which default to PostgreSQL superuser. The persistent configuration row can repeatedly restore elevated access on later maintenance ticks, and successful exploitation can permit database-wide compromise and operating-system command execution as the PostgreSQL service account. This issue is fixed in version 5.5.0.

