// 1 ZERO-DAY · 2 CVE · 1 EXPLOIT IN THE LAST 24H→
The PostgreSQL Global Development Group released security updates on November 12, 2026, addressing 52 vulnerabilities including CVE-2026-6460, a 22-year-old type confusion bug enabling authenticated RCE with a CVSS 8.8 score. Complete protection requires recompiling all C-language extensions against the new server headers.

The PostgreSQL Global Development Group released security updates on November 12, 2026, addressing 52 vulnerabilities, including CVE-2026-6460, a type confusion bug present in the code since 2004 that enables authenticated remote code execution with a CVSS score of 8.8. Effective protection goes beyond updating the server: it requires a full recompile of all C-language extensions against the new headers, otherwise the system remains exposed despite an apparently successful apt upgrade.

Key Takeaways
  • The November 12, 2026 release fixes 52 CVEs, 32 of which carry a CVSS score of 8.8, the highest in the batch.
  • CVE-2026-6460 is a type confusion bug in composite types dating back to May 5, 2004, when PostgreSQL gained the ability to change column types.
  • The code execution technique relies on a change from May 14, 2015; the attacker must hold CREATE privileges.
  • The fix alters the C extension ABI: old extensions on new servers load but do not execute the new security checks.

A 22-Year Bug: How Type Confusion Becomes RCE

The flaw at the heart of CVE-2026-6460 lies in the handling of composite types. When an administrator runs ALTER TABLE ... SET DATA TYPE, PostgreSQL updates the tuple descriptor that defines the data structure, but existing data on disk retains the original format. This mismatch between descriptor and actual payload creates a type confusion condition: old bytes are read as if they belonged to the new type, with consequences ranging from crashes to code execution.

Security researcher Mehmet Ince, who published a working exploit demonstrated on PostgreSQL 18.6, traced the root of the flaw to May 5, 2004. The specific technique for code execution relies on a subsequent change from May 14, 2015. The researcher shared the proof-of-concept with managed providers — AWS, Azure, GCP, Supabase, Databricks, Ubicloud — as early as August 2026.

The attack requires CREATE privileges: the attacker must be able to create objects in the database. With these permissions, they manipulate composite types so that old bytes are interpreted as pointers or metadata of another type, ultimately achieving code execution with the privileges of the PostgreSQL server process. According to the cited source, the researcher demonstrated the crash "as a login role with the lowest privileges."

The ABI Shift: When an Updated Server Is Not Enough

The PostgreSQL Global Development Group introduced an attribute versioning mechanism in the fix. Commit 245eb832f converts DatumGetHeapTupleHeader() from a macro to a server function and adds heap_datum_check(), a new validation function that marks composite datums and versions named ones. This change, technically necessary to close the attack surface, alters the Application Binary Interface of C extensions.

The consequences are binary and asymmetric. Extensions compiled against the old headers, running on an updated server, load normally but do not execute the new heap_datum_check() validations. The system appears functional, yet the vulnerability remains exploitable. Conversely, extensions recompiled with the new headers fail with an undefined symbol error on unpatched servers. RPM package maintainers for PostgreSQL have explicitly warned that old extensions on new servers "may not be protected from the vulnerabilities fixed in this release."

This scenario creates an insidious security gap. An administrator who runs sudo apt upgrade, sees "nothing to upgrade" or a clean server restart, assumes protection is in place. Extensions like PostGIS, pgvector, pg_cron, TimescaleDB — all compiled in C — continue to operate with the old ABI, silently bypassing the new security checks. As Byteiota reports: "Running sudo apt upgrade and seeing 'nothing to upgrade' does not mean you are protected."

The Scope of 52 Flaws: Server-Side RCE and Vulnerable Clients

Beyond CVE-2026-6460, the release encompasses 52 vulnerabilities with varying profiles. According to Corgea, 29 CVEs in the batch describe server-side code execution, while 6 require only authentication without additional privileges. A notable exception is CVE-2026-116322: according to The Hacker News, it is the only vulnerability in the batch that requires no authentication and allows unauthenticated clients to restart PostgreSQL 18 servers.

Client tools are also affected. Corgea documents flaws in pg_dump (CVE-2026-116318, CVE-2026-116330), pg_restore (CVE-2026-116314), reindexdb, and vacuumdb. CVE-2026-116318 is a SQL injection in pg_dump: unquoted constraint names passed through fmtId() are injected directly into the dump output. Commit 9e4cde7927 shows the fix. For CVE-2026-116330, GitHub commit 17e57d06cd3a3966143502626a2f5c7534f8309c makes \restrict keys protective in pg_dump's tar format.

What to Do Now

  • Upgrade to the patched versions: 18.7, 17.12, 16.16, 15.20, or 14.25 as the final release before PostgreSQL 14 reaches end-of-life.
  • Recompile all C-language extensions — PostGIS, pgvector, pg_cron, TimescaleDB, and any others installed locally — against the updated server headers.
  • Explicitly verify container images and managed package repositories: cloud providers apply patches on their own schedules, and official images may not include recompiled extensions.
  • Plan migration from PostgreSQL 14: the branch is end-of-life, 14.25 is the last available security update, and no further updates will arrive.

The PostgreSQL project added a new composite_type_mismatch parameter but explicitly warned against using it to disable security checks. No alternative workaround is documented for systems that cannot be upgraded immediately.

Why This Release Is a Case Study

The case of CVE-2026-6460 illustrates a structural problem in the security of modular systems. Extended modularity — third-party extensions compiled in the server's native language — creates an attack surface that standard update mechanisms do not cover. The OS package manager updates the main binary but has no visibility or control over extensions installed via CREATE EXTENSION or compiled manually.

The discrepancy between "server updated" and "system protected" generates a false sense of security that can persist for weeks, until an audit or penetration test reveals the vulnerable extension still running. DevOps teams operating in containerized environments must also verify that rebuilt base images actually include recompilation, not just a pull of the PostgreSQL package.

No in-the-wild exploitation is confirmed at the time of publication; according to the cited source, CISA assesses exploitation as "none." However, the availability of a public exploit and the notification to managed providers as early as August 2026 widen the risk window for environments not yet updated.

"Using a tuple descriptor that does not match the 'shape' of a composite datum can lead to crashes, spurious errors and can be used for exploits. This commit introduces a new safety layer... composite datums are marked as such and named composite datums are versioned" — Commit 245eb832f (via Corgea)

Frequently Asked Questions

Does a simple apt upgrade protect my server?

No. The PostgreSQL package update installs the patched server, but existing C-language extensions retain the old ABI and do not execute the new security checks. Recompilation is required for effective protection.

Which extensions require recompilation?

All extensions written in C, which according to cited sources commonly include PostGIS, pgvector, pg_cron, and TimescaleDB. The criterion is not the name but the implementation language: extensions in SQL or PL/pgSQL are not affected by the ABI change.

Is PostgreSQL 14 still supported?

No. PostgreSQL 14 reached end-of-life with the 14.25 release; it will receive no further security updates. Organizations on this branch must plan migration to PostgreSQL 15 or later.

Sources


Sources and references
  1. thehackernews.com
  2. news.lavx.hu
  3. simplysecuregroup.com
  4. corgea.com
  5. byteiota.com
  6. cisa.gov
  7. github.com