Skip to main content

PostgreSQL Anonymizer CVE-2026-13455

| EUVDEUVD-2026-40349 MEDIUM
Use of Weak Hash (CWE-328)
2026-06-30 PostgreSQL GHSA-8ch8-93q8-mhm3
4.3
CVSS 3.1 · Vendor: PostgreSQL
View

Attack ChainAIDerived

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

  1. Access
    Obtain authenticated masked database role
  2. Delivery
    Call anon.hash() with large known-seed dictionary
  3. Exploit
    Collect sufficient (seed, hash_output) pairs
  4. Execution
    Run offline brute-force to recover salt
  5. Persist
    Reverse all pseudonymized column values
  6. Impact
    Exfiltrate original sensitive data

Vulnerability Assessment

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

Exploitation requires an authenticated database user holding a masked role with execute permission on anon.hash() - the standard configuration for any masked user in a PostgreSQL Anonymizer deployment, making this the default operational state rather than a special configuration. The attacker must supply arbitrary seed inputs and collect a sufficient volume of (seed, hash_output) pairs for offline brute-force; the number required depends on the salt length and underlying hash algorithm, neither of which is specified in the advisory. Limiting factors: the attacker must possess valid database credentials with a masked role assignment; the brute-force phase requires offline compute resources; and the attack is not instantaneous, requiring a sustained data-collection phase that may be observable in query logs. Deployments where masked roles are restricted exclusively to fully-trusted internal users with monitored access face substantially lower realistic risk. No non-default configuration is required - the vulnerability is present in the baseline use of the extension.

Impact

The CVSS 4.3 Medium score (AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N) reflects a network-reachable, low-complexity attack requiring low privileges with confidentiality-only, partial impact. The C:L rating may understate real-world impact: recovering the salt enables reversal of all pseudonymized columns in the database, not a single record - the systemic exposure is disproportionate to the partial-impact designation. No EPSS data was supplied; no KEV listing exists; no public POC has been identified, placing this in the no-active-exploitation category at time of analysis. AC:L is justified because the collection phase (repeated anon.hash() calls) involves no special conditions beyond holding a masked role, which is the extension's baseline operational mode. The risk is most acute in deployments where masked roles are granted to semi-trusted parties such as external analysts or contractors, which is the primary stated use case for PostgreSQL Anonymizer - meaning the attacker profile is exactly the population the extension is designed to handle. Post-patch, organizations should rotate the anonymization salt, since collected pairs from before the upgrade remain usable offline against the old salt.

Exploit ScenarioDerived

A database analyst granted a masked role on a PostgreSQL instance running a vulnerable version of PostgreSQL Anonymizer connects over the network and invokes anon.hash() with a large dictionary of known seed values, accumulating thousands of (seed, output) pairs over multiple sessions. The attacker processes these pairs offline using brute-force or dictionary techniques to recover the salt. With the salt in hand, the attacker uses the same hash function to reverse every pseudonymized column in the database, exposing the original sensitive personal data that the extension was deployed to protect.

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 – Jun 30, 2026

PostgreSQL Anonymizer's anon.hash() function exposes its internal salt to masked database users through an offline brute-force attack, undermining the core pseudonymization guarantee of the extension. Masked roles - the primary consumer of this extension - can call anon.hash() with arbitrary seed inputs and accumulate (seed, hash_output) pairs to deduce the salt offline, after which all pseudonymized values in the database become reversible. No active exploitation or public proof-of-concept has been identified; a vendor-confirmed fix is available in version 3.1.2.

RemediationAI

Upgrade to PostgreSQL Anonymizer 3.1.2 or later, the vendor-confirmed fix version per the description and GitLab issue https://gitlab.com/dalibo/postgresql_anonymizer/-/issues/649. After patching, rotate the anonymization salt immediately, since any (seed, hash_output) pairs collected by masked users prior to the upgrade remain usable offline to deduce the old salt and reverse historical pseudonymized data - rotation invalidates prior collection efforts. If immediate upgrade is not feasible, revoke or restrict direct execute permission on anon.hash() from masked roles at the PostgreSQL level using REVOKE EXECUTE ON FUNCTION anon.hash() FROM <masked_role>; note this may break masking workflows that depend on the function and should be tested in a non-production environment first. No additional vendor workarounds are documented in the available references.

Affected VersionsENISA

PostgreSQL Anonymizer 1 <3.1.2

Affected Packages

euvd postgresql_anonymizer fix: 3.1.2

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 PostgreSQL extension by Dalibo (CPE: cpe:2.3:a:dalibo:postgresql_anonymizer:*:*:*:*:*:*:*:*) that provides declarative data masking and pseudonymization by applying keyed hash functions to sensitive columns. The anon.hash() function transforms values using a salt-seeded algorithm, with the salt acting as the secret that prevents reversal. CWE-328 (Use of Weak Hash) identifies the root cause class: the hash function's design or invocation mode permits an observer to reconstruct the secret salt by analyzing sufficient input/output pairs. Because masked roles are intentionally granted query access as part of normal extension usage, the data-collection phase requires no privilege escalation - it exploits a capability that is legitimately exposed to exactly the class of user the extension is meant to restrict. Once the salt is recovered offline, the attacker can reverse every pseudonymized value in the database using the same function.

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

Network-accessible collection phase with no complexity beyond holding a masked role (PR:L); confidentiality-only, no integrity or availability impact; scope unchanged as recovery affects same database authorization boundary.

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
Red Hat 4.3 MEDIUM

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
Jun 30, 2026 - 17:01 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. The problem is resolved in PostgreSQL Anonymizer 3.1.2 and later versions

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Low
niche PostgreSQL extension for data anonymization, limited to specific compliance-driven deployments
Data Quality
6 sources
Confidence: High

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

Vendor StatusVendor

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