CVE-2026-6477 PUBLISHED

PostgreSQL libpq lo_* functions let server superuser overwrite client stack memory

Assigner: PostgreSQL
Reserved: 17.04.2026 Published: 14.05.2026 Updated: 15.05.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.

Metrics

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
CVSS Score: 8.8

Product Status

Vendor n/a
Product PostgreSQL
Versions Default: unaffected
  • affected from 18 to 18.4 (excl.)
  • affected from 17 to 17.10 (excl.)
  • affected from 16 to 16.14 (excl.)
  • affected from 15 to 15.18 (excl.)
  • affected from 0 to 14.23 (excl.)

Workarounds

use PQexecPrepared(), not PQfn(..., result_is_int=0, ...) or its lo_* wrappers

Credits

  • The PostgreSQL project thanks Yu Kunpeng and Martin Heistermann for reporting this problem.

References

Problem Types

  • Use of Inherently Dangerous Function CWE