{"id":"MAL-2026-18328","kind":"package","aliases":["MAL-2026-18328"],"related":[],"title":"Malicious code in netweavex (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (3818fe7f3387637c23d6bc51d62f8fd64dc981c82167750cd3059eec73d2849c)\nnetweavex is a typosquat of the popular NetworkX library, reusing its public API, module layout, and README examples (including the `import netweavex as nx` idiom) under a lookalike name. On `import netweavex`, the top-level __init__.py loads netweavex.netweavex, whose module scope invokes exec() on a payload produced by reversing a string literal, base64-decoding it, and zlib-decompressing it (the decoded header is a valid zlib stream, `x\\xda...`). This causes attacker-controlled, opaque bytecode to run on the installer's host at import time. A graph library has no legitimate reason to layer reverse+base64+zlib obfuscation around an exec() sink; the combination of lookalike name, API cloning, and import-time execution of hidden code is the canonical PyPI typosquat dropper shape.\n\n## Source: kam193 (96ae0ec579e95e33c63930792ee782e6229f77547efac35c3894a7e05c8af2ca)\nClone of a legitimated package. During import package executes obfuscated code that downloads code from a GitHub repository. During analysis, the code was just a placeholder.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-10-netweavex\n\n\nReasons (based on the campaign):\n\n\n - clones-real-package\n\n\n - obfuscation\n\n\n - Downloads and executes a remote malicious script.\n\n\n - typosquatting","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"netweavex","fixed":[],"affected":"= 1.1.0; = 1.1.1; = 1.1.2","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-10-26T09:58:20+00:00","first_seen_at":"2026-10-26T20:52:03+00:00","triaged_at":"2026-10-26T20:53:36+00:00","updated_at":"2026-10-26T21:05:48+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-10':199C '-18328':8A,11A '-2026':7A,10A '2026':198C '3818fe7f3387637c23d6bc51d62f8fd64dc981c82167750cd3059eec73d2849c':28C '96ae0ec579e95e33c63930792ee782e6229f77547efac35c3894a7e05c8af2ca':160C 'amazon':26C 'amazon-inspector':25C 'analysi':180C 'api':41C,141C 'around':132C 'attack':105C 'attacker-control':104C 'base':202C 'base64':84C,129C 'base64-decoding':83C 'bytecod':108C 'campaign':190C,197C,205C 'canon':153C 'categori':187C 'caus':103C 'clear':192C 'clone':142C,161C,207C 'clones-real-packag':206C 'code':2A,150C,171C,174C,182C 'combin':137C 'control':106C 'decod':85C,93C 'decompress':90C 'detail':17C 'download':173C,211C 'dropper':156C 'edit':20C 'exampl':46C 'exec':73C,134C 'execut':147C,169C,213C 'github':177C 'graph':120C 'header':94C 'hidden':149C 'host':115C 'idiom':53C 'import':49C,59C,117C,145C,167C 'import-tim':144C 'includ':47C 'infosteal':196C 'init':65C 'inspector':27C 'instal':113C 'intent':194C 'invok':72C 'kam193':159C 'layer':127C 'layout':43C 'legitim':124C,164C 'level':64C 'librari':37C,121C 'like':195C 'line':23C 'liter':82C 'load':67C 'lookalik':56C,139C 'mal':6A,9A 'malici':1A,13B,188C,193C,216C 'modul':42C,70C 'name':57C,140C 'netweavex':4A,12A,29C,50C,60C,200C 'netweavex.netweavex':68C 'networkx':36C 'nx':52C 'obfusc':131C,170C,210C 'opaqu':107C 'packag':14B,165C,168C,209C 'payload':76C 'per':15C 'placehold':186C 'popular':35C 'produc':77C 'public':40C 'py':66C 'pypi':5A,154C 'readm':45C 'real':208C 'reason':125C,201C 'remot':215C 'repositori':178C 'reus':38C 'revers':79C,128C 'run':110C 'scope':71C 'script':217C 'shape':157C 'sink':135C 'sourc':16C,24C,158C 'stream':99C 'string':81C 'time':118C,146C 'top':63C 'top-level':62C 'typosquat':32C,155C,218C 'valid':97C 'whose':69C 'x':100C 'xda':101C 'zlib':89C,98C,130C 'zlib-decompress':88C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T09:58:20+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-18328","url":"https://osv.dev/vulnerability/MAL-2026-18328","severity":"critical","published_at":"2026-10-26T09:58:20+00:00","modified_at":"2026-10-26T19:00:41+00:00","first_seen_at":"2026-10-26T20:52:03+00:00","fetched_at":"2026-10-26T20:52:03+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"}