{"id":"MAL-2026-16356","kind":"package","aliases":["MAL-2026-16356"],"related":[],"title":"Malicious code in starlette-healthchecks (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (eebffb3f581b979c3e9a1dc0aef347111b50922326b2181cc9d2bc009c4e7021)\nThe package advertises itself as ASGI healthcheck/logging middleware, but its documented entry point configure_logging() (re-exported from src/starlette_healthcheck/setup.py via __init__.py) spawns a background thread that POSTs host reconnaissance to a hardcoded Azure Container Apps subdomain ca-fusion-dev-collector.victorioussmoke-2f009910.uksouth.azurecontainerapps.io, which the caller does not configure. The beacon iterates the entire os.environ and sends each variable name as a log line, resolves the machine's public IP via checkip.amazonaws.com, and sends the hostname. Requests are authenticated with a hardcoded X-Api-Key value (\"fusion-default-api-key\") shipped in the source. The env-var name inventory alone discloses which CI providers, cloud credentials, and secret-manager integrations exist on the host, which is targeting reconnaissance rather than request logging. Placing the exfiltration code in a module named setup.py inside the package blends the beacon into build-tooling naming and does not match the package's advertised purpose.\n\n## Source: kam193 (13c2438df5dfe3675f8861c03c803a273747135af8a70fc916235ad64d6cd22f)\nThe package appears to be a typosquatting research attempt. It provides an extremely basic functionality for the user and the main purpose seems to be the telemetry call. Additionally, similar package starlette-healthcheck was recently removed.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-09-starlette-healthcheck\n\n\nReasons (based on the campaign):\n\n\n - action-hidden-in-lib-usage\n\n\n - typosquatting","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"starlette-healthchecks","fixed":[],"affected":"= 1.3.1; = 1.3.2","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-09-21T16:50:02+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":"'-09':236C '-16356':10A,13A '-2026':9A,12A '13c2438df5dfe3675f8861c03c803a273747135af8a70fc916235ad64d6cd22f':186C '2026':235C 'action':246C 'action-hidden-in-lib-usag':245C 'addit':215C 'advertis':35C,182C 'alon':131C 'amazon':30C 'amazon-inspector':29C 'api':113C,119C 'app':69C 'appear':189C 'asgi':38C 'attempt':195C 'authent':107C 'azur':67C 'background':58C 'base':241C 'basic':200C 'beacon':79C,169C 'blend':167C 'build':172C 'build-tool':171C 'ca-fusion-dev-collector.victorioussmoke-2f009910.uksouth.azurecontainerapps.io':71C 'call':214C 'caller':74C 'campaign':227C,234C,244C 'categori':224C 'checkip.amazonaws.com':100C 'ci':134C 'clear':229C 'cloud':136C 'code':2A,158C 'configur':46C,77C 'contain':68C 'credenti':137C 'default':118C 'detail':21C 'disclos':132C 'document':43C 'edit':24C 'eebffb3f581b979c3e9a1dc0aef347111b50922326b2181cc9d2bc009c4e7021':32C 'entir':82C 'entri':44C 'env':127C 'env-var':126C 'exfiltr':157C 'exist':143C 'export':50C 'extrem':199C 'function':201C 'fusion':117C 'fusion-default-api-key':116C 'hardcod':66C,110C 'healthcheck':6A,220C,239C 'healthcheck/logging':39C 'healthchecks':16A 'hidden':247C 'host':62C,146C 'hostnam':104C 'infosteal':233C 'init':54C 'insid':164C 'inspector':31C 'integr':142C 'intent':231C 'inventori':130C 'ip':98C 'iter':80C 'kam193':185C 'key':114C,120C 'lib':249C 'like':232C 'line':27C,92C 'log':47C,91C,154C 'machin':95C 'main':207C 'mal':8A,11A 'malici':1A,17B,225C,230C 'manag':141C 'match':178C 'middlewar':40C 'modul':161C 'name':88C,129C,162C,174C 'os.environ':83C 'packag':18B,34C,166C,180C,188C,217C 'per':19C 'place':155C 'point':45C 'post':61C 'provid':135C,197C 'public':97C 'purpos':183C,208C 'py':55C 'pypi':7A 'rather':151C 're':49C 're-export':48C 'reason':240C 'recent':222C 'reconnaiss':63C,150C 'remov':223C 'request':105C,153C 'research':194C 'resolv':93C 'secret':140C 'secret-manag':139C 'seem':209C 'send':85C,102C 'setup.py':163C 'ship':121C 'similar':216C 'sourc':20C,28C,124C,184C 'spawn':56C 'src/starlette_healthcheck/setup.py':52C 'starlett':5A,219C,238C 'starlette':15A 'starlette-healthcheck':4A,218C,237C 'starlette-healthchecks':14A 'subdomain':70C 'target':149C 'telemetri':213C 'thread':59C 'tool':173C 'typosquat':193C,251C 'usag':250C 'user':204C 'valu':115C 'var':128C 'variabl':87C 'via':53C,99C 'x':112C 'x-api-key':111C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-21T16:50:02+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-16356","url":"https://osv.dev/vulnerability/MAL-2026-16356","severity":"critical","published_at":"2026-09-21T16:50:02+00:00","modified_at":"2026-09-23T02:30:05+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"}