{"description":"Trending threats, MITRE ATT\u0026CK coverage, and detection metadata. Fed continuously.","feed_url":"https://feed.craftedsignal.io/vendors/scim-patch/feed.json","home_page_url":"https://feed.craftedsignal.io/","items":[{"_cs_actors":[],"_cs_cpes":[],"_cs_cves":[],"_cs_exploited":false,"_cs_has_poc":false,"_cs_poc_references":[],"_cs_products":["scim-patch \u003c= 0.9.0"],"_cs_severities":["critical"],"_cs_tags":["prototype-pollution","cve","node.js","scim","critical-vulnerability"],"_cs_type":"advisory","_cs_vendors":["scim-patch"],"content_html":"\u003cp\u003eThe \u003ccode\u003escim-patch\u003c/code\u003e Node.js library, versions up to and including 0.9.0, is affected by a critical prototype pollution vulnerability, CVE-2026-48170. This flaw allows an unauthenticated or low-privileged attacker to achieve process-wide impact by sending a specially crafted SCIM PATCH request. The delivery mechanism involves a normal SCIM \u003ccode\u003ePATCH /Users/:id\u003c/code\u003e request body where the \u003ccode\u003evalue\u003c/code\u003e object contains a key structured as \u003ccode\u003e__proto__.someProp\u003c/code\u003e. When the \u003ccode\u003escimPatch()\u003c/code\u003e function processes this input, it inadvertently modifies \u003ccode\u003eObject.prototype\u003c/code\u003e in the Node.js runtime. This mutation affects every plain object within the running process, creating a persistent state until the process restarts. For defenders, this is critical because it can lead to severe consequences such as privilege escalation if authentication logic relies on checking properties of otherwise clean objects (e.g., \u003ccode\u003ereq.user.isAdmin\u003c/code\u003e), or denial of service through logic bypasses, impacting the availability and integrity of services using \u003ccode\u003escim-patch\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"attack-chain\"\u003eAttack Chain\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eAttacker crafts a malicious SCIM PATCH request targeting a vulnerable endpoint, for example, \u003ccode\u003ePATCH /Users/:id\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe request body contains a JSON array with an \u0026quot;add\u0026quot; or \u0026quot;replace\u0026quot; operation, where the \u003ccode\u003evalue\u003c/code\u003e object includes a key structured as \u003ccode\u003e__proto__.polluted\u003c/code\u003e or \u003ccode\u003e__proto__.isAdmin\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe vulnerable Node.js application, using the \u003ccode\u003escim-patch\u003c/code\u003e library, receives and processes this request via the \u003ccode\u003escimPatch()\u003c/code\u003e function.\u003c/li\u003e\n\u003cli\u003eInside \u003ccode\u003escimPatch()\u003c/code\u003e, the \u003ccode\u003eaddOrReplaceObjectAttribute\u003c/code\u003e function iterates over the user-supplied \u003ccode\u003epatch.value\u003c/code\u003e and feeds the dangerous key (\u003ccode\u003e__proto__.polluted\u003c/code\u003e) to \u003ccode\u003eresolvePaths\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eassign\u003c/code\u003e helper function then walks the \u003ccode\u003ekeyPath\u003c/code\u003e which includes \u003ccode\u003e__proto__\u003c/code\u003e, and \u003ccode\u003eobj\u003c/code\u003e is reassigned to \u003ccode\u003eObject.prototype\u003c/code\u003e when \u003ccode\u003eobj = obj[\u0026quot;__proto__\u0026quot;]\u003c/code\u003e is executed.\u003c/li\u003e\n\u003cli\u003eSubsequently, the \u003ccode\u003evalue\u003c/code\u003e from the malicious patch (e.g., \u003ccode\u003e'yes'\u003c/code\u003e or \u003ccode\u003etrue\u003c/code\u003e) is assigned to \u003ccode\u003eObject.prototype.polluted\u003c/code\u003e or \u003ccode\u003eObject.prototype.isAdmin\u003c/code\u003e, effectively polluting the global \u003ccode\u003eObject.prototype\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThis global prototype modification persists until the Node.js process is restarted, affecting all subsequent operations and new objects within that process.\u003c/li\u003e\n\u003cli\u003eThis leads to impacts such as privilege escalation if downstream code checks for properties like \u003ccode\u003eisAdmin\u003c/code\u003e on affected objects, or denial of service through logic bypasses.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"impact\"\u003eImpact\u003c/h2\u003e\n\u003cp\u003eThe impact of CVE-2026-48170 is process-wide, affecting any Node.js service utilizing the \u003ccode\u003escim-patch\u003c/code\u003e library for SCIM operations. This could include identity management systems, user provisioning services, and enterprise applications that integrate with external Identity Providers (IdPs). If exploited, this prototype pollution can lead to severe consequences such as privilege escalation, enabling attackers to bypass authentication or authorization checks if affected code relies on checking properties of otherwise clean objects (e.g., \u003ccode\u003ereq.user.isAdmin\u003c/code\u003e). It can also cause denial of service through logic bypasses if critical application logic branches on object properties, leading to unpredictable behavior or crashes. The modification to \u003ccode\u003eObject.prototype\u003c/code\u003e persists until the Node.js process is restarted, affecting every request handled by the compromised container after pollution, making detection and recovery challenging.\u003c/p\u003e\n\u003ch2 id=\"recommendation\"\u003eRecommendation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade the \u003ccode\u003enpm/scim-patch\u003c/code\u003e library to a version beyond \u003ccode\u003e0.9.0\u003c/code\u003e (which includes the fix for CVE-2026-48170) immediately.\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003eObject.freeze(Object.prototype)\u003c/code\u003e at the Node.js process startup to mitigate CVE-2026-48170, as described in the brief's \u0026quot;Mitigation\u0026quot; section.\u003c/li\u003e\n\u003cli\u003eUtilize the Node.js \u003ccode\u003e--frozen-intrinsics\u003c/code\u003e flag during process startup to automatically protect built-in objects from prototype pollution, which helps mitigate CVE-2026-48170.\u003c/li\u003e\n\u003c/ul\u003e\n","date_modified":"2026-07-03T11:02:23Z","date_published":"2026-07-03T11:02:23Z","id":"https://feed.craftedsignal.io/briefs/2026-07-scimpatch-prototype-pollution/","summary":"The `scim-patch` Node.js library, versions up to and including 0.9.0, is critically vulnerable to prototype pollution (CVE-2026-48170) when processing SCIM PATCH operations, allowing an attacker to modify `Object.prototype` process-wide through crafted `__proto__` keys in the request body, leading to potential privilege escalation or denial of service.","title":"scimPatch vulnerable to prototype pollution via unfiltered keys in patch","url":"https://feed.craftedsignal.io/briefs/2026-07-scimpatch-prototype-pollution/"}],"language":"en","title":"CraftedSignal Threat Feed - Scim-Patch","version":"https://jsonfeed.org/version/1.1"}