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.
Published: 2026-10-02
Score: 9.5 Critical
EPSS: < 1% Very Low
KEV: No
Impact: Remote Code Execution
Action: Immediate Patch
AI Analysis

Impact

Tinypool, a lightweight Node.js worker pool, is vulnerable when an attacker succeeds in polluting the Object prototype with a filename property. The polluted prototype value replaces the intended worker module loaded via pool.run(task, options). The attacker can then execute arbitrary JavaScript in the worker thread, thereby running code with the same privileges as the host process. This flaw is a classic prototype‑pollution bug (CWE‑1321) combined with code execution via dynamically loaded modules (CWE‑94).

Affected Systems

The vulnerability affects the tinypool library distributed by tinylibs. All versions prior to 2.1.2 that allow a caller‑supplied options object to pool.run(task, options) are susceptible. Applications that invoke pool.run with a custom options argument are at risk; calls without the second argument use a trusted default and are not affected.

Risk and Exploitability

The CVSS score of 9.5 marks this vulnerability as critical. No EPSS data is available, so the likelihood of exploitation cannot be quantified, but the exploit requires only the ability to inject prototype properties—a common script or code injection vector. The issue is not listed in CISA's KEV catalog, meaning no documented active exploitation has been reported yet. Nonetheless, the high impact and the feasibility of prototype pollution make this a priority risk for any affected deployment.

Generated by OpenCVE AI on October 2, 2026 at 17:21 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade tinypool to version 2.1.2 or later where the prototype pollution check is fixed.
  • If upgrading is not immediately possible, modify your code to avoid passing a second options argument to pool.run, or ensure that the options object is shallow‑copied and its properties are explicitly defined as own properties before use.
  • Implement defensive coding around Object.prototype by preventing prototype pollution in all contexts, such as using Object.freeze on prototypes or sandboxing user‑supplied input before it reaches tinypool.

Generated by OpenCVE AI on October 2, 2026 at 17:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-85c8-ppgw-ccpr Tinypool: Prototype Pollution Gadget to RCE in run() options
History

Wed, 07 Oct 2026 12:30:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

cvssV3_1

{'score': 8.1, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H'}

threat_severity

Critical


Tue, 06 Oct 2026 17:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Sun, 04 Oct 2026 22:15:00 +0000

Type Values Removed Values Added
First Time appeared Tinylibs
Tinylibs tinypool
Vendors & Products Tinylibs
Tinylibs tinypool

Fri, 02 Oct 2026 16:30:00 +0000

Type Values Removed Values Added
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.
Title Tinypool: Prototype Pollution Gadget to RCE in run() options
Weaknesses CWE-1321
CWE-94
References
Metrics cvssV4_0

{'score': 9.5, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H'}


Subscriptions

Tinylibs Tinypool
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-06T16:35:59.948Z

Reserved: 2026-10-02T14:38:43.244Z

Link: CVE-2026-104849

cve-icon Vulnrichment

Updated: 2026-10-06T16:35:56.141Z

cve-icon NVD

Status : Deferred

Published: 2026-10-02T17:17:03.623

Modified: 2026-10-06T17:17:15.700

Link: CVE-2026-104849

cve-icon Redhat

Severity : Critical

Publid Date: 2026-10-02T16:17:28Z

Links: CVE-2026-104849 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-04T20:53:36Z

Weaknesses
  • CWE-1321

    Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution')

  • CWE-94

    Improper Control of Generation of Code ('Code Injection')