{"items":[{"id":"NVI-00010683","kind":"vulnerability","title":"setuptools: Windows path escape via namespace_packages.txt during legacy wheel installation  Description","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-xmj3-9gf7-h52w"],"plain_summary":"GitHub lists this reviewed advisory for setuptools. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-a1f38b2bf8bc53d106ea08b0452a8adc"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-a1f38b2bf8bc53d106ea08b0452a8adc","url":"https://github.com/advisories/GHSA-xmj3-9gf7-h52w","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-xmj3-9gf7-h52w","publisher":"GitHub Advisory Database","observed_at":"2026-10-31T22:07:08.657Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-a1f38b2bf8bc53d106ea08b0452a8adc"],"technology":"setuptools","known_exclusions":[],"conditions_summary":"### Summary\n\nOn Windows, attacker-controlled content in a wheel's\n`.dist-info/namespace_packages.txt` can cause setuptools' legacy wheel\ninstallation path to create an `__init__.py` outside the requested\n`destination_eggdir`.\n\nThe attacker can influence the destination path, but not the contents of\nthe created file.\n\n### Details\n\nTested setuptools commit:\n\n`6ead555c5fb29bc57fe6105b1bffc163f56fd558`\n\nRelevant source:\n\n`setuptools/wheel.py`\n\nSHA-256:\n\n`359b7e0d5dd8c3135653abe08a8ed5dc0352eadfd7df22cb5e2b5303b7c3cafd`\n\nThe relevant call path is:\n\n`Wheel(wheel_path).install_as_egg(destination)`\n→ `_install_as_egg`\n→ `_convert_metadata`\n→ `_fix_namespace_packages`\n\nA wheel can provide attacker-controlled content in:\n\n`.dist-info/namespace_packages.txt`\n\nThe namespace value is eventually used approximately as:\n\n```python\nmod_dir = os.path.join(destination_eggdir, *mod.split('.'))\nmod_init = os.path.join(mod_dir, '__init__.py')\n\nIf mod is a Windows drive-qualified absolute path containing no dots,\nmod.split('.') preserves it as a single component.\nOn Windows, os.path.join(destination_eggdir, absolute_component) discards\nthe original base directory and resolves to the attacke","public_affected_ranges":[">= 38.2.2, < 84.1.0"]}],"null_published_at":"2026-10-31T22:27:09.628Z","source_updated_at":"2026-10-23T21:44:13.000Z","source_disclosed_at":"2026-10-23T21:44:11.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-10-31T22:07:08.657Z"}],"next_cursor":null,"snapshot_revision":"42594"}