{"id":"MAL-2026-15828","kind":"package","aliases":["MAL-2026-15828"],"related":[],"title":"Malicious code in env-validator-tool (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (dd6cff735ec80019a9009add49ea47ae4b34ec0c29c1e287511d765c24300964)\nThe package ships no source module (only egg-info metadata) despite declaring a console_script entrypoint 'env-validator=env_validator.cli:main' that references a non-existent env_validator/ directory. Its setup.py install_requires declares 'telemetry-helper' — an unpinned, generically-named PyPI dependency — with an inline author comment reading 'Legitimate dependency with payload'. Because the package itself contains no code, the sole effect of `pip install env-validator-tool` is resolving and installing whatever code is published under the 'telemetry-helper' name, which then executes on the installer's machine during install. The self-labeled 'payload' comment combined with the missing implementation, unpinned generic dependency name, and stub entrypoint indicates the package is a lure whose only purpose is to pull in the sibling drop package.\n\n## Source: kam193 (6154c04795237a4ea3c9a29df7ef65a739056eeb3f20a198890bab3eb416f9ff)\nIn this campaign, one package contains malicious code exfiltrating environment variables during import (telemetry-helper), and another one intentionally installs it as a dependency.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-09-telemetry-helper\n\n\nReasons (based on the campaign):\n\n\n - exfiltration-env-variables\n\n\n - The malicious code is intentionally included in a dependency of the package","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"env-validator-tool","fixed":[],"affected":"= 1.0.0; = 1.0.1; = 1.0.2","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-09-03T00:44:13+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":"'-09':207C '-15828':11A,14A '-2026':10A,13A '2026':206C '6154c04795237a4ea3c9a29df7ef65a739056eeb3f20a198890bab3eb416f9ff':169C 'amazon':32C 'amazon-inspector':31C 'anoth':187C 'author':84C 'base':212C 'campaign':172C,198C,205C,215C 'categori':195C 'clear':200C 'code':2A,97C,113C,177C,222C 'combin':138C 'comment':85C,137C 'consol':49C 'contain':95C,175C 'dd6cff735ec80019a9009add49ea47ae4b34ec0c29c1e287511d765c24300964':34C 'declar':47C,70C 'depend':80C,88C,145C,194C,228C 'despit':46C 'detail':23C 'directori':65C 'drop':165C 'edit':26C 'effect':100C 'egg':43C 'egg-info':42C 'entrypoint':51C,149C 'env':5A,16A,53C,63C,105C,218C 'env-valid':52C 'env-validator-tool':4A,15A,104C 'env_validator.cli':55C 'environ':179C 'execut':124C 'exfiltr':178C,217C 'exfiltration-env-vari':216C 'exist':62C 'generic':77C,144C 'generically-nam':76C 'helper':73C,120C,185C,210C 'implement':142C 'import':182C 'includ':225C 'indic':150C 'info':44C 'infosteal':204C 'inlin':83C 'inspector':33C 'instal':68C,103C,111C,127C,131C,190C 'intent':189C,202C,224C 'kam193':168C 'label':135C 'legitim':87C 'like':203C 'line':29C 'lure':155C 'machin':129C 'main':56C 'mal':9A,12A 'malici':1A,19B,176C,196C,201C,221C 'metadata':45C 'miss':141C 'modul':40C 'name':78C,121C,146C 'non':61C 'non-exist':60C 'one':173C,188C 'packag':20B,36C,93C,152C,166C,174C,231C 'payload':90C,136C 'per':21C 'pip':102C 'publish':115C 'pull':161C 'purpos':158C 'pypi':8A,79C 'read':86C 'reason':211C 'refer':58C 'requir':69C 'resolv':109C 'script':50C 'self':134C 'self-label':133C 'setup.py':67C 'ship':37C 'sibl':164C 'sole':99C 'sourc':22C,30C,39C,167C 'stub':148C 'telemetri':72C,119C,184C,209C 'telemetry-help':71C,118C,183C,208C 'tool':7A,18A,107C 'unpin':75C,143C 'valid':6A,54C,64C,106C 'validator':17A 'variabl':180C,219C 'whatev':112C 'whose':156C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-03T00:44:13+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-15828","url":"https://osv.dev/vulnerability/MAL-2026-15828","severity":"critical","published_at":"2026-09-03T00:44:13+00:00","modified_at":"2026-09-04T01:00:05+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"}