CVE-2026-48170:
JavaScript 취약성 분석 및 완화
개요
CVE-2026-48170 is a prototype pollution vulnerability in the scim-patch npm library (CWE-1321) that allows authenticated network attackers to inject arbitrary properties into Object.prototype process-wide by sending a crafted SCIM PATCH request. All versions up to and including 0.9.0 are affected; the patched version is 0.9.1/0.9.2. The vulnerability was discovered by Lee Wang (Notion) and reported by David Wu (Notion), first published May 21, 2026, and added to the GitHub Advisory Database on June 22, 2026. It carries a CVSS v3.1 base score of 9.1 (Critical) (GitHub Advisory, scim-patch Advisory).
기술적 세부 사항
The root cause is in src/scimPatch.ts within the addOrReplaceObjectAttribute function (lines 415–427), which iterates user-supplied patch.value keys via Object.entries and passes them to resolvePaths, which splits on . without sanitizing dangerous segments. The resulting key path is then walked by the assign function with no filtering, so a key like __proto__ causes obj = obj["__proto__"] to resolve to Object.prototype, and the final write lands on Object.prototype itself. The same attack shape works with constructor.prototype keys. Exploitation requires only the ability to send a SCIM PATCH request body — typically available to any provisioned Identity Provider (IdP) client — making the attack vector network-accessible with low privilege requirements and no user interaction (GitHub Advisory, scim-patch Advisory, Fix Commit).
영향
Successful exploitation mutates Object.prototype process-wide for the lifetime of the Node.js process, affecting every plain object in the runtime — not just SCIM-related objects. Realistic consequences include privilege escalation (e.g., setting Object.prototype.isAdmin = true causes any middleware checking actor.isAdmin on a plain object to grant admin access), logic bypass, and denial of service if code branches on properties expected to be absent. The pollution persists until the Node process restarts, meaning every subsequent request handled by that container is affected, significantly expanding the blast radius beyond the initial SCIM endpoint (GitHub Advisory, scim-patch Advisory).
악용 가능성
No public proof-of-concept exploit code has been released beyond the test case included in the advisory itself, and there is no evidence of in-the-wild exploitation at this time (GitHub Advisory). The CVE status is currently "Reserved" and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. The attack requires only low privileges (a provisioned IdP credential), no user interaction, and low attack complexity, making it straightforward to exploit once an attacker has access to a SCIM endpoint. Detection coverage is available via Qualys (detection ID 5014531) and Tenable cloud security plugins.
착취 단계
- Identify target: Locate a service exposing a SCIM PATCH endpoint (e.g.,
PATCH /Users/:id) that uses thescim-patchnpm library at version ≤ 0.9.0 and accepts requests from an external IdP or provisioning client. - Obtain credentials: Acquire valid IdP or provisioning client credentials (low-privilege authenticated access is sufficient for most SCIM integrations).
- Craft malicious PATCH request: Construct a SCIM PATCH request body with a
valueobject containing a prototype-polluting key, for example:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{
"op": "add",
"path": "name",
"value": { "__proto__.isAdmin": true }
}]
}- Send the request: Submit the crafted PATCH request to the target endpoint. The
scimPatch()function processes the value keys without sanitization, causingObject.prototype.isAdminto be set totrueprocess-wide. - Exploit the polluted prototype: Make subsequent requests to the application. Any middleware or authorization code that checks
req.user.isAdminor similar boolean flags on plain objects will now evaluate totruefor all users, granting unauthorized privilege escalation. - Maintain persistence: The pollution persists until the Node.js process restarts; no further action is needed to maintain the elevated state for subsequent requests (GitHub Advisory, scim-patch Advisory).
타협의 징후
- Network: Inbound SCIM PATCH requests to
/Users/:idor similar endpoints withvalueobjects containing keys matching patterns like__proto__.*,constructor.prototype.*, orprototype.*in the JSON body. - Logs: Application or web server access logs showing PATCH requests to SCIM endpoints with unusually structured JSON payloads; Node.js error logs showing unexpected
InvalidScimPatchOpexceptions (post-patch) or, on unpatched versions, no errors despite malformed keys. - Process Behavior: Unexpected privilege escalation for authenticated users (e.g., non-admin users gaining admin access) without corresponding changes in the identity store; unusual authorization decisions in application logs following a SCIM PATCH operation.
- Runtime State: If runtime inspection is possible,
Object.prototypehaving unexpected enumerable properties (e.g.,isAdmin,polluted, or other injected keys) detectable viaObject.getOwnPropertyNames(Object.prototype)in a Node.js REPL or debug session (GitHub Advisory).
완화 및 해결 방법
Upgrade scim-patch to version 0.9.1 or 0.9.2 (patched versions), which rejects keys containing __proto__, constructor, or prototype in resolvePaths — the single chokepoint shared by all vulnerable code paths — throwing an InvalidScimPatchOp error (Fix Commit). For services that cannot upgrade immediately, two workarounds are available: (1) validate and sanitize SCIM PATCH request payloads at the API gateway or middleware layer to reject any keys containing __proto__, constructor, or prototype before they reach scimPatch(); or (2) call Object.freeze(Object.prototype) (and Array.prototype, Function.prototype) at Node.js process startup, or launch Node with the --frozen-intrinsics flag, which converts prototype pollution writes into silent no-ops (sloppy mode) or TypeErrors (strict mode) (GitHub Advisory, scim-patch Advisory).
커뮤니티 반응
The vulnerability was discovered internally at Notion by Lee Wang and reported by David Wu, with the advisory report authored with the assistance of Claude (Anthropic's AI). The fix was co-authored with Gemini Code Assist. No significant broader media coverage or notable public researcher commentary beyond the advisory itself has been identified at this time (GitHub Advisory, scim-patch Advisory).
추가 자료
근원: 이 보고서는 AI를 사용하여 생성되었습니다.
관련 JavaScript 취약점:
무료 취약성 평가
클라우드 보안 태세를 벤치마킹합니다
9개의 보안 도메인에서 클라우드 보안 관행을 평가하여 위험 수준을 벤치마킹하고 방어의 허점을 식별합니다.
추가 Wiz 리소스
맞춤형 데모 받기
맞춤형 데모 신청하기
"내가 본 최고의 사용자 경험은 클라우드 워크로드에 대한 완전한 가시성을 제공합니다."
"Wiz는 클라우드 환경에서 무슨 일이 일어나고 있는지 볼 수 있는 단일 창을 제공합니다."
"우리는 Wiz가 무언가를 중요한 것으로 식별하면 실제로 중요하다는 것을 알고 있습니다."