CVE-2026-113666
## Summary `@apostrophecms/db-connect` ships an in-memory MongoDB emulation used by its SQLite, PostgreSQL, and multipostgres adapters. Its `unsetNestedField` helper walks an attacker-controlled dotted field path with no segment validation and calls `delete` on the resolved property. A low-privileged authenticated user (any role holding `view-draft`, which every editor and contributor has; reduced to any logged-in user when `guestApiAccess` is enabled) can send a piece-type REST GET request whose `project` query builder contains an exclusion key such as `constructor.prototype.hasOwnProperty`. On a SQLite or PostgreSQL adapter this key reaches `unsetNestedField`, which resolves `Object.prototype` and deletes a shared runtime method. Because that method is shared across the whole Node process, the deletion breaks request handling for every tenant and user until the process is restarted, giving a single request a persistent denial of service. ## Root Cause The projection query builder laundens only projection values, never projection keys, so an arbitrary dotted key survives to the database layer. On the SQLite and PostgreSQL adapters an exclusion projection is applied in JavaScript by `applyProjection`, which for each excluded field calls `unsetNestedField(result, field)`. `unsetNestedField` splits the field on `.` and walks the resulting segments with no guard: unlike its sibling `setNestedField`, it does not even block a literal `__proto__`, and neither helper blocks `constructor` or `prototype`. Because the working object is a plain object produced by `JSON.parse(JSON.stringify(doc))`, its `constructor` resolves to the global `Object`, so a path of `constructor.prototype.<member>` reaches the shared `Object.prototype` and deletes a core, configurable method. The violated invariant is that untrusted input must never be able to traverse into and mutate shared prototype objects. ```text Affected functions (repository-relative paths): - unsetNestedField packages/d
Properties
- Summary
- ApostropheCMS: Authenticated projection-exclusion prototype-member deletion in @apostrophecms/db-connect causes process-wide denial of service
- Severity
- high
- Nvd fetched at
- 2026-10-20T21:14:08.448323+00:00
- Cvss score
- 7.1
- Cvss severity
- HIGH
- Retrieved at
- 2026-10-21T01:23:59+00:00
- Ghsa published
- 2026-10-20T18:03:50Z
- Source url
- https://github.com/advisories/GHSA-j5rq-xfvr-p969
- Ghsa updated
- 2026-10-20T18:03:51Z
- Ghsa id
- GHSA-j5rq-xfvr-p969
- Last source
- GitHub Advisory Database
- Score
- 7.1
- Cvss version
- 3.1
- Cve id
- CVE-2026-113666
- Cvss vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H
- 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:H
- Published at
- 2026-10-20T18:17:20.127
- Last modified
- 2026-10-20T19:53:10.247
Related Entities (6)
AFFECTS (2)
HAS_WEAKNESS (2)
VULNERABLE_TO (2)
Explore deeper with Ninja Signal's threat intelligence graph