{"id":"MAL-2026-17197","kind":"package","aliases":["MAL-2026-17197"],"related":[],"title":"Malicious code in coinscan (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (021da2d8a1de0971203de68e083eeb30efc18b58ebc5b36ecde89eb03b02cf9e)\nsetup.py imports coinscan.telemetry and calls check() during install. check() fetches a JSON manifest from https://thisisafalsepositive.st/cdn/v2/coinscan/manifest.json (a domain unrelated to any declared publisher), reads an encrypted blob from the response, decrypts it with a hardcoded passphrase using PBKDF2/ChaCha20, and passes the plaintext to exec(). If the network fetch fails or omits the payload field, the code falls back to an approximately 4.4KB base64 blob shipped in coinscan/_payload.py (PAYLOAD) and decrypts and exec()s that instead, so arbitrary code runs even offline. Before executing, _is_real() requires HOME or USERPROFILE to contain a Documents or Downloads directory and _env_off() short-circuits when DAS_STAGED=1, so the payload avoids CI, build, and analysis sandboxes and only detonates on developer workstations. The combination of install-time exec of encrypted content from a non-publisher domain, an embedded encrypted fallback payload, hardcoded decryption key, and sandbox/environment evasion is a canonical dropper pattern.\n\n## Source: kam193 (d403e54ce25ec07ec9979ba880af4930ded34a3702e9829c69a8e67279c26d59)\nDuring installation, obfuscated code is used to fetch code hidden in an image containing a Python application with a native extension module. This module holds an obfuscated infostealer which collects sensitive data and exfiltrates them to a C2 server retrieved from transaction history in the Polygon blockchain.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-09-donutautosellsrc\n\n\nReasons (based on the campaign):\n\n\n - infostealer\n\n\n - Downloads and executes a remote executable.\n\n\n - obfuscation\n\n\n - malware\n\n\n - native-extension\n\n\n - steganography\n\n\n - c2-in-blockchain\n\n\n - The package contains code to detect if it is running in a sandbox environment.","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"coinscan","fixed":[],"affected":"= 0.1.0","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-09-27T09:37:17+00:00","first_seen_at":"2026-10-26T20:52:02+00:00","triaged_at":"2026-10-26T21:08:21+00:00","updated_at":"2026-10-26T21:08:21+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-09':246C '-17197':8A,11A '-2026':7A,10A '/cdn/v2/coinscan/manifest.json':45C '021da2d8a1de0971203de68e083eeb30efc18b58ebc5b36ecde89eb03b02cf9e':28C '1':136C '2026':245C '4.4':91C 'amazon':26C 'amazon-inspector':25C 'analysi':144C 'applic':203C 'approxim':90C 'arbitrari':107C 'avoid':140C 'back':87C 'base':249C 'base64':93C 'blob':56C,94C 'blockchain':233C,269C 'build':142C 'c2':224C,267C 'c2-in-blockchain':266C 'call':33C 'campaign':237C,244C,252C 'canon':181C 'categori':234C 'check':34C,37C 'ci':141C 'circuit':132C 'clear':239C 'code':2A,85C,108C,190C,195C,273C 'coinscan':4A,12A 'coinscan.telemetry':31C 'coinscan/_payload.py':97C 'collect':216C 'combin':153C 'contain':121C,200C,272C 'content':161C 'd403e54ce25ec07ec9979ba880af4930ded34a3702e9829c69a8e67279c26d59':186C 'das':134C 'data':218C 'declar':51C 'decrypt':60C,100C,174C 'detail':17C 'detect':275C 'deton':148C 'develop':150C 'directori':126C 'document':123C 'domain':47C,167C 'donutautosellsrc':247C 'download':125C,254C 'dropper':182C 'edit':20C 'embed':169C 'encrypt':55C,160C,170C 'env':128C 'environ':283C 'evas':178C 'even':110C 'exec':73C,102C,158C 'execut':113C,256C,259C 'exfiltr':220C 'extens':207C,264C 'fail':78C 'fall':86C 'fallback':171C 'fetch':38C,77C,194C 'field':83C 'hardcod':64C,173C 'hidden':196C 'histori':229C 'hold':211C 'home':117C 'imag':199C 'import':30C 'infosteal':214C,243C,253C 'inspector':27C 'instal':36C,156C,188C 'install-tim':155C 'instead':105C 'intent':241C 'json':40C 'kam193':185C 'kb':92C 'key':175C 'like':242C 'line':23C 'mal':6A,9A 'malici':1A,13B,235C,240C 'malwar':261C 'manifest':41C 'modul':208C,210C 'nativ':206C,263C 'native-extens':262C 'network':76C 'non':165C 'non-publish':164C 'obfusc':189C,213C,260C 'offlin':111C 'omit':80C 'packag':14B,271C 'pass':69C 'passphras':65C 'pattern':183C 'payload':82C,98C,139C,172C 'pbkdf2/chacha20':67C 'per':15C 'plaintext':71C 'polygon':232C 'publish':52C,166C 'pypi':5A 'python':202C 'read':53C 'real':115C 'reason':248C 'remot':258C 'requir':116C 'respons':59C 'retriev':226C 'run':109C,279C 'sandbox':145C,282C 'sandbox/environment':177C 'sensit':217C 'server':225C 'setup.py':29C 'ship':95C 'short':131C 'short-circuit':130C 'sourc':16C,24C,184C 'stage':135C 'steganographi':265C 'thisisafalsepositive.st':44C 'thisisafalsepositive.st/cdn/v2/coinscan/manifest.json':43C 'time':157C 'transact':228C 'unrel':48C 'use':66C,192C 'userprofil':119C 'workstat':151C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-27T09:37:17+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-17197","url":"https://osv.dev/vulnerability/MAL-2026-17197","severity":"critical","published_at":"2026-09-27T09:37:17+00:00","modified_at":"2026-10-25T23: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"}