{"id":"MAL-2026-17286","kind":"package","aliases":["MAL-2026-17286"],"related":[],"title":"Malicious code in queeuees (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (f793adc7f1d26294831307abed18a284d7834d8e4733a8b05d9863bf2d70c60d)\nQueeuees 0.0.1 ships two top-level packages, Queeuees and Queues, with byte-identical __init__.py files. Each __init__.py assembles a byte blob from concatenated hex/tuple/rotated-byte literals and decodes it through bit-rotation, XOR keystream, seeded Fisher-Yates, inverse S-box, and LCG XOR stages. The result is passed to builtins.exec at import time via getattr(__import__('builtins'), 'exec')(payload), where the strings 'builtins' and 'exec' are hidden as byte arrays XORed with 75. Execution is triggered by a descriptor __set_name__ hook that fires when the containing class is defined during module import, so `import Queeuees` or `import Queues` runs the decoded code. Identifiers use homoglyph-style names (_0I1IIO, _lIII1, _OI110l, _01I0) and cover-story labels ('Module signature database', 'Certificate fingerprint lookup table'), while the published metadata advertises the package as 'a very basic calculator'. The Queeuees name resembles the common word 'Queues' with duplicated vowels, and the identical payload under both names broadens the typo-catchment surface for the same import-time dropper.\n\n## Source: kam193 (1adc88dd9031dc991006afcf10242d1de3aa7994f6bcb4542faed95524d6ebe0)\nObfuscated code iterates over files in the system and adds a comment to every .py file found.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-09-queeuees\n\n\nReasons (based on the campaign):\n\n\n - obfuscation\n\n\n - modify-system-without-consent","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"queeuees","fixed":[],"affected":"= 0.0.1","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-09-29T20:42:09+00:00","first_seen_at":"2026-10-26T20:51:59+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':235C '-17286':8A,11A '-2026':7A,10A '0.0.1':30C '01i0':147C '0i1iio':144C '1adc88dd9031dc991006afcf10242d1de3aa7994f6bcb4542faed95524d6ebe0':205C '2026':234C '75':107C 'add':215C 'advertis':164C 'amazon':26C 'amazon-inspector':25C 'array':104C 'assembl':50C 'base':238C 'basic':170C 'bit':63C 'bit-rot':62C 'blob':53C 'box':74C 'broaden':190C 'builtin':91C,97C 'builtins.exec':84C 'byte':42C,52C,103C 'byte-ident':41C 'calcul':171C 'campaign':226C,233C,241C 'catchment':194C 'categori':223C 'certif':156C 'class':122C 'clear':228C 'code':2A,137C,207C 'comment':217C 'common':177C 'concaten':55C 'consent':247C 'contain':121C 'cover':150C 'cover-stori':149C 'databas':155C 'decod':59C,136C 'defin':124C 'descriptor':113C 'detail':17C 'dropper':202C 'duplic':181C 'edit':20C 'everi':219C 'exec':92C,99C 'execut':108C 'f793adc7f1d26294831307abed18a284d7834d8e4733a8b05d9863bf2d70c60d':28C 'file':46C,210C,221C 'fingerprint':157C 'fire':118C 'fisher':69C 'fisher-y':68C 'found':222C 'getattr':89C 'hex/tuple/rotated-byte':56C 'hidden':101C 'homoglyph':141C 'homoglyph-styl':140C 'hook':116C 'ident':43C,185C 'identifi':138C 'import':86C,90C,127C,129C,132C,200C 'import-tim':199C 'infosteal':232C 'init':44C,48C 'inspector':27C 'intent':230C 'invers':71C 'iter':208C 'kam193':204C 'keystream':66C 'label':152C 'lcg':76C 'level':35C 'liii1':145C 'like':231C 'line':23C 'liter':57C 'lookup':158C 'mal':6A,9A 'malici':1A,13B,224C,229C 'metadata':163C 'modifi':244C 'modify-system-without-cons':243C 'modul':126C,153C 'name':115C,143C,174C,189C 'obfusc':206C,242C 'oi110l':146C 'packag':14B,36C,166C 'pass':82C 'payload':93C,186C 'per':15C 'publish':162C 'py':45C,49C,220C 'pypi':5A 'queeuee':4A,29C,37C,130C,173C,236C 'queeuees':12A 'queue':39C,133C,179C 'reason':237C 'resembl':175C 'result':80C 'rotat':64C 'run':134C 's-box':72C 'seed':67C 'set':114C 'ship':31C 'signatur':154C 'sourc':16C,24C,203C 'stage':78C 'stori':151C 'string':96C 'style':142C 'surfac':195C 'system':213C,245C 'tabl':159C 'time':87C,201C 'top':34C 'top-level':33C 'trigger':110C 'two':32C 'typo':193C 'typo-catch':192C 'use':139C 'via':88C 'vowel':182C 'without':246C 'word':178C 'xor':65C,77C 'xore':105C 'yate':70C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-29T20:42:09+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-17286","url":"https://osv.dev/vulnerability/MAL-2026-17286","severity":"critical","published_at":"2026-09-29T20:42:09+00:00","modified_at":"2026-10-08T20:30:04+00:00","first_seen_at":"2026-10-26T20:51:59+00:00","fetched_at":"2026-10-26T20:51:59+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"}