High · published May 14, 2026
Use of inherently dangerous function PQfn(..., result_is_int=0, ...) in PostgreSQL libpq lo_export(), lo_read(), lo_lseek64(), and lo_tell64() functions allows the server superuser to overwrite a client stack buffer with an arbitrarily-large response. Like gets(), PQfn(..., result_is_int=0, ...) stores arbitrary-length, server-determined data into a buffer of unspecified size. Because both the \lo_export command in psql and pg_dump call lo_read(), the server superuser can overwrite pg_dump or psql stack memory. Versions before PostgreSQL 18.4, 17.10, 16.14, 15.18, and 14.23 are affected.
| Product | Versions | Fixed in |
|---|---|---|
| postgresql/postgresql | < 14.23 | 14.23 |
| postgresql/postgresql | ≥ 15.0, < 15.18 | 15.18 |
| postgresql/postgresql | ≥ 16.0, < 16.14 | 16.14 |
| postgresql/postgresql | ≥ 17.0, < 17.10 | 17.10 |
| postgresql/postgresql | ≥ 18.0, < 18.4 | 18.4 |