{"id":"MAL-2026-17180","title":"Malicious code in my-private-pkg (PyPI)","summary":"Malicious code in my-private-pkg (PyPI)","severity":"critical","exploited":true,"vendor":"my-private-pkg","product":"my-private-pkg","ecosystem":"pip","affected":["my-private-pkg"],"published":"2026-09-25","updated":"2026-09-25","sourceUpdated":"2026-09-25T14:30:05.761879412Z","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/MAL-2026-17180","references":[{"url":"https://pypi.org/project/my-private-pkg/99.1.1/"},{"url":"https://hyena-dashboard-314003657440.asia-northeast3.run.app/#/report/f6466201-aa5b-4136-b458-f88e7b9b4575?period=30&eco=all&tab=summary&return=%23%2Freports%3Fperiod%3D30%26eco%3Dall%26verdict%3Dmalicious"},{"url":"https://bad-packages.kam193.eu/pypi/package/my-private-pkg"},{"url":"https://pypi.org/project/my-private-pkg/0.1.1/"}],"tags":["osv","pip","malware"],"ingestedAt":"2026-09-25T07:17:06.725Z","slug":"MAL-2026-17180","body":"## Overview\n\nVersion 99.1.1 of my-private-pkg executes a custom setuptools install hook while a wheel is built. The hook launches my_private_pkg/index.py, which collects the current username, working directory, hostname, resolved local IP address, operating system, and machine architecture, then attempts to POST the resulting JSON to a hard-coded Webhook.site request collector. Dynamic analysis observed the wheel build spawn this script followed immediately by network activity. The package's public metadata describes it only as a private Python package and does not disclose the collection or transmission.\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (d8008c5637dfae2dfc4162f1dd5152c5e90e03b0fc8593fda5055f44e9745b22)\nsetup.py registers a custom install command (PostInstallCommand) that runs my_private_pkg/index.py automatically on `pip install`. That script gathers installer-side identifiers — os.getlogin(), socket.gethostname(), local IP address, os.getcwd(), platform.system() and platform.machine() — and POSTs them as JSON to a hardcoded collector URL at https://webhook.site/d4d1b01b-708a-40b9-b8c8-187eeecafeed. A duplicate of the exfiltration payload is shipped as vercel_runtime_python/index.py, and vercel_runtime_python/__init__.py contains the same PostInstallCommand wiring referencing my_private_pkg/index.py; the module name mimics Vercel's Python runtime. The package name and the internal vercel_runtime_python module name are consistent with a dependency-confusion lure targeting an internal `my-private-pkg` name and Vercel's runtime namespace: the only on-install effect is a reconnaissance beacon to an attacker-controlled webhook.site endpoint identifying the host that mistakenly resolved the public name.\n\n## Source: kam193 (b9272fe1642ca0e3b8b1cfcf930ca69b08119ed258cdc760f9ad8a014b76767b)\nInstalling the package or importing the module exfiltrates basic information about the host, and the package has no other purpose.\n\n\n---\n\nCategory: PROBABLY_PENTEST - Packages looking like typical pentest packages, but also anything that looks like testing, exploring pre-prepared kits, research & co, with clearly low-harm possibilities.\n\n\nCampaign: GENERIC-standard-pypi-install-pentest\n\n\nReasons (based on the campaign):\n\n\n - The package contains code to exfiltrate basic data from the system, like IP or username. It has a limited risk.\n\n\n - The package overrides the install command in setup.py to execute malicious code during installation.\n\n\n## Affected packages\n\n- `my-private-pkg`\n\n## Remediation\n\nRefer to the advisory for the patched release.","depth":"abyssal","depthScore":70,"depthScoreParts":{"impact":52.3,"likelihood":0,"exploitation":18,"ransomware":0},"changes":[]}