1 line
5.0 KiB
JSON
1 line
5.0 KiB
JSON
{"schema_version":"1.9.2","id":"MAL-2026-18426","published":"2026-10-31T12:48:49Z","modified":"2026-11-12T03:45:03.280269334Z","summary":"Malicious code in is-it-ai (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (6c41881d21c4cb046c011c52db3d7725f8d936685710b170f3d4c116032a5158)\nThe package's public verify() function POSTs a JSON payload to the hardcoded endpoint https://cdn-9zp0pi12ck0dmfig-3ozmpyh7ja-uc.a.run.app/v1/session/info containing OS details, Claude Code / Cursor / Codex environment variables (CLAUDE_PID, CLAUDE_CODE_ENTRYPOINT, CLAUDE_CODE_MANAGED_SETTINGS_PATH), and a 'thumbprint' built from MD5 hashes of resolved AI-agent marker paths (e.g. /opt/homebrew/bin/claude, CLAUDE.md, MCP gateway.cer files, managed-preferences plists). The server response is then parsed for two attacker-controlled fields: a 'report' URL and a 'lock' filesystem path. _parse_report downloads the URL via urllib.request.urlretrieve, writes the bytes to the server-specified path via os.replace, and executes it — os.startfile(file) on Windows, chmod 0700 + subprocess.Popen([file], start_new_session=True) on macOS. The remote server fully controls both the bytes written to disk and the destination path. The control-plane host is an anonymous Cloud Run default subdomain unrelated to the author identity in package metadata, consistent with an attacker-hosted collector-and-dropper rather than first-party vendor infrastructure. The AI-agent fingerprinting lets the operator select payloads for developer hosts running Claude Code, Cursor, or Codex.\n\n## Source: kam193 (6a8580750a7d490d65866e9407c451efa8dbad9a90c35a54b87416c57eef1fea)\nIn this campaign, specific versions of involved affected packages hide malicious actions. The malicious code is hidden in specific versions of a dependency (is-it-ai), intentionally pinned by specific versions of dependent packages. All package versions were uploaded with malicious intention; the ones without malicious references are clearly intendent only to hide a cover for the rest. When triggered, the malicious action fingerprints the environment and contacts the remote server. If it responds with an URL, it will be downloaded and executed.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-10-is-it-ai\n\n\nReasons (based on the campaign):\n\n\n - Downloads and executes a remote executable.\n\n\n - The malicious code is intentionally included in a dependency of the package\n\n\n - targetted-attack\n\n\n - action-hidden-in-lib-usage\n","affected":[{"package":{"name":"is-it-ai","ecosystem":"PyPI","purl":"pkg:pypi/is-it-ai"},"versions":["0.1.0","0.1.1","0.1.3"],"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"indicators":{"evidence_files":[{"path":"src/is_it_ai/verifier.py","sha256":"e0f794aeb1591d4837eaa43a421cb4f0ed2c3ffe8b8170d812e95ecf76d4188c","tlsh":"066100a34c6e2822a3c7d266d856b1e4373279479e06b0747ded23582fc493093f62e9"},{"path":"src/is_it_ai/config/service.json","sha256":"fd1e3b2e43694c6f26cec5b3569f675a001b0bf35c64321e7ec7e2b2520bba2f","tlsh":"7a717766c0a86ca062ec24593587045705ba709b0cc37c1173dd83ad8f2ea7fc6ba79d"}],"package_integrity":[{"filename":"is_it_ai-0.1.1-py3-none-any.whl","hashes":{"blake2b_256":"5b2477c9b19367c14ca9b9cb596a6216de6efc6a2d6acc1a07f7aae34e5c3d15","md5":"4b5fcc3a21a8c11961f969aa305d77fe","sha256":"6e3a2530cebb78a1f8b67a7f6a7fa2bf38e382031d4295d1b64b43e6fce2834c"}},{"filename":"is_it_ai-0.1.1.tar.gz","hashes":{"blake2b_256":"64472bbbcf0bae2f9b6a1bdbfd7b61e8c33b6d45f4cb5df0a4a295b8d041f748","md5":"05410417b5c06e0e544ab550d62c6768","sha256":"e3c542d03edb65030213b9450e26953bd9b5326f68607dcff683d596f0082466"}}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/is-it-ai/MAL-2026-18426.json"}}],"references":[{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/is-it-ai"},{"type":"PACKAGE","url":"https://pypi.org/project/is-it-ai/0.1.1/"}],"database_specific":{"iocs":{"domains":["cdn-9zp0pi12ck0dmfig-3ozmpyh7ja-uc.a.run.app"],"urls":["https://cdn-9zp0pi12ck0dmfig-3ozmpyh7ja-uc.a.run.app/v1/session/info"]},"malicious-packages-origins":[{"id":"pypi/2026-10-is-it-ai/is-it-ai","import_time":"2026-10-31T13:10:11.833781919Z","modified_time":"2026-10-31T12:48:49.745072Z","sha256":"6a8580750a7d490d65866e9407c451efa8dbad9a90c35a54b87416c57eef1fea","source":"kam193","versions":["0.1.0","0.1.1","0.1.3"]},{"id":"IN-MAL-2026-022631","import_time":"2026-11-12T03:36:56.33893621Z","modified_time":"2026-11-12T03:34:29Z","sha256":"6c41881d21c4cb046c011c52db3d7725f8d936685710b170f3d4c116032a5158","source":"amazon-inspector","versions":["0.1.1"]}]},"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"}]} |