Medium · published August 13, 2026
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.
| Product | Versions | Fixed in |
|---|---|---|
| postgresql/postgresql | ≥ 14.0, < 14.24 | 14.24 |
| postgresql/postgresql | ≥ 15.0, < 15.19 | 15.19 |
| postgresql/postgresql | ≥ 16.0, < 16.15 | 16.15 |
| postgresql/postgresql | ≥ 17.0, < 17.11 | 17.11 |
| postgresql/postgresql | ≥ 18.0, < 18.5 | 18.5 |