GHSA-XX6W-JXG9-2WH8

Vulnerability from github – Published: 2026-02-05 20:51 – Updated: 2026-02-07 00:31
VLAI?
Summary
@payloadcms/drizzle has SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters
Details

Impact

When querying JSON or richText fields, user input was directly embedded into SQL without escaping, enabling blind SQL Injection attacks. An unauthenticated attacker could extract sensitive data (emails, password reset tokens) and achieve full account takeover without password cracking.

Users are affected if ALL of these are true:

  1. Payload version < v3.73.0
  2. Using a Drizzle-based database adapter (@payloadcms/drizzle as dependency):
  3. @payloadcms/db-postgres
  4. @payloadcms/db-vercel-postgres
  5. @payloadcms/db-sqlite
  6. @payloadcms/db-d1-sqlite
  7. At least one accessible collection that has a type: 'json' or type: 'richText' field where access.read returns anything other than false (true or Where constraint)

Users are NOT affected if:

  • Using @payloadcms/db-mongodb
  • No JSON or richText fields exist in any collection
  • All JSON/richText fields have access: { read: () => false }

Patches

Upgrade to Payload v3.73.0 or later.

Workarounds

If a project cannot upgrade immediately, add access: { read: () => false } to all JSON and richText fields as a temporary mitigation.

Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "npm",
        "name": "@payloadcms/drizzle"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "3.73.0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2026-25544"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-89"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-02-05T20:51:38Z",
    "nvd_published_at": "2026-02-06T22:16:11Z",
    "severity": "CRITICAL"
  },
  "details": "### Impact\n\nWhen querying JSON or richText fields, user input was directly embedded into SQL without escaping, enabling blind SQL Injection attacks. An unauthenticated attacker could extract sensitive data (emails, password reset tokens) and achieve full account takeover without password cracking.\n\n**Users are affected if ALL of these are true:**\n\n1. Payload version \u003c v3.73.0\n2. Using a Drizzle-based database adapter (`@payloadcms/drizzle` as dependency):\n   - `@payloadcms/db-postgres`\n   - `@payloadcms/db-vercel-postgres`\n   - `@payloadcms/db-sqlite`\n   - `@payloadcms/db-d1-sqlite`\n3. At least one accessible collection that has a `type: \u0027json\u0027` or `type: \u0027richText\u0027` field where `access.read` returns anything other than `false` (`true` or `Where` constraint)\n\n**Users are NOT affected if:**\n\n- Using `@payloadcms/db-mongodb`\n- No JSON or richText fields exist in any collection\n- All JSON/richText fields have `access: { read: () =\u003e false }`\n\n### Patches\n\nUpgrade to Payload **v3.73.0** or later.\n\n### Workarounds\n\nIf a project cannot upgrade immediately, add `access: { read: () =\u003e false }` to all JSON and richText fields as a temporary mitigation.",
  "id": "GHSA-xx6w-jxg9-2wh8",
  "modified": "2026-02-07T00:31:51Z",
  "published": "2026-02-05T20:51:38Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/payloadcms/payload/security/advisories/GHSA-xx6w-jxg9-2wh8"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-25544"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/payloadcms/payload"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ],
  "summary": "@payloadcms/drizzle has SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.


Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…