Skip to main content

CVE-2026-125321pgEdge pgedge-postgres-mcp allocation without limits

Low priorityMedium6.5EPSS not scored yet

CVE-2026-125321 is a allocation without limits in pgEdge pgedge-postgres-mcp, rated medium (6.5 on CVSS 3.1).

Why this priority: Medium severity, with no exploitation signal.

Published · Updated · NVD status: Received

What it is

Resources are allocated without a cap, so a caller can exhaust them. A security check relies on a value the attacker can set.

How it is reached

An attacker can exploit it over the network, without an account, and nobody has to click anything.

What an attacker gains

The direct impact is limited: partial access to data or a partial outage. In practice, this kind of flaw lets an attacker exhaust CPU, memory or connections until the service stops answering.

Is it being exploited?

There is no public report of exploitation yet. It can be exploited automatically, at scale.

What to do

  1. Upgrade pgEdge pgedge-postgres-mcp to 1.1.0 or later.
  2. Until it is patched, keep it off the internet or behind a VPN, allowlist or authenticating proxy.

Description from NVD

pgEdge Postgres MCP Server enables SQL queries against PostgreSQL databases through Model Context Protocol compatible clients. Prior to 1.1.0, deployments exposing the nondefault HTTP transport with authentication enabled used the leftmost caller-supplied X-Forwarded-For value as the client address for login rate limiting. ExtractIPAddress in internal/auth/middleware.go supplied that value to IsAllowed and RecordFailedAttempt in internal/auth/rate_limiter.go, allowing an unauthenticated caller to rotate addresses to evade throttling or assert another user's address to consume that user's limiter bucket. The published nginx configuration appended rather than replaced X-Forwarded-For, making the issue reachable without an operator misconfiguration. Username-keyed account lockout did not use the client address, but shipped defaults disabled that separate control through MaxFailedAttemptsBeforeLockout: 0. This issue is fixed in version 1.1.0.

What this means for your architecture.

A CVE names a product. Whether it matters depends on where that product sits in your systems: what reaches it, which trust boundary it guards and what it can reach once compromised. Veriom maps your components, their relationships and your trust boundaries from your code, cloud and delivery evidence, so you can see where a component like this sits. The radar itself does not look at your systems.

Components it touches

  • Public entry points and shared services that must stay up. The flaw sits between untrusted traffic and shared capacity.
  • Permission checks in APIs and admin surfaces. The flaw sits between one role or tenant and another.
  • Multi-tenant services. The flaw sits between one role or tenant and another.

Trust boundaries in play

  • Internet-facing entry points. No account is needed. Any instance reachable from outside your perimeter, through a load balancer, gateway, VPN or exposed admin port, is in scope.
  • Between untrusted traffic and shared capacity. An attacker who crosses it can exhaust CPU, memory or connections until the service stops answering.
  • Between one role or tenant and another. An attacker who crosses it can reach data or actions their role should not allow.

Questions to answer about your own systems

  • Where does pgEdge pgedge-postgres-mcp run in your systems, and at which version?
  • Which of those instances can be reached from the internet or partner networks?
  • What can it reach once compromised: which data stores, secrets and services?

Sources

  • CVE records and CVSS scores from the NVD CVE API. This product uses the NVD API but is not endorsed or certified by the NVD.
  • Exploitation status from CISA’s Known Exploited Vulnerabilities catalog.
  • Exploit likelihood from FIRST’s Exploit Prediction Scoring System (EPSS), refreshed daily.
  • Explanations are written by Veriom from fixed templates over each record’s data, not by a person reviewing each CVE. Descriptions are quoted from the records as published.