{"id":"CVE-2026-25544","aliases":["EUVD-2026-5570","GHSA-xx6w-jxg9-2wh8"],"status":"published","title":"Payload has an SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters","description":"Payload is a free and open source headless content management system. Prior to 3.73.0, 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. This vulnerability is fixed in 3.73.0.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.00825,"percentile":0.57721,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-89"],"published":"2026-02-05T20:51:38Z","modified":"2026-10-28T02:31:13Z","exploits":[{"source":"exploitdb","id":"EDB-52671","title":"Payload CMS 3.72.0 - Blind SQL Injection","type":"webapps","platform":"multiple","date":"2026-09-01","url":"https://www.exploit-db.com/exploits/52671"}],"fixes":[{"ecosystem":"npm","package":"@payloadcms/drizzle","fixed_in":["3.73.0"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"@payloadcms/drizzle","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.73.0"}]}]},{"source":"osv","ecosystem":"npm","package":"@payloadcms/drizzle","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"3.73.0"}]}]}],"products":[{"vendor":"payloadcms","product":"payload"}],"references":[{"url":"https://github.com/payloadcms/payload/security/advisories/GHSA-xx6w-jxg9-2wh8","tags":["x_refsource_CONFIRM","Vendor Advisory","advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-25544","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-xx6w-jxg9-2wh8"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/25xxx/CVE-2026-25544.json","tags":["advisory"]},{"url":"https://github.com/payloadcms/payload","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-25544","title":"Payload has an SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters","description":"Payload is a free and open source headless content management system. Prior to 3.73.0, 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. This vulnerability is fixed in 3.73.0.","status":"published","published":"2026-02-06T21:07:01.122Z","modified":"2026-02-09T15:27:26.616Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T13:41:30.911526Z"}],"euvd":[{"id":"EUVD-2026-5570","description":"Payload is a free and open source headless content management system. Prior to 3.73.0, 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. This vulnerability is fixed in 3.73.0.","status":"published","published":"2026-02-06T21:07:01Z","modified":"2026-02-09T15:27:26Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T19:48:42.465921Z"}],"ghsa":[{"id":"GHSA-xx6w-jxg9-2wh8","title":"@payloadcms/drizzle has SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters","description":"### 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: 'json'` or `type: 'richText'` 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.","status":"published","published":"2026-02-05T20:51:38Z","modified":"2026-02-07T00:31:53Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T14:39:23.728882Z"}],"nvd":[{"id":"CVE-2026-25544","description":"Payload is a free and open source headless content management system. Prior to 3.73.0, 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. This vulnerability is fixed in 3.73.0.","status":"published","published":"2026-02-06T22:16:11.597Z","modified":"2026-06-17T10:24:49.77Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"secondary"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T14:12:05.52517Z"}],"osv":[{"id":"CVE-2026-25544","title":"Payload has an SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters","description":"Payload is a free and open source headless content management system. Prior to 3.73.0, 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. This vulnerability is fixed in 3.73.0.","status":"published","published":"2026-02-06T21:07:01.122Z","modified":"2026-10-28T02:31:13.834911272Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T15:44:59.438965Z"},{"id":"GHSA-xx6w-jxg9-2wh8","title":"@payloadcms/drizzle has SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters","description":"### 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: 'json'` or `type: 'richText'` 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.","status":"published","published":"2026-02-05T20:51:38Z","modified":"2026-02-07T00:53:39.718599Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T15:47:00.604718Z"}]}}
