---
id: CVE-2026-14666
title: >-
  Incomplete tracking in PostgreSQL of changes to role membership, role
  attributes, and database ownership allows a query to continue using cached
  row-level security policies after those changes require a different policy,
  via plan reuse
summary: >-
  Incomplete tracking in PostgreSQL of changes to role membership, role
  attributes, and database ownership allows a query to continue using cached
  row-level security policies after those changes require a different policy,
  via plan reuse. …
severity: medium
cvss: 4.2
cvssVector: 'CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N'
cwe:
  - CWE-1250
vendor: postgresql
product: postgresql
affected:
  - 'postgresql >= 14.0, < 14.24'
  - 'postgresql >= 15.0, < 15.19'
  - 'postgresql >= 16.0, < 16.15'
  - 'postgresql >= 17.0, < 17.11'
  - 'postgresql >= 18.0, < 18.5'
patched:
  - postgresql 18.5
published: '2026-08-13'
updated: '2026-08-29'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-14666'
references:
  - url: 'https://www.postgresql.org/support/security/CVE-2026-14666/'
    label: f86ef6dc-4d3a-42ad-8f28-e6d5547a5007
tags:
  - nvd
epss: 0.00175
epssPercentile: 0.07302
ingestedAt: '2026-08-29T23:43:53.039Z'
---

## Overview

Incomplete tracking in PostgreSQL of changes to role membership, role attributes, and database ownership allows a query to continue using cached row-level security policies after those changes require a different policy, via plan reuse.  Stale policies continue until some other event invalidates the cache or connection termination ends the session.  This permits a user to complete reads and modifications that were recently permitted but now forbidden.  An attacker must tailor an attack to a particular application's pattern of privilege removal and role-specific row security policies.  Versions before PostgreSQL 18.6, 17.11, 16.15, 15.19, and 14.24 are affected.

## Affected

- `postgresql >= 14.0, < 14.24`
- `postgresql >= 15.0, < 15.19`
- `postgresql >= 16.0, < 16.15`
- `postgresql >= 17.0, < 17.11`
- `postgresql >= 18.0, < 18.5`

## Remediation

Upgrade past the affected range:

- `postgresql 18.5`
