Skip to main content

pg_partman CVE-2026-61822

| EUVDEUVD-2026-83422 MEDIUM
Improper Check or Handling of Exceptional Conditions (CWE-703)
2026-09-18 GitHub_M
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain partman_user role access
  2. Delivery
    Insert reliably-failing part_config row with low maintenance_order
  3. Exploit
    run_maintenance() processes poisoned row first
  4. Execution
    Exception aborts entire maintenance loop
  5. Impact
    All later partition sets skipped, maintenance halts database-wide

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling framework
Exploitation Conditions

Requires an authenticated database role that has been granted partman_user access to the pg_partman configuration tables (PR:L) - this is the single hard prerequisite and is not the default for ordinary users. The attacker must be able to INSERT or UPDATE rows in part_config, including setting a low maintenance_order value, and must craft a row that reliably raises an exception during run_maintenance(). Impact is realized only when scheduled maintenance runs (typically the pg_partman background worker or a cron-invoked run_maintenance()). No user interaction and no non-default product configuration are needed beyond having partition sets under active maintenance. Affected: pg_partman prior to 5.5.0; risk is most material in multi-tenant/shared clusters where multiple roles hold partman_user.

Impact

This is a genuine but modest-severity availability issue, and the raw CVSS 6.5 (MEDIUM) is a fair reflection of real-world risk. The vendor CVSS vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H) is internally consistent with the description and with CWE-703 (improper handling of exceptional conditions): the only impact is availability (A:H) - loss of automated partition maintenance database-wide - with no confidentiality or integrity impact. Critically, the input Tags include 'Information Disclosure', which directly contradicts the CVSS vector (C:N) and the description; this is a DoS/availability flaw, not information disclosure - the tag is mislabeled. No EPSS score, no CISA KEV listing, and no public POC are provided, so exploitation likelihood signals are absent. Exploitation requires an authenticated role holding partman_user access (PR:L), which meaningfully limits the attacker population to insiders/tenants who already have partition-management rights - this is more an insider/multi-tenant abuse or misconfiguration risk than an internet-facing threat. The 'network' attack vector (AV:N) reflects that the malicious row is inserted via an ordinary SQL connection, not that it is unauthenticated. Overall: a real, low-friction denial of maintenance for a privileged DB role, but not a drop-everything priority.

Exploit ScenarioDerived

In a shared PostgreSQL environment, a user with partman_user access inserts or updates a part_config row that is guaranteed to fail during maintenance and assigns it a low maintenance_order so it is processed first. On each subsequent maintenance tick, run_maintenance() hits the exception on that poisoned row and, because the exception is handled outside the row loop, immediately aborts before maintaining any legitimate partition sets. No public exploit code is identified at time of analysis; the technique is trivial given the required privilege.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 18, 2026

Improper exception handling in pg_partman's run_maintenance() function allows an authenticated database role holding partman_user access to permanently stall automated partition maintenance across an entire database. Because the exception handler wraps the whole row-processing loop over part_config rather than each individual partition set, a single crafted row that reliably raises an error - and that is given a low maintenance_order value so it is processed first - immediately aborts the loop and skips every legitimate partition set scheduled after it. Each subsequent maintenance tick (background worker or cron) fails the same way, so child partitions stop being created and retention stops dropping old ones, producing a database-wide availability impact; no public exploit code has been identified at time of analysis and there is no KEV listing, though EPSS and exploitation data were not available in this feed. Fixes are available in pg_partman 5.5.0.

RemediationAI

Upgrade pg_partman to 5.5.0 (vendor-released patch: 5.5.0), available from https://github.com/pgpartman/pg_partman/releases/tag/v5.5.0 with the code fix in commit ba9405542acf24dd881845b935cab8b165854361 and advisory guidance at https://github.com/pgpartman/pg_partman/security/advisories/GHSA-9m6c-hw23-c6h2. Note that 5.5.0 is a breaking release: the default for the pg_partman_bgw.role GUC changes to the arbitrary value partman_maintainer, so if the background worker was previously relying on an implicit superuser default or on a role that is not named partman_maintainer, you must explicitly set pg_partman_bgw.role (ideally to a dedicated non-superuser maintainer role) before or immediately after upgrading or scheduled maintenance will begin throwing errors. Until upgrading is possible, apply the compensating control of auditing and revoking partman_user privileges on part_config and part_config_sub from any role that does not genuinely need them, and restrict INSERT/UPDATE on those tables to a small set of trusted roles - the trade-off is that legitimate partition-set owners in multi-tenant environments lose self-service configuration and must route changes through the DBA. Additionally, periodically inspect part_config rows for anomalous entries with unusually low maintenance_order values or malformed arguments, and monitor PostgreSQL logs for partman warnings paired with a NULL last_run column, which is the failure signature of this issue; both checks require operational effort and monitoring infrastructure but do not remove the underlying code defect. If the background worker currently runs as a superuser, moving it to a least-privilege maintainer role is recommended regardless of upgrade timing, since the same release documentation ties superuser BGW operation to additional privilege-escalation CVEs fixed in 5.5.0.

Affected VersionsENISA

pg_partman < 5.5.0

Affected Packages

euvd pg_partman fix: 5.5.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

pg_partman is a PostgreSQL extension that automates creation, management, and retention of time- or ID-based partitioned tables through a background worker (BGW) or scheduled invocation of run_maintenance(). Internally, run_maintenance() reads partition-set definitions from the part_config configuration catalog and processes them in maintenance_order sequence; the vulnerable code placed the exception handler outside that iteration loop, which maps to CWE-703 (Improper Check or Handling of Exceptional Conditions). As a result, an error raised while processing one partition set - for example a deliberately malformed configuration row inserted or updated by a role with partman_user privileges - terminates processing of the entire batch instead of being caught per set, leaving all remaining partition sets unmaintained and their last_run column stale. The CPE string cpe:2.3:a:pgpartman:pg_partman:*:*:*:*:*:*:*:* is unconstrained on version, so every release prior to 5.5.0 is in scope, including the widely deployed 5.4.x line commonly used on Amazon RDS, Google Cloud, Azure, Supabase, and self-managed PostgreSQL. The same upstream commit that addressed this issue also hardened the extension more broadly, including raising the recommended non-superuser posture for the background worker and adding the maintenance_role column used for row-level-security policies on part_config and part_config_sub.

Know when PostgreSQL gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 6.5 MEDIUM

partman_user access is required so PR:L; the poisoned row is inserted over a normal SQL connection (AV:N) with no special timing (AC:L); impact is availability-only (A:H), no C/I effect.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

1
Patch available
Sep 18, 2026 - 21:18 EUVD

DescriptionCVE.org

pg_partman is a PostgreSQL extension that manages partitioned tables by time or ID. Prior to 5.5.0, run_maintenance() handles exceptions outside the loop that processes rows from part_config, so an exception for one partition set immediately terminates the loop and skips every later set. A role with partman_user access can insert or update a row that reliably fails and assign it a low maintenance_order value so it is processed before legitimate rows. Repeated maintenance ticks then abort before legitimate partition sets are maintained, causing database-wide loss of automated partition maintenance. This issue is fixed in version 5.5.0.

Threat Intelligence Overview

EPSS Score
0.4%
Top 67% exploitable
Prevalence
Medium
popular PostgreSQL partitioning extension, available on RDS/Azure/Supabase/Snowflake
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0
CVE-2025-1094 HIGH POC
8.1 Feb 13

PostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl

CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2013-1899 MEDIUM POC
6.5 Apr 04

Argument injection vulnerability in PostgreSQL 9.2.x before 9.2.4, 9.1.x before 9.1.9, and 9.0.x before 9.0.13 allows re

CVE-2026-20253 CRITICAL POC
9.8 Jun 10

Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.

CVE-2026-9586 CRITICAL POC
9.3 Jul 17

Unauthenticated SQL injection in Sangoma Switchvox SMB Edition 8.3 (build 104997) lets remote attackers execute arbitrar

CVE-2017-7546 CRITICAL
9.8 Aug 16

PostgreSQL versions before 9.2.22, 9.3.18, 9.4.13, 9.5.8 and 9.6.4 are vulnerable to incorrect authentication flaw allow

CVE-2015-1352 MEDIUM POC
5.0 Mar 30

The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t

CVE-2024-10553 CRITICAL POC
9.8 Mar 20

A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra

CVE-2019-9193 HIGH POC
7.2 Apr 01

In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve

CVE-2026-40887 CRITICAL POC
9.1 Apr 14

Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the

CVE-2022-24760 CRITICAL POC
10.0 Mar 12

Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot

CVE-2025-56157 CRITICAL POC
9.8 Dec 18

Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy