{"id":"MAL-2026-16121","kind":"package","aliases":["MAL-2026-16121"],"related":[],"title":"Malicious code in websetup (PyPI)","description":"websetup@0.1.0 is a single module whose only function, setup.set(text=None, file_path=None) in websetup/sender.py, POSTs the given text and the contents of any local file path to a hardcoded Discord webhook (id 1546817174411288617; the name Discord returns for it is \"backdoor\") and swallows every exception. Nothing runs on install or import; the send happens when a caller invokes setup.set(). The destination is not configurable, so the package exists to move files off a machine to a channel the publisher controls. The Discord URL is listed under urls only.\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (e57a4e728de92fb3c7d7693551dec707f4b4c3a92bc1c9eff30eab0f92ac2d93)\nThe package exposes a single public API, websetup.setup.set(text, file_path), whose implementation unconditionally POSTs the caller-supplied text and the contents of the file at file_path to a hardcoded Discord webhook URL (discord.com/api/webhooks/1546817174411288617/...). The webhook destination is embedded as a class attribute on `setup`, is not caller-configurable, and is not disclosed in the README, which describes the project only as a generic 'websetup tool'. Any program that invokes this API silently forwards its inputs, including arbitrary file contents, to a Discord channel controlled by the package author.","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"websetup","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-09T14:00:00+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":"'-16121':8A,11A '-2026':7A,10A '/api/webhooks/1546817174411288617/...).':157C '0.1.0':16C '1546817174411288617':50C 'amazon':117C 'amazon-inspector':116C 'api':126C,196C 'arbitrari':202C 'attribut':166C 'author':213C 'backdoor':58C 'caller':74C,137C,172C 'caller-configur':171C 'caller-suppli':136C 'channel':94C,208C 'class':165C 'code':2A 'configur':81C,173C 'content':38C,142C,204C 'control':97C,209C 'describ':182C 'destin':78C,160C 'detail':108C 'disclos':177C 'discord':47C,53C,99C,152C,207C 'discord.com':156C 'discord.com/api/webhooks/1546817174411288617/...).':155C 'e57a4e728de92fb3c7d7693551dec707f4b4c3a92bc1c9eff30eab0f92ac2d93':119C 'edit':111C 'embed':162C 'everi':61C 'except':62C 'exist':85C 'expos':122C 'file':27C,42C,88C,129C,145C,147C,203C 'forward':198C 'function':23C 'generic':188C 'given':34C 'happen':71C 'hardcod':46C,151C 'id':49C 'implement':132C 'import':68C 'includ':201C 'input':200C 'inspector':118C 'instal':66C 'invok':75C,194C 'line':114C 'list':102C 'local':41C 'machin':91C 'mal':6A,9A 'malici':1A,13B 'modul':20C 'move':87C 'name':52C 'none':26C,29C 'noth':63C 'packag':14B,84C,121C,212C 'path':28C,43C,130C,148C 'per':106C 'post':32C,134C 'program':192C 'project':184C 'public':125C 'publish':96C 'pypi':5A 'readm':180C 'return':54C 'run':64C 'send':70C 'setup':168C 'setup.set':24C,76C 'silent':197C 'singl':19C,124C 'sourc':107C,115C 'suppli':138C 'swallow':60C 'text':25C,35C,128C,139C 'tool':190C 'uncondit':133C 'url':100C,104C,154C 'webhook':48C,153C,159C 'websetup':4A,12A,15C,189C 'websetup.setup.set':127C 'websetup/sender.py':31C 'whose':21C,131C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-09T14:00:00+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-16121","url":"https://osv.dev/vulnerability/MAL-2026-16121","severity":"critical","published_at":"2026-09-09T14:00:00+00:00","modified_at":"2026-09-10T18:30:36+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"}