PHP2Shell: Read our blog on the critical RCE vulnerabilities affecting 70% of the Internet
Vulnerability DatabaseCVE-2026-103484

CVE-2026-103484: 
PostgreSQL vulnerability analysis and mitigation

Overview

CVE-2026-103484 is an out-of-bounds write vulnerability in the IVFFlat index build functionality of pgvector, a PostgreSQL extension for vector similarity search. It affects all versions of pgvector before 0.8.7 and was disclosed on October 1, 2026, with a fix released simultaneously in version 0.8.7. The vulnerability was reported by Emanuele Barbeno, Cyrill Bannwart, Urs Mueller, and Lukasz D of Compass Security (GitHub Issue). It carries a CVSS v3.1 base score of 8.8 (High) (Github Advisory).

Technical details

The root cause is improper validation of vector dimensions during IVFFlat index construction (CWE-787: Out-of-bounds Write; CWE-1284: Improper Validation of Specified Quantity in Input). When a database user creates an IVFFlat index and inserts vectors whose declared dimensions do not match the index's expected dimensions, the extension writes data beyond the bounds of the allocated buffer without performing adequate dimension checks. The fix in commit ee00d39 introduced IvfflatCheckDim() and HnswCheckDim() functions that validate vector dimensions against the index metadata at multiple entry points (index build, insert, and scan), and also updated IvfflatGetMetaPageInfo and HnswGetMetaPageInfo to expose stored dimension information for validation (GitHub Commit). The attack vector is network-accessible (AV:N) with low privileges required (PR:L), meaning any authenticated database user with permission to create an IVFFlat index can trigger the vulnerability (Github Advisory).

Impact

Successful exploitation allows a low-privileged database user to trigger arbitrary code execution within the PostgreSQL server process context, resulting in high impact to confidentiality, integrity, and availability of the affected system (Github Advisory, Red Hat Bugzilla). An attacker who achieves code execution within the PostgreSQL process could access all data managed by the database server, modify or destroy data, and potentially pivot to other systems accessible from the database host. The scope is limited to the PostgreSQL process itself (Scope: Unchanged), but the total technical impact is classified as high across all three security dimensions (Feedly).

Exploitability

There is no public proof-of-concept exploit code and no evidence of in-the-wild exploitation at the time of disclosure (Feedly). The NVD SSVC assessment classifies exploitation as "none" and the attack as non-automatable, indicating that exploitation requires deliberate, manual action by an authenticated database user. The EPSS score is approximately 0.422%, placing it in the 35th percentile for exploitation probability within 30 days (Github Advisory). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog, and no threat actor attribution has been reported.

Exploitation steps

  1. Gain database access: Obtain credentials for a low-privileged PostgreSQL user account that has permission to create indexes on a table — this is the minimum privilege required.
  2. Create a target table with a vector column: Create or identify a table with a vector column type provided by the pgvector extension (e.g., CREATE TABLE items (embedding vector(3))).
  3. Create an IVFFlat index: Issue a CREATE INDEX statement using the IVFFlat index type on the vector column (e.g., CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)).
  4. Insert dimension-mismatched vectors: Insert vector data whose actual dimensions differ from those declared in the index definition, bypassing the (absent, pre-patch) dimension validation to trigger an out-of-bounds write during the index build process.
  5. Achieve code execution: The out-of-bounds write corrupts memory within the PostgreSQL backend process, potentially enabling arbitrary code execution in the context of the PostgreSQL server process (GitHub Issue, GitHub Commit).

Indicators of compromise

  • Logs: PostgreSQL server logs showing unexpected crashes or memory corruption errors (e.g., SIGSEGV, SIGBUS) originating from the ivfbuild or ivfinsert code paths; error messages referencing IVFFlat index construction.
  • Logs: PostgreSQL logs showing CREATE INDEX USING ivfflat statements from unexpected or low-privileged users, particularly on tables with mismatched vector dimensions.
  • Process: Unexpected child processes spawned by the PostgreSQL backend process (e.g., shell commands, network utilities) following IVFFlat index build operations.
  • File System: Unexpected new files or scripts written to the PostgreSQL data directory or system directories by the postgres OS user.
  • Network: Outbound connections from the PostgreSQL server process to external hosts not associated with normal replication or backup activity.

Mitigation and workarounds

The primary remediation is to upgrade pgvector to version 0.8.7 or later, which introduces dimension validation checks at all IVFFlat and HNSW index entry points (GitHub Issue, GitHub Commit). As a workaround for environments that cannot immediately upgrade, restrict the CREATE INDEX privilege to only trusted database users, minimizing the attack surface. Additionally, monitor PostgreSQL logs for unexpected IVFFlat index creation activity from low-privileged accounts (Feedly).

Community reactions

The vulnerability was disclosed responsibly by researchers from Compass Security (Emanuele Barbeno, Cyrill Bannwart, Urs Mueller, and Lukasz D), and the pgvector maintainers released a fix simultaneously with the disclosure (GitHub Issue). The PostgreSQL project published a release announcement for pgvector 0.8.7 covering the fix (PostgreSQL News). A technical blog post titled "The Vector That Lied About Its Dimensions" was published shortly after disclosure, providing additional context on the vulnerability mechanics (TheBuild Blog). Red Hat tracked the issue via Bugzilla and classified it as high severity (Red Hat Bugzilla).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

sid

pgvector: 0.8.7-1

Fixed

trixie

pgvector

Affected

Ubuntu

Unknown

devel

pgvector

Unknown

noble

pgvector

Unknown

noble (esm-apps)

pgvector

Unknown

resolute

pgvector

Unknown

resolute (esm-apps)

pgvector

Unknown

RHEL / CentOS

Affected

RHEL 9

postgresql:16/pgvector.src

Affected

RHEL 10

postgresql16-pgvector.src

Affected

Source: This report was generated using AI

Related PostgreSQL vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-103484HIGH8.8
  • PostgreSQL logoPostgreSQL
  • pgvector
NoYesOct 01, 2026
CVE-2026-19633HIGH8.8
  • PostgreSQL logoPostgreSQL
  • postgresql16-anonymizer
NoYesSep 06, 2026
CVE-2026-96883HIGH8.7
  • PostgreSQL logoPostgreSQL
  • postgresql-12
NoNoSep 24, 2026
CVE-2026-83534MEDIUM6.4
  • PostgreSQL logoPostgreSQL
  • postgresql16-anonymizer-debugsource
NoYesSep 06, 2026
CVE-2026-19634MEDIUM6.4
  • PostgreSQL logoPostgreSQL
  • postgresql16-anonymizer-debugsource
NoYesSep 06, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management