Skip to main content

PostgreSQL Anonymizer EUVDEUVD-2026-87134

| CVE-2026-97469 MEDIUM
Use of Weak Hash (CWE-328)
2026-09-25 PostgreSQL GHSA-g8c9-3556-8wq9
4.3
CVSS 3.1 · Vendor: PostgreSQL
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privileged masked role
  2. Delivery
    Call anon.hash() via sub-select to bypass RESTRICTED guard
  3. Exploit
    Collect many (seed, hash_output) pairs
  4. Execution
    Brute-force salt offline
  5. Impact
    De-anonymize masked data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Irreversible hash functions
Exploitation Conditions

Requires an existing low-privileged 'masked' role in a PostgreSQL instance running the PostgreSQL Anonymizer extension with dynamic masking configured (PR:L). The attacker must be able to reach the database over the network and execute SQL, invoking anon.hash() by placing the RESTRICTED function call inside a sub-select to bypass the intended call restriction. Exploitation is limited to deducing the masking salt through offline brute-force over collected (seed, hash_output) pairs - it does not by itself expose plaintext or elevate privileges, and it is fully mitigated in PostgreSQL Anonymizer 3.2.3 and later.

Impact

This is a genuine but low-severity issue whose signals are internally consistent rather than conflicting. The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N = 4.3, MEDIUM) correctly reflects a network-reachable but authenticated (PR:L) weakness with only low confidentiality impact and no integrity/availability effect - matching a description in which a low-privileged masked role recovers a masking salt, not arbitrary data. There is no EPSS score, no CISA KEV listing, and no public exploit code referenced (only a GitLab issue tracker link), so this is 'no public exploit identified at time of analysis.' The realistic-world priority is LOW-to-MEDIUM: exploitation yields the salt used by anon.hash(), which weakens the pseudonymization guarantee (enabling offline de-anonymization of hashed values) but does not directly expose plaintext or grant new privileges. No signals conflict; the main caveat is that impact is a downstream cryptographic weakening (CWE-328) rather than a direct data dump, which some may under-rate.

Exploit ScenarioDerived

An analyst or application account that has been given a masked (pseudonymized) role in a PostgreSQL database repeatedly invokes anon.hash() - smuggling the RESTRICTED function into a sub-select to bypass the call restriction - and records many (seed, hash_output) pairs. Offline, the attacker brute-forces the fixed salt from these pairs, then uses the recovered salt to reverse or correlate hashed values and de-anonymize supposedly masked data. No public exploit code is identified; the attack requires an existing low-privileged masked account.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 25, 2026

Salt deduction in PostgreSQL Anonymizer prior to 3.2.3 allows an authenticated low-privileged masked role to bypass RESTRICTED function protections by calling anon.hash() from inside a sub-select, collecting (seed, hash_output) pairs and performing an offline brute-force attack to recover the masking salt. This is a low-severity information-disclosure issue (CVSS 4.3, PR:L) that weakens masking guarantees but does not directly reveal plaintext or grant privilege escalation; no public exploit identified at time of analysis and no CISA KEV entry was identified. The issue is fixed in PostgreSQL Anonymizer 3.2.3 and later.

RemediationAI

Upgrade PostgreSQL Anonymizer to 3.2.3 or later, which contains the vendor fix and addresses the RESTRICTED function bypass; consult the Dalibo issue at https://gitlab.com/dalibo/postgresql_anonymizer/-/issues/685 for confirmation. If immediate upgrade is not possible, restrict masked roles from invoking anon.hash() directly, for example by revoking EXECUTE on the function or wrapping it in a controlled SECURITY DEFINER interface that rejects nested sub-select calls, but validate that change against existing masking policies because it can break legitimate pseudonymization workflows. Additionally, rotate the masking salt if a masked role may have collected (seed, hash_output) pairs, since salt recovery can reduce the effectiveness of previously masked data; monitor PostgreSQL logs for repeated anon.hash() calls from low-privileged roles as a detection control.

Affected VersionsENISA

PostgreSQL Anonymizer 1 <3.2.3

Affected Packages

euvd postgresql_anonymizer fix: 3.2.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

PostgreSQL Anonymizer is a Dalibo extension that provides dynamic masking and pseudonymization inside PostgreSQL. The anon.hash() function produces hash outputs that incorporate a masking salt, and access to this RESTRICTED function is intended to be limited so masked roles cannot use it as a hashing oracle. CVE-2026-97469 exploits a control-flow flaw where a masked role can place the RESTRICTED anon.hash() call inside a sub-select, bypassing the intended restriction and repeatedly obtaining (seed, hash_output) pairs. The underlying weakness is tracked as CWE-328 (Use of Weak Hash), because the salt can be deduced offline from those pairs rather than requiring direct disclosure or a cryptographic break. The CVSS vector AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N confirms network reachability, low complexity, authenticated low-privileged access, no user interaction, and limited confidentiality impact only.

Know when PostgreSQL gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (PostgreSQL) PRIMARY 4.3 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 4.3 MEDIUM

Authenticated masked role over a SQL connection (AV:N/PR:L); offline brute-force is within attacker control (AC:L); only the salt is disclosed, weakening masking (C:L, I:N, A:N).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (PostgreSQL).

CVSS VectorVendor: PostgreSQL

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Sep 25, 2026 - 17:04 EUVD

DescriptionCVE.org

PostgreSQL Anonymizer contains a vulnerability that allows unprivileged masked users to repeatedly call the anon.hash() function and collects (seed, hash_output) pairs to perform an offline brute-force attack and deduce the salt. A masked role can run a RESTRICTED function when the call is placed inside the sub-select. The problem is resolved in PostgreSQL Anonymizer 3.2.3 and later versions

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Low
niche Dalibo PostgreSQL masking extension, not core PostgreSQL
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

22
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +22
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2025-1094 HIGH POC
8.1 Feb 13

PostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl

CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2013-1899 MEDIUM POC
6.5 Apr 04

Argument injection vulnerability in PostgreSQL 9.2.x before 9.2.4, 9.1.x before 9.1.9, and 9.0.x before 9.0.13 allows re

CVE-2026-20253 CRITICAL POC
9.8 Jun 10

Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.

CVE-2026-9586 CRITICAL POC
9.3 Jul 17

Unauthenticated SQL injection in Sangoma Switchvox SMB Edition 8.3 (build 104997) lets remote attackers execute arbitrar

CVE-2017-7546 CRITICAL
9.8 Aug 16

PostgreSQL versions before 9.2.22, 9.3.18, 9.4.13, 9.5.8 and 9.6.4 are vulnerable to incorrect authentication flaw allow

CVE-2015-1352 MEDIUM POC
5.0 Mar 30

The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t

CVE-2024-10553 CRITICAL POC
9.8 Mar 20

A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra

CVE-2019-9193 HIGH POC
7.2 Apr 01

In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve

CVE-2026-40887 CRITICAL POC
9.1 Apr 14

Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the

CVE-2022-24760 CRITICAL POC
10.0 Mar 12

Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot

CVE-2025-56157 CRITICAL POC
9.8 Dec 18

Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy