{"id":"MAL-2026-10986","summary":"Malicious code in comp-colors (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (7ac2a6fc7368c6b3ed1bfac9a3a9ea25e9a54ba5d980a48767c811e03fc72566)\nThe package presents itself as a local color-palette toolkit but exports a public `colors()` function in remote.py that POSTs to the hardcoded endpoint https://www.fastsyncapi.com/v1/colors, writes the returned bytes to a NamedTemporaryFile with a server-controlled filename/extension, and executes them without any hash or signature verification. On Windows the code silently installs.msi responses via `msiexec.exe /i /qn /norestart` and then launches a fixed binary path; on other platforms it invokes `os.startfile` / `xdg-open` / `open` on the dropped file. A companion `update()` function collects the installer's hostname, a SHA-256 HWID derived from hostname and MAC address (`uuid.getnode()`), and locale-derived country code and POSTs them along with a caller-supplied activation key to https://www.fastsyncapi.com/v1/update; the response token is persisted at `~/.config/npm-packages/vtoken.json` (Linux) or `%LOCALAPPDATA%/npm-packages/vtoken.json` (Windows) and reused by the dropper. All classes, functions, parameters, and locals across src/pycolored/* are renamed to random tokens (e.g. `_LBOfQSgdKR5ic9eT`, `_ji0wfcMCs1P5dOqg`), and the undocumented `colors` and `update` symbols are exported in `__all__` while the README only advertises a benign `colorsv1` helper. The `npm-packages` token directory inside a Python package indicates cross-registry actor infrastructure reuse.\n\n## Source: kam193 (1aad1b8a73afbe28c708c4e19a1495793d1214980f72357a13d07b98f1f9a060)\nThe package hides code to download and execute a remote executable from a newly created fastsyncapi[.]com domain. It is disguised as a remote 'fast color helper,' as opposed to the local helper, also included in the code, that only mimics any functionality. The malicious part is not immediately active: to download the binary, a key is required, which was not included in the analyzed versions. The downloaded binary is executed, and at least in one case disguised as 'AppHostRegistrationVerifier'. The package is likely prepared for multi-stage infection, but the trigger code using it was not identified.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-07-colorstack\n\n\nReasons (based on the campaign):\n\n\n - Downloads and executes a remote executable.\n\n\n - action-hidden-in-lib-usage\n","modified":"2026-08-04T23:05:47.089851484Z","published":"2026-07-21T20:44:12Z","database_specific":{"iocs":{"domains":["fastsyncapi.com"],"urls":["https://www.fastsyncapi.com/v1/update","https://www.fastsyncapi.com/v1/colors"]},"malicious-packages-origins":[{"modified_time":"2026-07-21T20:44:12.2458Z","sha256":"1aad1b8a73afbe28c708c4e19a1495793d1214980f72357a13d07b98f1f9a060","source":"kam193","versions":["0.1.5"],"id":"pypi/2026-07-colorstack/comp-colors","import_time":"2026-07-21T21:28:46.548085386Z"},{"id":"IN-MAL-2026-011182","import_time":"2026-08-04T22:30:03.678328149Z","modified_time":"2026-08-04T21:44:22Z","sha256":"7ac2a6fc7368c6b3ed1bfac9a3a9ea25e9a54ba5d980a48767c811e03fc72566","source":"amazon-inspector","versions":["0.1.5"]}]},"references":[{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/comp-colors"},{"type":"PACKAGE","url":"https://pypi.org/project/comp-colors/0.1.5/"}],"affected":[{"package":{"name":"comp-colors","ecosystem":"PyPI","purl":"pkg:pypi/comp-colors"},"versions":["0.1.5"],"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"indicators":{"package_integrity":[{"filename":"comp_colors-0.1.5-py3-none-any.whl","hashes":{"blake2b_256":"e3811f935809feb1adc48f3ac47635c5f3871c09c13ff65991b39183e7e6ef07","md5":"1237837f82100b06318b4920d4c442b6","sha256":"2f32ef36994b3e7fcd68dbee0dbf12de0c55c32162b6e8478847e642c5887ff7"}},{"hashes":{"sha256":"24267e8054ff815556cbe05e5015056962c1e76f80fc55460cd87ae22199b49b","blake2b_256":"27da17c1390c50c4ca0ba0a7aa7f702164468d407f24e1088e2a5d98fa32a71a","md5":"eb194a09e1e21f1f83d64b1a66c0019f"},"filename":"comp_colors-0.1.5.tar.gz"}],"evidence_files":[{"sha256":"8ce51910fdda5e702c4ce49388f40358294ff1071f68825dc94037987586f018","tlsh":"26415301d035611683c38bbe2871e6724b25e8836f04676975fd4278ef5727f2176f24","path":"src/pycolored/remote.py"},{"path":"src/pycolored/activation.py","sha256":"802c81f97c01e109b7dff9e7531670213cc3598e02b9d91277ce91567f619fa7","tlsh":"4f414202a23055978ed7bfb9b9622571073994832e1c390b389cd720df2e2bc28be581"},{"path":"src/pycolored/token_store.py","sha256":"a228baca80fa942b6aee46b7da163da142e06294ed81d9dbd742622fd1603116","tlsh":"9c41342b462158909bc3f7297c25c1711f01fd232d8894a9f55cd7519ffc03eb4a9759"}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/comp-colors/MAL-2026-10986.json"}}],"schema_version":"1.8.0","credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"},{"name":"Kamil Mańkowski (kam193)","contact":["https://github.com/kam193","https://bad-packages.kam193.eu/"],"type":"REPORTER"}]}