{"id":"MAL-2026-375","kind":"package","aliases":["MAL-2026-375"],"related":[],"title":"Malicious code in spellcheckerpy (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: kam193 (79cc4c6495567fe7659e9e4bb5964727bf95cfc9f78d32209937d73457bd476b)\nPackages contain hidden code that is effectively run during importing or using the library, and downloads second stage code. Then, a process running in background periodically connects to a remote host and waits for the next code to execute.\n\nThe malicious code was in version 1.3.0, but the package itself was clearly uploaded with malclious intentions.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2025-11-spellcheckers\n\n\nReasons (based on the campaign):\n\n\n - obfuscation\n\n\n - Downloads and executes a remote malicious script.\n\n\n - The package contains code to execute remote commands (probably limited to a specific set) on the victim's machine.","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"spellcheckerpy","fixed":[],"affected":"= 1.0.0; = 1.1.0; = 1.3.0","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-01-20T19:06:25+00:00","first_seen_at":"2026-10-30T10:28:29+00:00","triaged_at":"2026-10-30T10:28:57+00:00","updated_at":"2026-10-30T10:28:57+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-11':95C '-2026':7A,10A '-375':8A,11A '1.3.0':72C '2025':94C '79cc4c6495567fe7659e9e4bb5964727bf95cfc9f78d32209937d73457bd476b':26C 'background':51C 'base':98C 'campaign':86C,93C,101C 'categori':83C 'clear':78C,88C 'code':2A,30C,45C,63C,68C,113C 'command':117C 'connect':53C 'contain':28C,112C 'detail':17C 'download':42C,103C 'edit':20C 'effect':33C 'execut':65C,105C,115C 'hidden':29C 'host':57C 'import':36C 'infosteal':92C 'intent':82C,90C 'kam193':25C 'librari':40C 'like':91C 'limit':119C 'line':23C 'machin':128C 'mal':6A,9A 'malclious':81C 'malici':1A,13B,67C,84C,89C,108C 'next':62C 'obfusc':102C 'packag':14B,27C,75C,111C 'per':15C 'period':52C 'probabl':118C 'process':48C 'pypi':5A 'reason':97C 'remot':56C,107C,116C 'run':34C,49C 'script':109C 'second':43C 'set':123C 'sourc':16C,24C 'specif':122C 'spellcheck':96C 'spellcheckerpi':4A 'spellcheckerpy':12A 'stage':44C 'upload':79C 'use':38C 'version':71C 'victim':126C 'wait':59C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"fix_status":null,"audience":null,"plain_action":null,"first_public_at":"2026-01-20T19:06:25+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-375","url":"https://osv.dev/vulnerability/MAL-2026-375","severity":"critical","published_at":"2026-01-20T19:06:25+00:00","modified_at":"2026-10-30T09:45:05+00:00","first_seen_at":"2026-10-30T10:28:29+00:00","fetched_at":"2026-10-30T10:28:29+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"}