{"id":"MAL-2026-18760","kind":"package","aliases":["MAL-2026-18760"],"related":[],"title":"Malicious code in expect-tests (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (f693b92cac909344a9cbab93f5f80ab6d820759af5042d323d90f10351d39d76)\nsetup.py and gcp_log_poc/__init__.py read the installer's hostname via platform.node() and encode it into a subdomain of testa213022.dssldrf.net, then invoke socket.getaddrinfo() to trigger DNS resolution to that domain's authoritative server. This causes the installer's hostname to be exfiltrated to a non-first-party DNS server both when pip builds/installs the package (setup.py) and whenever the installed module is imported. The destination domain is unrelated to any legitimate purpose declared by the package, the package name (`expect-tests`) and the imported module name (`gcp_log_poc`) do not match, and the behavior is undisclosed. The 99.99.99 version number and name-vs-module mismatch are consistent with a dependency-confusion / name-squat lure.","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"expect-tests","fixed":[],"affected":"= 99.99.99","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-11-08T09:39:19+00:00","first_seen_at":"2026-11-08T11:17:06+00:00","triaged_at":"2026-11-08T11:17:42+00:00","updated_at":"2026-11-08T11:22:57+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-18760':10A,13A '-2026':9A,12A '99.99.99':133C 'amazon':30C 'amazon-inspector':29C 'authorit':64C 'behavior':129C 'builds/installs':86C 'caus':67C 'code':2A 'confus':148C 'consist':143C 'declar':106C 'depend':147C 'dependency-confus':146C 'destin':98C 'detail':21C 'dns':58C,81C 'domain':62C,99C 'edit':24C 'encod':46C 'exfiltr':74C 'expect':5A,15A,114C 'expect-test':4A,113C 'expect-tests':14A 'f693b92cac909344a9cbab93f5f80ab6d820759af5042d323d90f10351d39d76':32C 'first':79C 'gcp':35C,121C 'hostnam':42C,71C 'import':96C,118C 'inspector':31C 'instal':40C,69C,93C 'invok':54C 'legitim':104C 'line':27C 'log':36C,122C 'lure':152C 'mal':8A,11A 'malici':1A,17B 'match':126C 'mismatch':141C 'modul':94C,119C,140C 'name':112C,120C,138C,150C 'name-squat':149C 'name-vs-modul':137C 'non':78C 'non-first-parti':77C 'number':135C 'packag':18B,88C,109C,111C 'parti':80C 'per':19C 'pip':85C 'platform.node':44C 'poc':123C 'poc/__init__.py':37C 'purpos':105C 'pypi':7A 'read':38C 'resolut':59C 'server':65C,82C 'setup.py':33C,89C 'socket.getaddrinfo':55C 'sourc':20C,28C 'squat':151C 'subdomain':50C 'test':6A,115C 'testa213022.dssldrf.net':52C 'tests':16A 'trigger':57C 'undisclos':131C 'unrel':101C 'version':134C 'via':43C 'vs':139C 'whenev':91C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":null,"audience":null,"plain_action":null,"pkeys":["expecttests"],"ptokens":["expect","tests"],"labels":["critical","malicious","package","pypi"],"campaign_type":null,"search_a":"'-18760':10A,13A '-2026':9A,12A 'code':2A 'expect':5A,15A 'expect-test':4A 'expect-tests':14A 'mal':8A,11A 'malici':1A 'pypi':7A 'test':6A 'tests':16A","search_b":"'malici':17B 'packag':18B","search_c":"'99.99.99':133C 'amazon':30C 'amazon-inspector':29C 'authorit':64C 'behavior':129C 'builds/installs':86C 'caus':67C 'confus':148C 'consist':143C 'declar':106C 'depend':147C 'dependency-confus':146C 'destin':98C 'detail':21C 'dns':58C,81C 'domain':62C,99C 'edit':24C 'encod':46C 'exfiltr':74C 'expect':114C 'expect-test':113C 'f693b92cac909344a9cbab93f5f80ab6d820759af5042d323d90f10351d39d76':32C 'first':79C 'gcp':35C,121C 'hostnam':42C,71C 'import':96C,118C 'inspector':31C 'instal':40C,69C,93C 'invok':54C 'legitim':104C 'line':27C 'log':36C,122C 'lure':152C 'match':126C 'mismatch':141C 'modul':94C,119C,140C 'name':112C,120C,138C,150C 'name-squat':149C 'name-vs-modul':137C 'non':78C 'non-first-parti':77C 'number':135C 'packag':88C,109C,111C 'parti':80C 'per':19C 'pip':85C 'platform.node':44C 'poc':123C 'poc/__init__.py':37C 'purpos':105C 'read':38C 'resolut':59C 'server':65C,82C 'setup.py':33C,89C 'socket.getaddrinfo':55C 'sourc':20C,28C 'squat':151C 'subdomain':50C 'test':115C 'testa213022.dssldrf.net':52C 'trigger':57C 'undisclos':131C 'unrel':101C 'version':134C 'via':43C 'vs':139C 'whenev':91C","cause_entry":null,"cause_path":null,"first_public_at":"2026-11-08T09:39:19+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-18760","url":"https://osv.dev/vulnerability/MAL-2026-18760","severity":"critical","published_at":"2026-11-08T09:39:19+00:00","modified_at":"2026-11-08T10:15:03+00:00","first_seen_at":"2026-11-08T11:17:06+00:00","fetched_at":"2026-11-08T11:17:06+00:00","note":null}],"documents":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}