{"id":"MAL-2026-10681","kind":"package","aliases":["MAL-2026-10681"],"related":[],"title":"Malicious code in xyq-drama-skill (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (062ea591e5b995503deb15b174a37fc7af37cb5987a6c3d715d256fe0c3bfe10)\nsetup.py registers a custom install cmdclass that, on `pip install`, downloads an opaque binary from https://douyin-cloud.tos-cn-beijing.volces.com/obj/hosts/log-helper to ~/.log-helper, sets it executable, and spawns it detached via subprocess.Popen with start_new_session=True. There is no hash or signature verification, no version pinning, and the fetched binary is unrelated to the package's advertised purpose (a Chinese short-video drama script generator). The console_scripts entry `xyq-drama` provides a second execution trigger: ensure_helper() re-fetches the same URL to ~/.log-helper if absent, chmods it executable, and launches it (optionally under `setsid... -w`). The dropped file is named as a hidden dotfile (.log-helper) in $HOME and framed as a benign 'log helper', a naming choice that does not correspond to the package's declared functionality.\n\n## Source: kam193 (283e19b30723479c8d85b742514f7f6c4a4964a8b0e57ebb4239c3285c35188f)\nDuring installation and import, the package downloads and starts a malicious executable, which appears to be a COFFLoader beacon.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-07-xyq-drama-skill\n\n\nReasons (based on the campaign):\n\n\n - Downloads and executes a remote executable.\n\n\n - The package overrides the install command in setup.py to execute malicious code during installation.\n\n\n - malware","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"xyq-drama-skill","fixed":[],"affected":"= 0.1.0; = 0.2.0; = 0.3.0","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-07-15T14:29:25+00:00","first_seen_at":"2026-10-26T20:51:56+00:00","triaged_at":"2026-10-26T21:12:36+00:00","updated_at":"2026-10-26T21:12:36+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-07':202C '-10681':11A,14A '-2026':10A,13A '/.log-helper':54C,120C '/obj/hosts/log-helper':52C '062ea591e5b995503deb15b174a37fc7af37cb5987a6c3d715d256fe0c3bfe10':34C '2026':201C '283e19':169C 'absent':122C 'advertis':89C 'amazon':32C 'amazon-inspector':31C 'appear':184C 'b30723479c8d85b742514f7f6c4a4964a8b0e57ebb4239c3285c35188f':170C 'base':208C 'beacon':189C 'benign':151C 'binari':48C,82C 'campaign':193C,200C,211C 'categori':190C 'chines':92C 'chmod':123C 'choic':156C 'clear':195C 'cmdclass':40C 'code':2A,229C 'coffload':188C 'command':223C 'consol':100C 'correspond':160C 'custom':38C 'declar':165C 'detach':61C 'detail':23C 'dotfil':141C 'douyin-cloud.tos-cn-beijing.volces.com':51C 'douyin-cloud.tos-cn-beijing.volces.com/obj/hosts/log-helper':50C 'download':45C,177C,212C 'drama':6A,17A,96C,105C,205C 'drop':134C 'edit':26C 'ensur':111C 'entri':102C 'execut':57C,109C,125C,182C,214C,217C,227C 'fetch':81C,115C 'file':135C 'frame':148C 'function':166C 'generat':98C 'hash':72C 'helper':112C,144C,153C 'hidden':140C 'home':146C 'import':174C 'infosteal':199C 'inspector':33C 'instal':39C,44C,172C,222C,231C 'intent':197C 'kam193':168C 'launch':127C 'like':198C 'line':29C 'log':143C,152C 'log-help':142C 'mal':9A,12A 'malici':1A,19B,181C,191C,196C,228C 'malwar':232C 'name':137C,155C 'new':66C 'opaqu':47C 'option':129C 'overrid':220C 'packag':20B,87C,163C,176C,219C 'per':21C 'pin':78C 'pip':43C 'provid':106C 'purpos':90C 'pypi':8A 're':114C 're-fetch':113C 'reason':207C 'regist':36C 'remot':216C 'script':97C,101C 'second':108C 'session':67C 'set':55C 'setsid':131C 'setup.py':35C,225C 'short':94C 'short-video':93C 'signatur':74C 'skill':7A,18A,206C 'sourc':22C,30C,167C 'spawn':59C 'start':65C,179C 'subprocess.popen':63C 'trigger':110C 'true':68C 'unrel':84C 'url':118C 'verif':75C 'version':77C 'via':62C 'video':95C 'w':132C 'xyq':5A,16A,104C,204C 'xyq-drama':103C 'xyq-drama-skil':4A,203C 'xyq-drama-skill':15A","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-07-15T14:29:25+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-10681","url":"https://osv.dev/vulnerability/MAL-2026-10681","severity":"critical","published_at":"2026-07-15T14:29:25+00:00","modified_at":"2026-09-01T11:30:38+00:00","first_seen_at":"2026-10-26T20:51:56+00:00","fetched_at":"2026-10-26T20:51:56+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"}