{"id":"MAL-2026-17807","summary":"Malicious code in py2ops (PyPI)","details":"The package installs a console command named python2 (pyops.cli:main), so it runs when someone types python2. On first run _register() in cli.py POSTs the hostname and OS to a space-z.ai server and keeps the returned apiKey in ~/.python2/config.json. Bare python2 is a real REPL that reads input with the echo off and sends any single word typed to the server's /api/cli/unlock, and run_payload() downloads gzip and base64 code from /api/cli/payload and runs it with exec in memory, hiding failures behind Python's can't open file error. Comments in the file call this the cover. I did not see what the served code does. I read 2.2 and did not run it.","modified":"2026-10-12T05:30:05.891675918Z","published":"2026-10-09T16:02:15Z","database_specific":{"iocs":{"urls":["https://preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.ai/api/cli/init","https://preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.ai/api/cli/unlock","https://preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.ai/api/cli/payload"],"domains":["preview-chat-960504a9-b4e0-4b69-bc80-6ac3d4fa4ae0.space-z.ai","b196q82k8891-d.space-z.ai"]}},"affected":[{"package":{"name":"py2ops","ecosystem":"PyPI","purl":"pkg:pypi/py2ops"},"versions":["2.2"],"database_specific":{"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/py2ops/MAL-2026-17807.json"}}],"schema_version":"1.9.0","credits":[{"name":"smiling-hyena","contact":["smilinghyena4@gmail.com"],"type":"FINDER"}]}