Malicious code in py2ops (PyPI)
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.
- Products
- py2ops
- Affected versions
- 2.2
- Fixed versions
- Not specified
- CVEs
- Not specified
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 30 Oct 2026, 06:03 UTC · Revision 1
Source evidence
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.
osv:MAL-2026-17807
py2ops
Fixed versions: Not specified
Complete source record
{
"id": "caac5ad0807d7c63daddea8ca383c253884776478e8c869b24f7cf240d18482c",
"url": "https://osv.dev/vulnerability/MAL-2026-17807",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Malicious code in py2ops (PyPI)",
"summary": "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.",
"evidence": "osv:MAL-2026-17807",
"products": [
{
"name": {
"value": "py2ops",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": [
{
"value": "2.2",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "unknown",
"structured": {
"id": "MAL-2026-17807",
"aliases": [
"MAL-2026-17807"
],
"affected": [
{
"package": {
"name": "py2ops",
"purl": "pkg:pypi/py2ops",
"ecosystem": "PyPI"
},
"versions": [
"2.2"
],
"database_specific": {
"source": "https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/py2ops/MAL-2026-17807.json"
}
}
],
"modified": "2026-10-12T05:30:05.891675918Z",
"provider": "osv",
"references": [],
"provider_metadata": {
"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"
]
}
}
},
"related_cves": [],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 298630,
"published_at": "2026-10-09T16:02:15+00:00"
}