{"id":"CVE-2026-104849","title":"Tinypool is a minimal Node.js worker thread pool implementation","summary":"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.f…","severity":"critical","cvss":9.5,"cvssVector":"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","cwe":["CWE-94","CWE-1321"],"vendor":"tinylibs","product":"tinypool","affected":["tinypool < 2.1.2"],"patched":["tinypool 2.1.2"],"published":"2026-10-02","updated":"2026-10-06","sourceUpdated":"2026-10-06T17:17:15.700","source":"NVD","sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-104849","references":[{"url":"https://github.com/tinylibs/tinypool/commit/f41411a3e23324c674f35a19a3240f7a7c40ffbf","label":"security-advisories@github.com"},{"url":"https://github.com/tinylibs/tinypool/pull/135","label":"security-advisories@github.com"},{"url":"https://github.com/tinylibs/tinypool/releases/tag/v2.1.2","label":"security-advisories@github.com"},{"url":"https://github.com/tinylibs/tinypool/security/advisories/GHSA-85c8-ppgw-ccpr","label":"security-advisories@github.com"},{"url":"https://github.com/tinylibs/tinypool/security/advisories/GHSA-85c8-ppgw-ccpr","label":"134c704f-9b21-4f2e-91b3-4a467353bcc0"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-104849"},{"url":"https://github.com/advisories/GHSA-85c8-ppgw-ccpr"},{"url":"https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-104849.json"},{"url":"https://access.redhat.com/security/cve/CVE-2026-104849"},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2545289"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-104849"}],"tags":["nvd","cve.org","ghsa","npm","exploit-available","csaf","vex","red-hat"],"epss":0.00485,"epssPercentile":0.41562,"aliases":["GHSA-85c8-ppgw-ccpr"],"ecosystem":"npm","exploitAvailable":true,"ssvc":{"exploitation":"poc","automatable":"yes","technicalImpact":"total","timestamp":"2026-10-06T16:35:41.151003Z"},"cvssSource":"cna","ingestedAt":"2026-10-02T17:24:03.904Z","scores":{"cna":9.5,"vendor":8.1},"exploits":{"github":1,"githubRepos":["https://github.com/CompleTetech-Security/tinypool-options-rce-check"],"checkedAt":"2026-10-27T16:54:16.733Z"},"slug":"CVE-2026-104849","body":"## Overview\n\nTinypool 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.\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n## Package advisory (CVE-2026-104849)\n\nAffected packages:\n\n- `tinypool < 2.1.2`\n\nPatched in:\n\n- `tinypool 2.1.2`\n\nSource: https://github.com/advisories/GHSA-85c8-ppgw-ccpr\n\n## Vendor advisories\n\n- **Red Hat VEX** · Critical · affected: Red Hat AMQ Broker 7, Red Hat Ansible Automation Platform 2, Red Hat Build of Podman Desktop · no fix planned: Red Hat AMQ Broker 7, Red Hat Ansible Automation Platform 2, Red Hat Build of Podman Desktop · updated 2026-10-09 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-104849.json)","depth":"abyssal","depthScore":64,"depthScoreParts":{"impact":52.3,"likelihood":0.1,"exploitation":12,"ransomware":0},"changes":[{"seq":216590,"id":"CVE-2026-104849","ts":1791306666291,"field":"exploit_available","old":"false","new":"true"}]}