{
  "affected": [
    {
      "ranges": [
        {
          "database_specific": {
            "extracted_events": [
              {
                "range": [
                  {
                    "introduced": "0"
                  },
                  {
                    "fixed": "1.1.0"
                  }
                ],
                "source": "AFFECTED_FIELD",
                "strategy": "StringRangeExpression"
              },
              {
                "range": [
                  {
                    "fixed": "b5b929305de7a22cd6ed7de8ae1be2ac90ca0868"
                  }
                ],
                "source": "REFERENCES_COMMIT"
              },
              {
                "original_tag": "v1.1.0",
                "range": [
                  {
                    "fixed": "25c2aaed03398584ceea0dd71f7f67631c3dff4e"
                  }
                ],
                "source": "REFERENCES_TAG"
              }
            ]
          },
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "25c2aaed03398584ceea0dd71f7f67631c3dff4e"
            },
            {
              "fixed": "b5b929305de7a22cd6ed7de8ae1be2ac90ca0868"
            }
          ],
          "repo": "https://github.com/pgedge/pgedge-postgres-mcp",
          "type": "GIT"
        }
      ]
    }
  ],
  "aliases": [
    "GHSA-r5pp-jx86-r6r9"
  ],
  "database_specific": {
    "cna_assigner": "GitHub_M",
    "cwe_ids": [
      "CWE-89"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/126xxx/CVE-2026-126197.json"
  },
  "details": "pgEdge Postgres MCP Server enables SQL queries against PostgreSQL databases through Model Context Protocol compatible clients. Prior to 1.1.0, custom pl-do tools interpolated JSON arguments into a PostgreSQL DO block delimited by fixed dollar-quote tags. An argument containing $mcp_custom_tool$ could terminate the block and inject arbitrary SQL statements, while $mcp_args$ could inject procedural code into a plpgsql block. Because the statement used the simple query protocol, injected text could include additional statements and transaction control, bypassing read_only and accessing data or modifying resources available to the connecting role. The issue requires at least one pl-do custom tool; sql and pl-func tools pass arguments as bind parameters and are not affected by this injection mechanism. This issue is fixed in 1.1.0.",
  "id": "CVE-2026-126197",
  "modified": "2026-11-14T02:30:20.811358209Z",
  "published": "2026-11-12T17:29:35.883Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/pgEdge/pgedge-postgres-mcp/releases/tag/v1.1.0"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/126xxx/CVE-2026-126197.json"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/pgEdge/pgedge-postgres-mcp/security/advisories/GHSA-r5pp-jx86-r6r9"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-126197"
    },
    {
      "type": "FIX",
      "url": "https://github.com/pgEdge/pgedge-postgres-mcp/commit/b5b929305de7a22cd6ed7de8ae1be2ac90ca0868"
    },
    {
      "type": "FIX",
      "url": "https://github.com/pgEdge/pgedge-postgres-mcp/pull/196"
    }
  ],
  "schema_version": "1.9.2",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ],
  "summary": "pgEdge Postgres MCP Server SQL injection through custom pl-do tool parameters"
}