CVE-2026-104849
Received Received - Intake

Prototype Pollution in Tinypool Worker Module

Vulnerability report for CVE-2026-104849, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-10-02

Last updated on: 2026-10-02

Assigner: GitHub, Inc.

Description

Tinypool is a minimal Node.js worker thread pool implementation. Prior to 2.1.2, Tinypool reads filename from a caller-supplied options object in pool.run(task, options) without requiring an own property, so a polluted Object.prototype.filename can replace the intended worker module. Applications are affected only when they pass their own second-argument options object to pool.run(); calls without that argument use the trusted default options object. An attacker who can first pollute the prototype can cause the worker pool to load attacker-selected JavaScript and can read or modify task data with the host process's privileges. This issue is fixed in version 2.1.2.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-10-02
Last Modified
2026-10-02
Generated
2026-10-02
AI Q&A
2026-10-02
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 2 associated CPEs
Vendor Product Version / Range
tinypool tinypool to 2.1.2 (exc)
tinylibs tinypool to 2.1.2 (exc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-94 The product constructs all or part of a code segment using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the syntax or behavior of the intended code segment.
CWE-1321 The product receives input from an upstream component that specifies attributes that are to be initialized or updated in an object, but it does not properly control modifications of attributes of the object prototype.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability is a Prototype Pollution gadget in the tinypool npm package (versions <=2.1.0). It occurs when the pool.run(task, options) function is called with a user-controlled options object. If the object lacks an own filename property, the lookup falls back to Object.prototype, allowing prototype pollution. An attacker can set Object.prototype.filename to load a malicious worker module, leading to arbitrary JavaScript execution in the worker pool with the host process's privileges.

Detection Guidance

Check if your application uses tinypool versions <=2.1.0 by inspecting package.json or running npm list tinypool. Look for prototype pollution in user-controlled options passed to pool.run(). Use static analysis tools to detect prototype pollution patterns in code handling user inputs.

Impact Analysis

If you use tinypool versions <=2.1.0 and pass a user-controlled options object to pool.run(), an attacker who can pollute Object.prototype could execute arbitrary code on your system, access sensitive data, or modify task data. The impact includes potential remote code execution and data exfiltration, depending on the application's context and permissions.

Compliance Impact

This vulnerability could lead to unauthorized data access or modification, violating GDPR's integrity and confidentiality principles or HIPAA's security requirements for protected health information. Organizations using affected versions may face compliance violations, legal liabilities, and reputational damage if exploited.

Mitigation Strategies

Upgrade tinypool to version 2.1.2 or later. Avoid passing user-controlled options to pool.run(). Use Object.hasOwn or Object.prototype.hasOwnProperty.call to validate options. Ensure no prototype pollution exists in dependencies like lodash.merge or qs.parse.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-104849. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart