{"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","slug":"CVE-2026-14666","body":"## Overview\n\nIncomplete 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.\n\n## Affected\n\n- `postgresql >= 14.0, < 14.24`\n- `postgresql >= 15.0, < 15.19`\n- `postgresql >= 16.0, < 16.15`\n- `postgresql >= 17.0, < 17.11`\n- `postgresql >= 18.0, < 18.5`\n\n## Remediation\n\nUpgrade past the affected range:\n\n- `postgresql 18.5`","depth":"sunlit","depthScore":23,"depthScoreParts":{"impact":23.1,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}