Skip to main content

scim-patch EUVDEUVD-2026-85327

| CVE-2026-61834 MEDIUM
Improperly Controlled Modification of Dynamically-Determined Object Attributes (CWE-915)
2026-09-23 GitHub_M GHSA-2mhw-wcx5-v3xj
4.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as SCIM PATCH-capable actor
  2. Delivery
    Craft PATCH with inherited-property path (toString.x)
  3. Exploit
    navigate/assign traverse into shared built-in
  4. Execution
    Attacker property added to process-global function
  5. Impact
    Downstream 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).

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

scim-patch < 0.9.2

Affected Packages

npm scim-patch fix: 0.9.2

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

Vendor (GitHub_M) PRIMARY 4.3 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 4.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Sep 23, 2026 - 15:02 EUVD

DescriptionCVE.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

EPSS Score
0.3%
Top 82% exploitable
Prevalence
Low
niche npm SCIM-provisioning library, limited to apps implementing SCIM
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

42
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +22
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy