Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain partman_user role access
-
DeliveryInsert reliably-failing part_config row with low maintenance_order
-
Exploitrun_maintenance() processes poisoned row first
-
ExecutionException aborts entire maintenance loop
-
ImpactAll 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
More in PostgreSQL
View allPostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl
An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl
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
Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.
Unauthenticated SQL injection in Sangoma Switchvox SMB Edition 8.3 (build 104997) lets remote attackers execute arbitrar
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
The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t
A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra
In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve
Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the
Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot
Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al
EUVD-2026-83422
NVD
CVE.org
EPSS
GitHub
VulDB
Exploit-DB