{"id":"CVE-2026-102739","kind":"vulnerability","aliases":["CVE-2026-102739"],"related":[],"title":"ESPectre: crafted NPZ dataset runs code when analysis tools load it","description":"ESPectre is a Wi-Fi motion sensing platform for ESP32. Prior to 3.0.0-rc1, Micro-ESPectre analysis tools, including tools/6_optimize_filter_params.py, tools/1_analyze_raw_data.py, and tools/10_train_ml_model.py, load NPZ datasets with NumPy pickle support enabled through micro-espectre/tools/csi_utils.py and a direct loader. A malicious dataset contributor or pull-request author can place an object-typed array in a .npz file under micro-espectre/data, causing pickle-controlled code to execute as the maintainer or developer when a documented analysis tool accesses the field. This issue is fixed in version 3.0.0-rc1.","summary":"ESPectre's Micro-ESPectre analysis tools load NPZ datasets with NumPy pickle support enabled, before version 3.0.0-rc1. A malicious dataset with an object-typed array can run attacker-chosen code as the developer who runs the tool.","severity":"high","cvss":7.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["esp32","espectre","micro-espectre","numpy","other","python"],"not_affected_if":["no-analysis-tools-run","only-trusted-datasets","version-3.0.0-rc1-or-later"],"how_to_check":"- Check the Micro-ESPectre version in use; affected releases are below `3.0.0-rc1`.\n- Look for `.npz` files under `micro-espectre/data` that contain object-typed arrays.\n- Review `tools/csi_utils.py` and the direct loader for NumPy calls that allow pickle loading.","fix":"- Move Micro-ESPectre to `3.0.0-rc1` or later.","status":"open","published_at":"2026-11-05T17:17:32+00:00","first_seen_at":"2026-11-05T17:40:02+00:00","triaged_at":"2026-11-05T17:42:24+00:00","updated_at":"2026-11-05T17:42:24+00:00","category":"other","confidence":0.8,"triage":{"at":"2026-11-05T17:42:24Z","model":"claude-haiku-5-5","output":{"fix":"- Move Micro-ESPectre to `3.0.0-rc1` or later.","reach":"internet","title":"ESPectre: crafted NPZ dataset runs code when analysis tools load it","impact":"high","summary":"ESPectre's Micro-ESPectre analysis tools load NPZ datasets with NumPy pickle support enabled, before version 3.0.0-rc1. A malicious dataset with an object-typed array can run attacker-chosen code as the developer who runs the tool.","audience":"developers","category":"other","nicknames":[],"who_cares":["espectre","micro-espectre","esp32","python","numpy"],"confidence":0.8,"fix_status":"available","needs_auth":"unknown","worst_case":"Attacker-controlled code runs as the developer running the analysis tool.","analyst_note":"","how_to_check":"- Check the Micro-ESPectre version in use; affected releases are below `3.0.0-rc1`.\n- Look for `.npz` files under `micro-espectre/data` that contain object-typed arrays.\n- Review `tools/csi_utils.py` and the direct loader for NumPy calls that allow pickle loading.","plain_action":"","needs_analyst":false,"not_affected_if":["version-3.0.0-rc1-or-later","no-analysis-tools-run","only-trusted-datasets"],"who_is_affected":"Anyone who runs the Micro-ESPectre analysis tools (such as 6_optimize_filter_params.py, 1_analyze_raw_data.py or 10_train_ml_model.py) on NPZ datasets from the repository, including datasets from pull requests or outside contributors. Teams that only flash ESP32 firmware or never run these analysis scripts on untrusted data can skip it.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"unknown"},"cost_usd":0.001082,"input_tokens":4402,"output_tokens":1283,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-102739':13A,16A '-2026':12A,15A '/data':132C '/tools/csi_utils.py':103C '3.0.0':42B,79C,159C 'access':150C 'analysi':8A,30B,84C,148C 'array':52B,123C 'attack':56B 'attacker-chosen':55B 'author':116C 'caus':133C 'chosen':57B 'code':6A,58B,137C 'contributor':111C 'control':136C 'craft':2A 'cve':11A,14A 'dataset':4A,34B,46B,93C,110C 'develop':61B,144C 'direct':106C 'document':147C 'enabl':39B,98C 'esp32':17B,76C 'espectr':1A,18B,21B,25B,29B,66C,83C,102C,131C 'execut':139C 'fi':71C 'field':152C 'file':127C 'fix':156C 'includ':86C 'issu':154C 'load':10A,32B,91C 'loader':107C 'maintain':142C 'malici':45B,109C 'micro':20B,28B,82C,101C,130C 'micro-espectr':19B,27B,81C,100C,129C 'motion':72C 'npz':3A,33B,92C,126C 'numpi':22B,36B,95C 'object':50B,121C 'object-typ':49B,120C 'pickl':37B,96C,135C 'pickle-control':134C 'place':118C 'platform':74C 'prior':77C 'pull':114C 'pull-request':113C 'python':24B 'rc1':43B,80C,160C 'request':115C 'run':5A,54B,63B 'sens':73C 'support':38B,97C 'tool':9A,31B,65B,85C,149C 'tools/10_train_ml_model.py':90C 'tools/1_analyze_raw_data.py':88C 'tools/6_optimize_filter_params.py':87C 'type':51B,122C 'version':41B,158C 'wi':70C 'wi-fi':69C","nicknames":[],"mitigations":[],"who_affected":"Anyone who runs the Micro-ESPectre analysis tools (such as 6_optimize_filter_params.py, 1_analyze_raw_data.py or 10_train_ml_model.py) on NPZ datasets from the repository, including datasets from pull requests or outside contributors. Teams that only flash ESP32 firmware or never run these analysis scripts on untrusted data can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["esp32","espectre","high","microespectre","numpy","other","python"],"campaign_type":null,"first_public_at":"2026-09-06T02:40:39+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-102739","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-102739","severity":null,"published_at":"2026-11-05T17:17:32+00:00","modified_at":"2026-11-05T17:17:32+00:00","first_seen_at":"2026-11-05T17:40:02+00:00","fetched_at":"2026-11-05T17:40:02+00:00","note":null}],"documents":[{"id":78077,"url":"https://github.com/francescopace/espectre/commit/adf495ceed41840497347f0196ba4a6968fc4ee1","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":78078,"url":"https://github.com/francescopace/espectre/releases/tag/3.0.0-rc1","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":78079,"url":"https://github.com/francescopace/espectre/security/advisories/GHSA-g96x-h6rg-cqq3","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-09-06T02:40:39+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}