Skip to main content

stream-json CVE-2026-104183

| EUVDEUVD-2026-91057 MEDIUM
Improperly Controlled Modification of Object Prototype Attributes (Prototype Pollution) (CWE-1321)
2026-10-01 GitHub_M GHSA-mjw6-4jj6-33hc
5.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Deliver crafted JSON with __proto__ key
  2. Delivery
    Assembler assigns via inherited setter
  3. Exploit
    Parsed object prototype replaced
  4. Execution
    App reads attacker-controlled inherited value
  5. Impact
    Authorization bypass or Object.prototype method failure

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V3 - Web Frontend Security Prototype pollution prevention
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that the application (1) feed attacker-influenceable JSON into stream-json's Assembler or FlexAssembler (versions < 3.6.0), and (2) subsequently make authorization, feature, or control-flow decisions by reading object properties through prototype inheritance, OR rely on Object.prototype methods on the parsed object (which a null-prototype payload breaks). The specific trigger is an input key literally named __proto__, which pre-patch is set via plain assignment and invokes the inherited setter. Limiting factors: impact is confined to the individual parsed object (global Object.prototype is not affected); the maintainer's documented/supported use is local, trusted files (dumps, exports, logs), so reaching the parser with hostile input requires a deployment that violates that intended-input contract; no user interaction or authentication to the library itself is needed once malicious JSON reaches it.

Impact

This is a genuine but modest-severity flaw whose real-world risk hinges entirely on a disputed threat model. The provided CVSS 3.1 vector (AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L, 5.1 Medium) is internally consistent with the maintainer's position: AV:L reflects their characterization of the attack vector as local, since documented inputs are owned dumps, exports, and logs rather than internet-facing data. The researcher, however, treats parsing untrusted JSON as part of the project contract - if that view holds, the vector would be remote (AV:N) and risk would be higher. This is a direct conflict between vendor and reporter that defenders must resolve for their own deployment: CVSS AV:L implies local access, but the technical mechanism works identically on any untrusted JSON regardless of source. There is no KEV listing and no POC or EPSS score in the supplied data, so there is no evidence of active or probable exploitation - exploitation status is 'no public exploit identified at time of analysis.' Importantly, impact is bounded: the global Object.prototype is NOT polluted; only the parsed object's own prototype is replaced, so this is object-scoped prototype replacement rather than classic application-wide prototype pollution. Priority is therefore moderate: patch as routine hygiene, elevate only if your application feeds externally-sourced JSON into Assembler/FlexAssembler and makes authorization or feature decisions from inherited object values.

Exploit ScenarioDerived

An application uses stream-json's Assembler to parse JSON that an attacker can influence (e.g., an uploaded export or a log record), and later makes an authorization or feature-flag decision by reading a property via prototype inheritance. The attacker supplies a key named __proto__ whose value replaces the parsed object's prototype, so the application reads attacker-controlled inherited values or, with a null prototype, crashes when calling Object.prototype methods. No public exploit code is identified, and under the supplied CVSS the vector is local (AV:L), limiting reach to data the attacker can route into locally-processed files.

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

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

Alert me

AnalysisAIv1 – Oct 01, 2026

Prototype replacement in stream-json before 3.6.0 lets a JSON key literally named __proto__ overwrite the prototype of an assembled object, because Assembler and FlexAssembler wrote properties with plain assignment and thereby invoked the inherited setter instead of creating an own data property. Applications that read authorization, feature-flag, or control-flow values through prototype inheritance from a parsed object - or that call Object.prototype methods on it - can consume attacker-controlled inherited properties or hit runtime errors when the prototype is null; the global Object.prototype is never polluted, so impact is confined to the individual parsed object (CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L, low integrity and availability impact only). No public exploit code was identified at time of analysis and the issue is not in CISA KEV, but the flaw is genuine and its real-world exposure hinges on a disputed threat model: the maintainer documents intended input as locally owned dumps, exports, and logs (AV:L) while the reporter treats untrusted JSON parsing as part of the library contract, and no authentication or user interaction is required once hostile JSON reaches the parser (PR:N/UI:N).

RemediationAI

