This is like giving the database a measuring tape that rolls past zero before it cuts the wood
CVE-2026-6473 is an integer wraparound flaw in multiple PostgreSQL server features that can make the server allocate too little memory and then write past the end of that buffer. Upstream says the practical result is a backend segmentation fault; NVD preserves the broader worst-case that code execution as the postgres OS user may be possible. Fixed upstream versions are PostgreSQL 18.4, 17.10, 16.14, 15.18, and 14.23; supported vulnerable branches are 14 through 18, and NVD's affected range also implies older unsupported branches below 14.23 should be treated as exposed but unfixed.
Paragraph 2: The vendor's HIGH 8.8 is technically defensible in a vacuum because memory corruption inside a database daemon is never a toy. In enterprise reality, this lands lower: the attacker needs PostgreSQL reachability plus low privileges or an application path that faithfully relays attacker-controlled, very large inputs into the affected features, there is no KEV listing, no public exploitation signal in the source set, and the EPSS provided is tiny.
4 steps from start to impact.
Get a foothold in psql or through an app-to-DB path
psql, libpq, or psycopg, or through an application workflow that forwards attacker-controlled input into SQL operations. This is the decisive friction point: the bug is *not* a pre-auth network smash against a random port; it assumes the attacker can already talk to the database layer in a meaningful way.- Network path to the PostgreSQL listener or to an application that relays user input to PostgreSQL
- Valid database credentials or an app workflow that reaches the affected server feature
- Affected PostgreSQL version
- Most enterprise PostgreSQL servers are internal-only, behind app tiers, VPNs, SGs, or firewalls
- MFA, SSO, PAM, secret rotation, and app-layer auth reduce direct low-priv DB access
- Many users can influence app inputs but cannot directly hit the specific database feature set
Drive a vulnerable feature with oversized attacker-controlled input
psql or a client library, the attacker must hit one of the affected server features with data large enough to trigger an integer wraparound in a length or allocation calculation. PostgreSQL's advisory is deliberately broad on the exact feature list, but NVD narrows the practical case to an unprivileged database user or an application input provider passing gigabyte-scale inputs into relevant database functions.- Ability to supply attacker-controlled large inputs to a vulnerable server feature
- Feature reachable by the attacker's role or by the exposed application workflow
- Many applications cap request size long before inputs become gigabyte-scale
- Reverse proxies, ORM layers, app validation, and API gateways often reject oversized payloads
- Low-priv database roles are usually restricted from arbitrary function use in hardened deployments
Trigger the wraparound and corrupt backend memory
- Precise vulnerable code path reached
- Payload properties that produce the wraparound and subsequent out-of-bounds write
- Turning an out-of-bounds write into stable RCE is harder than causing a crash
- Modern compiler hardening, ASLR, and service isolation raise exploit-development cost
- The vendor advisory only guarantees segmentation fault, not reliable code execution
postgres backend crashes, core dumps, or service restarts. Memory corruption is usually visible operationally before it is visible semantically.Convert impact into outage or service-account execution
postgres service account, which is serious but still usually contained to the database host or its trust boundary unless chained onward.- Backend crash affects availability-sensitive workload or clustered service
- Or exploit reliability is high enough to convert memory corruption into code execution
- The
postgresOS user is usually non-root and often constrained by systemd, SELinux/AppArmor, containers, or pod policies - Lateral movement still requires separate secrets, trust relationships, or host weaknesses
- HA designs may convert single-node crashes into noisy but recoverable events
postgres account are the key signals. Traditional vuln scanners stop at version match and do not validate actual exploitability.The supporting signals.
| In-the-wild status | No primary-source evidence of active exploitation in the reviewed set. It is not listed in CISA KEV, and the PostgreSQL advisory/NVD entry do not claim exploitation. |
|---|---|
| Public PoC availability | No public PoC or exploit repo was located in the reviewed vendor/NVD/GitHub search results. Inference: crash reproduction is likely much easier than weaponized RCE. |
| EPSS | User-supplied EPSS is 0.00075 (~0.075% predicted exploitation probability). That is very low, and no primary-source percentile was verified from the source set. |
| KEV status | Not KEV-listed; no CISA date-added entry located for CVE-2026-6473. |
| CVSS vector meaning | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H means remote exploitation is possible after obtaining low privileges. The score is inflated by worst-case C/I/A impact, but the prerequisite is already post-auth. |
| Affected versions | Upstream vulnerable supported branches are PostgreSQL 14 through 18; fixed at 14.23, 15.18, 16.14, 17.10, and 18.4. NVD's CPE ranges imply versions below 14.23 are affected too, so older unsupported branches should be treated as vulnerable and unfixed. |
| Fixed versions and distro backports | Upstream fixes are in 18.4/17.10/16.14/15.18/14.23. Ubuntu marks postgresql-18 fixed in 26.04 LTS, postgresql-16 fixed in 24.04 LTS, and postgresql-14 fixed in 22.04 LTS; Amazon Linux 2023 shows postgresql16 as Pending Fix in its CVE tracker. |
| Scanning and exposure reality | This is only directly reachable where PostgreSQL itself is exposed or where an application forwards attacker-controlled large payloads into the DB. Shodan tracks internet-exposed PostgreSQL generally, but no CVE-specific GreyNoise/Shodan/Censys campaign signal was found in the reviewed sources. |
| Disclosure date | Disclosed on 2026-05-14 alongside PostgreSQL 18.4, 17.10, 16.14, 15.18, and 14.23. |
| Reporting researchers | PostgreSQL credits Anemone, A1ex, Xint Code, Jihe Wang, Jingzhou Fu, Pavel Kohout, Petr Simecek, www.aisle.com, Bruce Dang of Calif.io, and Sven Klemm. |
noisgate verdict.
The single biggest severity reducer is that this bug requires database-layer reachability plus low privileges or a cooperating application path, which makes it a post-initial-access problem in most enterprises rather than a perimeter break. The bug is still worth respect because it is memory corruption in a core data service, but the absence of exploitation evidence and the crash-first practical outcome keep it out of the emergency lanes.
Why this verdict
- Requires authenticated or app-mediated database reachability — major downward adjustment from 8.8.
PR:Lis not a footnote here; it means the attacker already has DB credentials or an application path that feeds attacker-controlled data into PostgreSQL, which is a materially narrower population than generic network RCE. - The practical effect is usually crash-before-code-exec — another downward adjustment. PostgreSQL's own advisory explicitly states the result is a segmentation fault, while NVD preserves worst-case possible OS-user code execution. That gap matters for triage on 10,000 hosts.
- No KEV, no exploitation signal, tiny EPSS — further downward adjustment. If this were being mass-scanned or broadly weaponized, the telemetry profile would look different by now.
- Widely deployed database software keeps the score from falling too far. PostgreSQL is common, often business-critical, and sometimes multi-tenant or internet-reachable by accident, so even a post-auth memory corruption bug can have ugly blast radius where exposure hygiene is poor.
Why not higher?
This is not the kind of bug that lets an unauthenticated internet attacker pop every exposed instance on first contact. The attacker needs a foothold at the database layer or a cooperating application path, and the best-documented outcome in the vendor advisory is a segfault rather than proven reliable RCE.
Why not lower?
Memory corruption inside a database server is not backlog fluff, even when post-auth. If you do have direct PostgreSQL exposure, shared database tenancy, risky extension usage, or weak role separation, this can quickly become a real availability event and possibly a service-account compromise.
What to do — in priority order.
- Block direct PostgreSQL exposure — Remove unnecessary internet reachability to TCP/5432 with SGs, firewalls, VPN-only access, or private networking. For a MEDIUM verdict there is no mitigation SLA — go straight to the 365-day remediation window, but do this immediately anywhere direct exposure still exists because it collapses the easiest attack path.
- Tighten low-priv database roles — Review application and human roles for unnecessary function execution, broad schema access, and direct SQL capability. There is no mitigation SLA for MEDIUM, so use this as a risk reducer where patching waits, and still complete vendor remediation within 365 days.
- Enforce input-size guardrails upstream — Cap request body size, parameter size, import size, and file upload size at the API gateway, proxy, app server, and worker tiers so untrusted users cannot push giant payloads into DB-backed features. There is no mitigation SLA for MEDIUM, but this is the cleanest way to break the vendor-described gigabyte-scale abuse path until patching lands within the remediation window.
- Alert on
postgrescrashes and restart loops — Wire EDR, journald/syslog, systemd, kube events, and HA monitors to page on backend segfaults, coredumps, failovers, or repeated restarts under thepostgresservice account. There is no mitigation SLA for MEDIUM, but this provides the best early signal if someone is probing the bug before all instances are remediated within 365 days.
- A WAF alone does not help when attackers connect directly to PostgreSQL or when the vulnerable input path is not HTTP-facing.
- Simply removing superuser from app roles is not enough; the advisory says low-privileged database users can reach the flaw.
- Database backups do not prevent exploitation; they only soften recovery after a crash or compromise.
- MFA on admin access is useful generally, but it does little for app-held DB credentials or already-compromised low-priv service accounts.
Crowdsourced verification payload.
Run this on the target PostgreSQL host or inside the container image that actually runs postgres. Invoke it as PGUSER=postgres ./check-cve-2026-6473.sh for a local socket check; no root is required, but you need either a local PostgreSQL login that can run SHOW server_version_num or read access to the postgres binary for fallback version detection.
#!/usr/bin/env bash
# check-cve-2026-6473.sh
# Exit codes:
# 0 = PATCHED
# 1 = VULNERABLE
# 2 = UNKNOWN
set -euo pipefail
get_server_version_num() {
# Preferred: ask the running server.
if command -v psql >/dev/null 2>&1; then
local out
if out=$(psql -X -A -t -q -c "SHOW server_version_num" postgres 2>/dev/null | tr -d '[:space:]'); then
if [[ "$out" =~ ^[0-9]{5,6}$ ]]; then
echo "$out"
return 0
fi
fi
fi
# Fallback: parse postgres binary version.
if command -v postgres >/dev/null 2>&1; then
local v major minor
v=$(postgres -V 2>/dev/null | awk '{print $NF}')
if [[ "$v" =~ ^([0-9]+)\.([0-9]+)(\.[0-9]+)?$ ]]; then
major="${BASH_REMATCH[1]}"
minor="${BASH_REMATCH[2]}"
# PostgreSQL 10+ uses major.minor; server_version_num is major*10000 + minor*100
echo $(( major * 10000 + minor * 100 ))
return 0
fi
fi
return 1
}
assess() {
local svn="$1"
local major minor
major=$(( svn / 10000 ))
minor=$(( (svn % 10000) / 100 ))
# NVD implies versions below 14.23 are affected too; older unsupported branches should be treated as vulnerable/unfixed.
if (( major < 14 )); then
echo "VULNERABLE"
echo "detail=unsupported older PostgreSQL branch (<14); treat as affected/unfixed for CVE-2026-6473"
return 1
fi
case "$major" in
14)
if (( minor < 23 )); then
echo "VULNERABLE"
echo "detail=14.${minor} < 14.23"
return 1
fi
;;
15)
if (( minor < 18 )); then
echo "VULNERABLE"
echo "detail=15.${minor} < 15.18"
return 1
fi
;;
16)
if (( minor < 14 )); then
echo "VULNERABLE"
echo "detail=16.${minor} < 16.14"
return 1
fi
;;
17)
if (( minor < 10 )); then
echo "VULNERABLE"
echo "detail=17.${minor} < 17.10"
return 1
fi
;;
18)
if (( minor < 4 )); then
echo "VULNERABLE"
echo "detail=18.${minor} < 18.4"
return 1
fi
;;
*)
# Newer major branches are assumed not vulnerable to this specific fixed-range issue unless vendor says otherwise.
echo "PATCHED"
echo "detail=major version ${major} not in affected upstream range 14-18"
return 0
;;
esac
echo "PATCHED"
echo "detail=meets or exceeds fixed upstream version for branch ${major}"
return 0
}
main() {
local svn
if ! svn=$(get_server_version_num); then
echo "UNKNOWN"
echo "detail=unable to determine PostgreSQL server version via psql or postgres binary"
exit 2
fi
echo "server_version_num=${svn}"
if assess "$svn"; then
exit 0
else
exit 1
fi
}
main "$@"
If you remember one thing.
14 through 18, plus any older unsupported branch, and separate directly exposed, shared/multi-tenant, and internal-only app-backed deployments. For this MEDIUM reassessment there is noisgate mitigation SLA — no mitigation SLA — go straight to the 365-day remediation window — but any internet-exposed or weakly segmented PostgreSQL should be pulled into the next normal DB patch cycle, while the rest can ride standard maintenance. Complete upstream or distro remediation by the noisgate remediation SLA of ≤365 days, and use network exposure reduction plus input-size controls as interim risk reducers where patching must wait.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.