Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as SCIM PATCH-capable actor
-
DeliveryCraft PATCH with inherited-property path (toString.x)
-
Exploitnavigate/assign traverse into shared built-in
-
ExecutionAttacker property added to process-global function
-
ImpactDownstream logic reads polluted inherited property
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V4 - API and Web Service Object attribute protection
|
| Exploitation Conditions | Requires an actor able to submit SCIM PATCH operations to an application that uses scim-patch prior to 0.9.2; the attacker supplies a PATCH 'op' whose path (e.g. 'toString.scimPatchPolluted', 'valueOf.x', or a nested/array-search variant like 'emails[primary eq true].toString.x') or a dotted value key begins with an inherited built-in property. This is authenticated (PR:L) - not exploitable by a fully anonymous attacker unless the SCIM endpoint accepts unauthenticated PATCH input. No special non-default configuration or user interaction is needed (AC:L, UI:N), but meaningful real-world impact additionally requires that the application later reads the polluted inherited-method property in a security-relevant code path; absent that, the pollution is largely inert. |
| Impact | This is a genuine-but-modest issue, and the signals are internally consistent rather than conflicting. The vendor CVSS of 4.3 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N) matches the described mechanism: scim-patch's navigate() reads inherited properties and assign() uses prototype-chain 'in' membership checks, so an actor who can submit SCIM PATCH operations can steer a path or dotted value key through an inherited built-in (e.g. toString) and add attacker-controlled properties, mutating shared process-global function objects (CWE-915 prototype pollution). Impact is integrity-only and limited (I:L, C:N, A:N) because the pollution lands on built-in method objects and only affects application logic that later reads inherited-method properties - it is not a direct RCE, DoS, or data-exfiltration primitive on its own. No EPSS score, KEV listing, or SSVC decision was supplied, and there is no weaponized public exploit - only the maintainer's own regression tests in the fix PR demonstrate the write. PR:L means exploitation requires the ability to send PATCH operations (an authenticated/provisioning-capable actor), which meaningfully limits blast radius. Bottom line: patch it during normal maintenance cadence, but this is a low-to-moderate real-world priority, not an emergency - its severity depends heavily on whether the consuming application reads polluted inherited properties in a security-sensitive path. |
| Exploit ScenarioDerived | An attacker with the ability to send SCIM PATCH requests (e.g. a provisioning client or a tenant in a multi-tenant identity integration) submits an operation whose path or dotted value key begins with an inherited property such as 'toString.scimPatchPolluted', causing scim-patch to traverse into the shared Object.prototype.toString function and attach an attacker-controlled property that persists process-wide. No public exploit code exists; only the vendor's fix-PR regression tests demonstrate the write, and exploitation complexity is low (AC:L) but requires PATCH-submission privileges (PR:L). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
Prototype pollution in the scim-patch SCIM PATCH library (all versions before 0.9.2) lets an authenticated caller who can submit SCIM PATCH operations - remote reachable, no user interaction, consistent with CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N - write attacker-controlled properties onto shared built-in function objects such as Object.prototype.toString by supplying a path or dotted value key that begins with an inherited property name. Impact is modest and integrity-only (CVSS 4.3): the mutation is process-global and may influence application logic that reads inherited-method properties, but meaningful harm requires the consuming application to later consult the polluted property in a security-relevant code path; otherwise the write is largely inert. No public exploit identified at time of analysis, although the upstream fix PR and its regression tests publicly document the exact triggering path patterns, and this issue is not confirmed actively exploited (CISA KEV).
RemediationAI
Vendor-released patch: upgrade scim-patch to version 0.9.2 (release tag https://github.com/thomaspoignant/scim-patch/releases/tag/v0.9.2), which corresponds to the fix merged via PR https://github.com/thomaspoignant/scim-patch/pull/1127 and commit c86474f7a9b16191d939f59ba94eca6c6e63044b; advisory details are at https://github.com/thomaspoignant/scim-patch/security/advisories/GHSA-2mhw-wcx5-v3xj. If the upgrade cannot be applied immediately, add an application-boundary validation layer that rejects SCIM PATCH paths (and dotted keys inside path-less patch values) whose first segment resolves to an inherited member - toString, valueOf, hasOwnProperty, isPrototypeOf, constructor, __proto__, prototype and similar - since such names are not legitimate own attributes in most schemas; the trade-off is that tenants using custom schema attributes with those names will see legitimate patches rejected. Do not rely solely on Object.freeze(Object.prototype) or --disable-proto as a compensating control: the objects actually mutated here are the built-in function objects themselves (Object.prototype.toString, valueOf, hasOwnProperty), which are not frozen by freezing Object.prototype. As a containment measure with the trade-off of added isolation complexity and state loss between requests, run the patch-processing code in a short-lived worker or separate process so any global mutation is discarded at the end of the request. Finally, in application code that consumes the patched object, read configuration and authorization flags with own-property checks (Object.hasOwn) rather than inherited-property lookups, so polluted inherited-method properties cannot influence security decisions.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
scim-patch is a Node.js/TypeScript library that applies SCIM 2.0 PATCH operations (RFC 7644 style path/value semantics) to resource objects. The vulnerability is classed as CWE-915 (Improperly Controlled Modification of Dynamically-Determined Object Attributes), realized as classic JavaScript prototype pollution. In src/scimPatch.ts, navigate() resolved path segments with a plain bracket lookup (schema[subPath]) that also reads inherited properties, and assign() guarded writes with the in operator, which walks the prototype chain. Because attacker-controlled PATCH paths (for example toString.scimPatchPolluted, valueOf.x, or nested and array-search variants such as emails[primary eq true].toString.x) and dotted keys inside a no-path value object ({"toString.noPathPolluted": "polluted"}) were not restricted to own properties, an inherited name like toString, valueOf, or hasOwnProperty resolved to the shared built-in function object on Object.prototype, and the subsequent assignment appended attacker-controlled properties to that globally shared object rather than to the resource. The upstream fix replaces both patterns with Object.prototype.hasOwnProperty.call() checks, preserving the original || semantics so a falsy intermediate attribute (e.g. a null sub-attribute, issue #186 regression) is still replaced with a container. The CPE record cpe:2.3:a:thomaspoignant:scim-patch:*:*:*:*:*:*:*:* carries no version bound, so it should be read as 'all releases' with the effective cutoff being 0.9.2.
Know when Scim Patch gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
Network-reachable SCIM input with low complexity but requires PATCH-submission privileges (PR:L); prototype pollution yields limited integrity impact only, no confidentiality or availability.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
scim-patch is a library for applying SCIM patch operations. Prior to 0.9.2, navigate() reads inherited properties and assign() uses prototype-chain membership checks while resolving attacker-controlled SCIM PATCH paths. A path or one of the dotted value keys beginning with an inherited property such as toString can therefore traverse into a shared built-in function object and add attacker-controlled properties, causing process-global mutation that may affect application logic reading inherited-method properties. This issue is fixed in version 0.9.2.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
EUVD-2026-85327
GHSA-2mhw-wcx5-v3xj
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB