---
id: "CVE-2026-125321"
page: "https://infrastack.ai/live/CVE-2026-125321"
kind: "vulnerability"
aliases: ["CVE-2026-125321"]
title: "pgEdge Postgres MCP Server: spoofed X-Forwarded-For defeats login rate limiting"
severity: "medium"
cvss: 6.5
epss: null
exploited: false
status: "open"
category: "ai-tooling"
products: []
ecosystems: []
tags: ["ai-tooling", "http-transport", "mcp", "nginx", "pgedge", "postgres"]
not_affected_if: ["auth-disabled", "stdio-transport"]
published_at: "2026-11-10T18:17:33+00:00"
first_seen_at: "2026-11-10T18:22:55+00:00"
updated_at: "2026-11-10T18:24:53+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-125321", "first_seen_at": "2026-11-10T18:22:55+00:00"}]
exploit_sources: []
---

# pgEdge Postgres MCP Server: spoofed X-Forwarded-For defeats login rate limiting

Link for people: https://infrastack.ai/live/CVE-2026-125321 (this .md is for agents)

The pgEdge Postgres MCP Server trusted the leftmost X-Forwarded-For header from callers when rate-limiting logins over its HTTP transport. An unauthenticated attacker can rotate or forge that address to bypass login throttling or exhaust another user's login attempts.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed pgEdge Postgres MCP Server version; versions below `1.1.0` are affected.
- Check whether the HTTP transport with authentication is enabled, since that is the nondefault configuration the advisory describes.
- Check the reverse proxy config for whether it appends to X-Forwarded-For instead of replacing it.

## Fix

- pgEdge Postgres MCP Server: upgrade to `1.1.0`.

## Timeline

- 2026-11-10T18:22:55+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-125321

## Documents

- [advisory] Vendor advisory: github.com https://github.com/pgEdge/pgedge-postgres-mcp/security/advisories/GHSA-v347-v3w7-7fq9
- [fix] Patch: github.com https://github.com/pgEdge/pgedge-postgres-mcp/commit/6a19e46a240b9f4661a4a253811948dd75c4077e

## From the sources

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.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
