# CVE-2026-104183: stream-json: Prototype pollution: Assembler writes this.current[this.key] on plain objects

> Attackers can pollute object prototypes via crafted JSON, potentially bypassing authorization checks or causing application errors in applications using the stream-json library.

- **Severity:** Medium 5.1 (`CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L`)
- **Exploited in the wild:** Not known
- **Login needed:** Not needed
- **Attackable:** Local or same network only
- **Victim action needed:** Not needed
- **Fix available:** Yes
- **Published:** 1 Oct 2026
- **Updated:** 1 Oct 2026
- **Also known as:** CLEANSTART-2026-ME44446, CLSA-2026-1791278816, GHSA-mjw6-4jj6-33hc

## What is CVE-2026-104183?

CVE-2026-104183 is a medium-severity vulnerability in uhop stream-json, published on 1 Oct 2026. It can only be exploited from the same machine or local network, with no action from the victim.

### Official description

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.

Weakness: CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes)

## Which versions are affected by CVE-2026-104183?

2 open source packages ship an affected version, including stream-json.


| Package | Ecosystem | Affected | Fixed in |
| --- | --- | --- | --- |
| `stream-json` | npm | All versions | 3.6.0 |
| `stream-json` | npm | All versions | 3.6.0 |

## How do I fix CVE-2026-104183?

Upgrade stream-json to 3.6.0 or later.

## Is CVE-2026-104183 being exploited?

It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-104183 exists.

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2026-104183 and fix it if it is affected.

What it is: CVE-2026-104183 is a medium-severity vulnerability in uhop stream-json, published on 1 Oct 2026. It can only be exploited from the same machine or local network, with no action from the victim.
Exploitation: It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-104183 exists.

Affected packages and fixed versions:
- stream-json (npm): affected all versions; fixed in 3.6.0
- stream-json (npm): affected all versions; fixed in 3.6.0

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2026-104183/ (Markdown: https://insights.sbomify.com/CVE-2026-104183/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2026-104183
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-104183
- OSV: https://osv.dev/vulnerability/CVE-2026-104183

---
From sbomify Insights: https://insights.sbomify.com/CVE-2026-104183/
Summaries are generated and may contain mistakes; the official description above is the record.
