MEDIUMCVSS v3.1 5.4Vulnerability

CVE-2026-113662

## Summary `@apostrophecms/import-export`'s update-by-key feature lets an imported document carry a `<field>:key` property (for example `slug:key`) whose value is used to find an existing document to update instead of inserting a new one. `getUpdateKey()`/`insertOrUpdateDocWithKey()` (`lib/methods/import.js`) use that value directly as a MongoDB query value with no laundering: ```js const matchingDraftPromise = manager.findForEditing( req.clone({ mode: 'draft' }), { aposMode: 'draft', [updateField]: doc[updateKey] }).toObject(); ``` Archive documents are parsed with EJSON (see `lib/formats/gzip.js`), which revives objects such as `{ $ne: null }` as live values, the same untrusted data source and revival mechanism already fixed once in this module for `findSingletonAposDocId`/`findParkedAposDocId` in GHSA-79qf-vqgc-7xx3. That fix did not touch `insertOrUpdateDocWithKey`, so the identical class of bug survives here: a crafted `"slug:key": { "$ne": null }` entry in an archive's `aposDocs.json` makes the import match (and then update) an existing document the archive's author never actually identified, instead of failing to find a match. ## Impact Reaching this requires only an authenticated session with import access to the target type (the built-in contributor role holds this, matching the precondition of GHSA-79qf-vqgc-7xx3), and no admin interaction. Because the match uses a MongoDB operator instead of an exact value, it is not limited to a document the importer already knows the identifying field of: any existing document the importer has generic edit rights on and that satisfies the operator (which `{ $ne: null }` trivially does for any doc with a non-null value in that field) is a candidate, and Apostrophe's `findForEditing` permission filter, not the update-key logic, is the only thing narrowing which document actually gets matched and overwritten. Live-verified: a contributor-role request importing a document containing `"slug:key": { "$ne":

Properties

Summary
ApostropheCMS import-export: NoSQL injection via update-key value lets a crafted import match and overwrite an unidentified document
Severity
medium
Nvd fetched at
2026-10-20T21:14:08.448323+00:00
Cvss score
5.4
Cvss severity
MEDIUM
Retrieved at
2026-10-21T01:23:59+00:00
Ghsa published
2026-10-20T18:19:19Z
Source url
https://github.com/advisories/GHSA-jqw5-w6h3-44g6
Ghsa updated
2026-10-20T18:19:20Z
Ghsa id
GHSA-jqw5-w6h3-44g6
Last source
GitHub Advisory Database
Score
5.4
Cvss version
3.1
Cve id
CVE-2026-113662
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
First seen by Signal
2026-10-20T21:15:35+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Published at
2026-10-20T18:17:19.693
Last modified
2026-10-20T19:53:10.247

Related Entities (4)

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-113662 (CVSS v3.1 5.4) — Ninja Signal Threat Intelligence | Ninja Signal