CVE-2026-105856 is a High severity SQL injection in Payload's SQLite and Postgres database adapters. An attacker with read and create or update access to a collection with a json field, or a blocks field with blocksAsJSON, can inject SQL through a crafted field path. Upgrade SQLite packages to 3.90.0 and Postgres packages to 3.73.0.
What's affected
- Packages: @payloadcms/db-sqlite and @payloadcms/db-d1-sqlite, from 3.0.0 before 3.90.0, and canary versions before 4.0.0-canary.34. Fixed in 3.90.0 and 4.0.0-canary.34.
- Packages: @payloadcms/db-postgres and @payloadcms/db-vercel-postgres, from 3.0.0 before 3.73.0. Fixed in 3.73.0.
- Condition: a readable collection with a json field, or a blocks field with blocksAsJSON enabled, and an attacker with read plus create or update access to it.
- Not affected: collections without those fields. The advisory says richText fields are not affected.
- Workarounds: the advisory lists none.
The record scores this 8.3 High and lists CWE-89. The project advisory rates it High with no CWE assigned. The record and the advisory agree on the fixed versions that matter: 3.90.0 for SQLite and 3.73.0 for Postgres.
How to check if you're exposed
Payload is an npm package, so read the installed version in each project and environment.
npm ls payload
pnpm why payload
grep -n "payload" package.json
Check every deployment target too: production, staging, preview builds and any container image built from an older commit. Then look at the packages next to Payload, because this release series also touches plugins and database adapters:
npm ls @payloadcms/plugin-ecommerce @payloadcms/plugin-multi-tenant
npm ls @payloadcms/db-postgres @payloadcms/db-sqlite @payloadcms/db-vercel-postgres @payloadcms/db-d1-sqlite
Then search your collections for the field types that matter.
grep -rn "type: 'json'" src/
grep -rn "blocksAsJSON" src/
No match means the advisory's conditions are not met for those collections. Also note which database adapter you use. The Postgres adapters were fixed earlier, in 3.73.0, so a Postgres project on any 3.73.0 or later release is covered, while SQLite projects need 3.90.0.
Safeguard's free in-browser dependency scan at gold.safeguard.sh/scan reads a manifest or lockfile and shows which packages carry known CVEs, including this one. Nothing is installed and nothing leaves your browser session beyond the scan itself.
What to do now
- Upgrade all Payload packages together to 3.90.0 or later on the 3.x line, or to 4.0.0-canary.34 or later on the canary line, and keep versions in step across packages.
- Upgrade the database adapter packages, not only the core package: SQLite adapters to 3.90.0 or later, Postgres adapters to 3.73.0 or later.
- List collections with json or blocksAsJSON fields and check who holds read plus create or update access to them.
- Use a database account with only the rights the application needs.
- Review database logs for unusual queries or errors from the application account.
- Read the v3.90.0 release notes for behavior and API changes that may need code updates, and run your test suite before deploying.
- Redeploy every environment, including preview and staging, and rebuild container images.
- Re-scan your lockfile after the change to confirm no older copy of the package remains.
Why it matters
The record lists CWE-89, SQL injection. The advisory says the injection targets a specific field path shape and operators in the SQLite and Postgres adapters, and the patched versions sanitise the query input. That is a classic failure: part of a query is built from caller input without proper escaping.
The conditions narrow the exposure but do not remove it. The caller needs real access to the collection, so this is an attack by a signed in user, not an anonymous visitor. For many apps that still covers every registered user, and a self sign up flow turns it into an open door.
The impact of SQL injection depends on the database account's rights, which is why least privilege matters. The record does not list this CVE as exploited in the wild. Payload's release notes for v3.90.0 describe a set of critical security fixes and recommend upgrading even if none of the listed items affect you. They also say exploit details and severity are intentionally left out of the notes, so read each advisory for the conditions.
Quick check
Which fixed version applies to Postgres?
3.73.0 for @payloadcms/db-postgres and @payloadcms/db-vercel-postgres, per the advisory.
Are richText fields affected?
No. The advisory says richText fields are not affected, and collections without json or blocksAsJSON fields are not affected either.
Sources
Last reviewed: 18 October 2026.