Upgrade to stream-json 3.6.0 or later (npm install stream-json@3.6.0), which is the vendor-released patch: commit 2f2d35b replaces plain assignment with Object.defineProperty in Assembler and applies the same treatment in FlexAssembler, making a __proto__ key an own data property exactly as JSON.parse does. Details are in the GitHub Security Advisory GHSA-mjw6-4jj6-33hc and the 3.6.0 release notes. If immediate upgrade is impossible, the effective compensating control is input trust enforcement rather than generic hardening: only feed the pipeline locally owned dumps, exports, and logs as the maintainer's documented contract requires, and if untrusted JSON must be handled, pre-validate or sanitize it before it reaches the assembler - for example a pre-parse scan or JSON.parse reviver that rejects or strips any __proto__ key, or a schema validator that disallows unexpected properties. Trade-off: this adds a full pass over the payload and the memory overhead that stream-json's minimal-footprint streaming design exists to avoid, so it partially defeats the library's purpose on large files. Because the swapped prototype is confined to the assembled object, applications can also blunt the impact by reading decision-making fields with Object.hasOwn/hasOwnProperty or by copying values onto an Object.create(null) container before use, and by avoiding reliance on Object.prototype methods on parsed results; note that a null-prototype payload will still cause type errors in code that assumes inherited methods, so defensive try/catch or explicit prototype checks may be needed. Blocking or rejecting payloads containing a literal __proto__ key at the ingestion boundary is the lowest-risk short-term measure until 3.6.0 is deployed everywhere.

Affected VersionsENISA

stream-json < 3.6.0

Affected Packages

npm stream-json fix: 3.6.0

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

stream-json is a minimal-footprint Node.js streaming JSON/JSONC toolkit built around a SAX-style token parser plus an assembler stage: the Assembler (and its FlexAssembler counterpart) consumes packed tokens such as keyValue, stringValue, and numberValue and reconstructs JavaScript objects. In affected versions the reconstruction used plain assignment (this.current[this.key] = value), which for a key named __proto__ follows the prototype chain to the inherited acccessor on Object.prototype and sets the object's prototype rather than defining an own property - the root-cause class is CWE-1321, improperly controlled modification of object prototype attributes. The consequence is a per-object prototype swap controllable by the parsed document: inherited attacker-supplied members become visible to lookups that traverse the prototype chain, and a payload that sets the prototype to null strips Object.prototype methods (toString, hasOwnProperty, etc.) from that object, producing the low availability impact in the vector. This is meaningfully narrower than classic prototype-pollution gadgets, because Object.prototype itself is untouched and pollution does not persist beyond the assembled value, which is why the advisory scores it 5.1 rather than high. The fix in 3.6.0 replaces assignment with Object.defineProperty so a __proto__ key becomes an ordinary own data property, matching JSON.parse semantics, and the same hardening is applied in FlexAssembler; accompanying documentation (README, ARCHITECTURE.md, llms.txt, JSDoc on AssemblerOptions) now explicitly states that stream-json is built for data the user owns or trusts and is not designed for hostile input beyond JSON.parse parity.

Know when Prototype Pollution 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 5.1 MEDIUM
AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
vuln.today AI 5.1 MEDIUM

AV:L follows the maintainer's local-only intended input and documented vector; no auth to the library (PR:N); integrity and availability limited since impact is object-scoped, not global, with no confidentiality effect.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

1
Patch available
Oct 01, 2026 - 21:17 EUVD

DescriptionCVE.org

stream-json is a micro-library of stream components for processing JSON and JSONC with a minimal memory footprint. Prior to 3.6.0, Assembler materializes object properties with plain assignment, so an input key named __proto__ invokes the inherited setter and causes parsed object prototype replacement instead of creating an own data property. Applications that make authorization or feature decisions from inherited values can therefore consume attacker-controlled properties, and a null prototype can disrupt code that expects Object.prototype methods. The researcher treats parsing untrusted JSON as part of the project contract, while the maintainer states that documented inputs are locally owned dumps, exports, or logs and characterizes the attack vector as local. The global Object.prototype is not polluted. This issue is fixed in version 3.6.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
popular npm streaming-JSON micro-library, widely used but not universal
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor 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 No
EPSS 0.2%
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
Defer
Exploitation
Poc
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2026-34621 HIGH POC
8.6 Apr 11

Prototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu

CVE-2021-23450 CRITICAL POC
9.8 Dec 17

All versions of package dojo are vulnerable to Prototype Pollution via the setObject function. Rated critical severity (

CVE-2024-56059 CRITICAL
9.8 Dec 18

Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau

CVE-2021-23383 CRITICAL POC
9.8 May 04

The package handlebars before 4.7.7 are vulnerable to Prototype Pollution when selecting certain compiling options to co

CVE-2020-7788 CRITICAL POC
9.8 Dec 11

This affects the package ini before 1.3.6. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitabl

CVE-2020-28271 CRITICAL POC
9.8 Nov 12

Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service

CVE-2023-38894 CRITICAL POC
9.8 Aug 16

A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi

CVE-2024-24292 CRITICAL POC
9.8 Mar 28

A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function

CVE-2023-26121 CRITICAL POC
10.0 Apr 11

All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s

CVE-2021-23449 CRITICAL POC
10.0 Oct 18

This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr

CVE-2024-39011 CRITICAL POC
9.8 Jul 30

Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser

CVE-2024-38988 CRITICAL POC
9.8 Mar 28

alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde

Vendor StatusVendor

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