Skip to content
Heist/ feed
Back to feed
Critical

Tinypool: Prototype Pollution Gadget to RCE in run() options

Type: advisorySources: OSV

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.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-104849
Confirmed fixed CVEs
Not specified
Updated in this feed
4 Nov 2026, 16:34 UTC · Revision 1

Source evidence

Tinypool: Prototype Pollution Gadget to RCE in run() options

core-osv · Original source

Published 2 Oct 2026, 16:17 UTC

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.

osv:CVE-2026-104849
Complete source record
{
  "id": "39493b2b4a38c4f6c76dfaee74fc33c86c5b27c45388950a1eb95534178198b8",
  "url": "https://osv.dev/vulnerability/CVE-2026-104849",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Tinypool: Prototype Pollution Gadget to RCE in run() options",
    "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.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.",
    "evidence": "osv:CVE-2026-104849",
    "products": [],
    "severity": "critical",
    "structured": {
      "id": "CVE-2026-104849",
      "aliases": [
        "CVE-2026-104849",
        "GHSA-85c8-ppgw-ccpr"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "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"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/tinylibs/tinypool",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "5e18382a9aaa3344035905384b18a88a9da8c8bb"
                },
                {
                  "fixed": "f41411a3e23324c674f35a19a3240f7a7c40ffbf"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "2.1.2"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "f41411a3e23324c674f35a19a3240f7a7c40ffbf"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "5e18382a9aaa3344035905384b18a88a9da8c8bb"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v2.1.2"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v2.1.1",
            "v2.1.0",
            "v2.0.0",
            "v1.1.1",
            "v1.1.0",
            "v1.0.2",
            "v1.0.1",
            "v1.0.0",
            "v0.9.0",
            "v0.8.4",
            "v0.8.3",
            "v0.8.2",
            "v0.8.1",
            "v0.8.0",
            "v0.7.0",
            "v0.6.0",
            "v0.5.0",
            "v0.4.0",
            "v0.3.1",
            "v0.3.0",
            "v0.2.4",
            "v0.2.3",
            "v0.2.2",
            "v0.2.1",
            "v0.2.0",
            "v0.1.3",
            "v0.1.2",
            "v0.1.1",
            "v0.1.0",
            "v0.0.8",
            "v0.0.7",
            "v0.0.6",
            "v0.0.5",
            "v0.0.4",
            "v0.0.3",
            "v0.0.2",
            "v0.0.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-104849.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:37.506447914Z",
      "provider": "osv",
      "references": [
        "https://github.com/tinylibs/tinypool/releases/tag/v2.1.2",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/104xxx/CVE-2026-104849.json",
        "https://github.com/tinylibs/tinypool/security/advisories/GHSA-85c8-ppgw-ccpr",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-104849",
        "https://github.com/tinylibs/tinypool/commit/f41411a3e23324c674f35a19a3240f7a7c40ffbf",
        "https://github.com/tinylibs/tinypool/pull/135"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-1321",
          "CWE-94"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/104xxx/CVE-2026-104849.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-104849",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 504749,
  "published_at": "2026-10-02T16:17:28.062+00:00"
}