{"id":"MAL-2026-18104","kind":"package","aliases":["MAL-2026-18104"],"related":[],"title":"Malicious code in semvver (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (bbc16b0ced0bad1a33b912dfdb29cbaef211f30974d942991257d4e6b60a8ece)\nsetup.py performs an install-time fetch-and-execute: it calls urllib.request.urlretrieve against https://c2-worker.crawlnet-claim.workers.dev/dl/pyupd, writes the response to a temporary path, and spawns it as a detached background process via subprocess.Popen with start_new_session=True. The fetch is unpinned and has no hash or signature verification, exceptions are swallowed, and the destination is a Cloudflare Workers subdomain unrelated to any PyPI publisher identity. The package has no other functionality — __init__.py is empty and the description is a generic 'utility helpers' string — so the install hook is the package's entire payload. The downloaded binary name 'pyupd' is a cover-story label; the behavior is a classic install-time dropper that grants whoever controls the Workers endpoint arbitrary code execution on the installer's host, running detached and persisting beyond the pip process.\n\n## Source: kam193 (870775cad2a7f248b017394e8fbdb3470f6799de13d3ad278f1440b5b470c275)\nDuring installation, package downloads and executes malware.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-10-semvver\n\n\nReasons (based on the campaign):\n\n\n - Downloads and executes a remote executable.\n\n\n - malware\n\n\n - typosquatting","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"semvver","fixed":[],"affected":"= 1.0.0","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-10-20T18:20:39+00:00","first_seen_at":"2026-10-26T20:52:02+00:00","triaged_at":"2026-10-26T20:59:55+00:00","updated_at":"2026-10-26T21:05:48+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-10':190C '-18104':8A,11A '-2026':7A,10A '/dl/pyupd,':45C '2026':189C '870775cad2a7f248b017394e8fbdb3470f6799de13d3ad278f1440b5b470c275':170C 'amazon':26C 'amazon-inspector':25C 'arbitrari':152C 'background':59C 'base':193C 'bbc16b0ced0bad1a33b912dfdb29cbaef211f30974d942991257d4e6b60a8ece':28C 'behavior':137C 'beyond':164C 'binari':127C 'c2-worker.crawlnet-claim.workers.dev':44C 'c2-worker.crawlnet-claim.workers.dev/dl/pyupd,':43C 'call':40C 'campaign':181C,188C,196C 'categori':178C 'classic':140C 'clear':183C 'cloudflar':87C 'code':2A,153C 'control':148C 'cover':133C 'cover-stori':132C 'descript':108C 'destin':84C 'detach':58C,161C 'detail':17C 'download':126C,174C,197C 'dropper':144C 'edit':20C 'empti':105C 'endpoint':151C 'entir':123C 'except':79C 'execut':38C,154C,176C,199C,202C 'fetch':36C,69C 'fetch-and-execut':35C 'function':101C 'generic':111C 'grant':146C 'hash':75C 'helper':113C 'hook':118C 'host':159C 'ident':95C 'infosteal':187C 'init':102C 'inspector':27C 'instal':33C,117C,142C,157C,172C 'install-tim':32C,141C 'intent':185C 'kam193':169C 'label':135C 'like':186C 'line':23C 'mal':6A,9A 'malici':1A,13B,179C,184C 'malwar':177C,203C 'name':128C 'new':65C 'packag':14B,97C,121C,173C 'path':52C 'payload':124C 'per':15C 'perform':30C 'persist':163C 'pip':166C 'process':60C,167C 'publish':94C 'py':103C 'pypi':5A,93C 'pyupd':129C 'reason':192C 'remot':201C 'respons':48C 'run':160C 'semvver':4A,12A,191C 'session':66C 'setup.py':29C 'signatur':77C 'sourc':16C,24C,168C 'spawn':54C 'start':64C 'stori':134C 'string':114C 'subdomain':89C 'subprocess.popen':62C 'swallow':81C 'temporari':51C 'time':34C,143C 'true':67C 'typosquat':204C 'unpin':71C 'unrel':90C 'urllib.request.urlretrieve':41C 'util':112C 'verif':78C 'via':61C 'whoever':147C 'worker':88C,150C 'write':46C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-20T18:20:39+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-18104","url":"https://osv.dev/vulnerability/MAL-2026-18104","severity":"critical","published_at":"2026-10-20T18:20:39+00:00","modified_at":"2026-10-22T23:45:03+00:00","first_seen_at":"2026-10-26T20:52:02+00:00","fetched_at":"2026-10-26T20:52:02+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}