{"id":"MAL-2026-16128","kind":"package","aliases":["MAL-2026-16128"],"related":[],"title":"Malicious code in pymem-win (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (4c611131ac135f4608698ce56eebd7dc89623b591510a050f2059369c9d51bbf)\nPymem-win is a near-verbatim copy of the legitimate upstream Pymem package (reusing its description, repository URL github.com/srounet/Pymem, and author identity Fabien Reboia <srounet@gmail.com>) republished under a confusable name. The top-level pymem/__init__.py contains a one-line loader that reverses a bytes literal, base64-decodes it, zlib-decompresses it, and passes the result to exec(). This runs unconditionally on `import pymem`, handing full in-process code execution to a payload deliberately hidden behind three stacked transforms. The multi-layer obfuscation around an exec target has no legitimate purpose in a library import path; combined with the typosquat cover story that reuses the upstream author's identity, the package's function on install/import is to run attacker-chosen code inside any process that imports it.\n\n## Source: kam193 (82eb1f11c9b56a2f2c3e97530db43ef94784a2c75697223828403927b0528477)\nDuring import, the obfuscated code downloads and executes an executable. The remote executable did not exist during analysis, but the repository used to host it overlaps with previous campaign 2026-07-yt-api-dlp\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-09-pymem-win\n\n\nReasons (based on the campaign):\n\n\n - obfuscation\n\n\n - Downloads and executes a remote executable.\n\n\n - clones-real-package","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"pymem-win","fixed":[],"affected":"= 1.14.0; = 1.14.1; = 1.14.4; = 1.14.5; = 1.14.6","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-09-11T14:47:19+00:00","first_seen_at":"2026-10-26T20:51:57+00:00","triaged_at":"2026-10-26T21:10:31+00:00","updated_at":"2026-10-26T21:10:31+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-07':202C '-09':219C '-16128':10A,13A '-2026':9A,12A '/srounet/pymem,':55C '2026':201C,218C '4c611131ac135f4608698ce56eebd7dc89623b591510a050f2059369c9d51bbf':32C '82eb1f11c9b56a2f2c3e97530db43ef94784a2c75697223828403927b0528477':171C 'amazon':30C 'amazon-inspector':29C 'analysi':189C 'api':205C 'around':124C 'attack':160C 'attacker-chosen':159C 'author':57C,147C 'base':224C 'base64':84C 'base64-decodes':83C 'behind':115C 'byte':81C 'campaign':200C,210C,217C,227C 'categori':207C 'chosen':161C 'clear':212C 'clone':236C 'clones-real-packag':235C 'code':2A,108C,162C,176C 'combin':137C 'confus':65C 'contain':72C 'copi':41C 'cover':141C 'decod':85C 'decompress':89C 'deliber':113C 'descript':50C 'detail':21C 'dlp':206C 'download':177C,229C 'edit':24C 'exec':96C,126C 'execut':109C,179C,181C,184C,231C,234C 'exist':187C 'fabien':59C 'full':104C 'function':153C 'github.com':54C 'github.com/srounet/pymem,':53C 'hand':103C 'hidden':114C 'host':195C 'ident':58C,149C 'import':101C,135C,167C,173C 'in-process':105C 'infosteal':216C 'insid':163C 'inspector':31C 'install/import':155C 'intent':214C 'kam193':170C 'layer':122C 'legitim':44C,130C 'level':70C 'librari':134C 'like':215C 'line':27C,76C 'liter':82C 'loader':77C 'mal':8A,11A 'malici':1A,17B,208C,213C 'multi':121C 'multi-lay':120C 'name':66C 'near':39C 'near-verbatim':38C 'obfusc':123C,175C,228C 'one':75C 'one-lin':74C 'overlap':197C 'packag':18B,47C,151C,238C 'pass':92C 'path':136C 'payload':112C 'per':19C 'previous':199C 'process':107C,165C 'purpos':131C 'pymem':5A,15A,34C,46C,102C,221C 'pymem-win':4A,14A,33C,220C 'pymem/__init__.py':71C 'pypi':7A 'real':237C 'reason':223C 'reboia':60C 'remot':183C,233C 'repositori':51C,192C 'republish':62C 'result':94C 'reus':48C,144C 'revers':79C 'run':98C,158C 'sourc':20C,28C,169C 'srounet@gmail.com':61C 'stack':117C 'stori':142C 'target':127C 'three':116C 'top':69C 'top-level':68C 'transform':118C 'typosquat':140C 'uncondit':99C 'upstream':45C,146C 'url':52C 'use':193C 'verbatim':40C 'win':6A,16A,35C,222C 'yt':204C 'yt-api-dlp':203C 'zlib':88C 'zlib-decompress':87C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-11T14:47:19+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-16128","url":"https://osv.dev/vulnerability/MAL-2026-16128","severity":"critical","published_at":"2026-09-11T14:47:19+00:00","modified_at":"2026-09-11T23:30:06+00:00","first_seen_at":"2026-10-26T20:51:57+00:00","fetched_at":"2026-10-26T20:51:57+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"}