{"id":"CVE-2026-25632","kind":"vulnerability","aliases":["CVE-2026-25632","GHSA-74vm-8frp-7w68"],"related":[],"title":"EPyT-Flow vulnerable to unsafe JSON deserialization (__type__)","description":"### Impact\nEPyT-Flow’s REST API parses attacker-controlled JSON request bodies using a custom deserializer (my_load_from_json) that supports a __type__ field. When __type__ is present, the deserializer dynamically imports an attacker-specified module/class and instantiates it with attacker-supplied arguments. This allows invoking dangerous classes such as subprocess.Popen, which can lead to OS command execution during JSON parsing. This also affects the loading of JSON files.\n\n### Patches\nEPyT-Flow  has been patched in 0.16.1 -- affects all versions <= 0.16.0\n\n### Workarounds\nDo not load any JSON from untrusted sources and do not expose the REST API.\n\n### Credits\nEPyT-Flow  thanks Jarrett Chan (@syphonetic) for detecting and reporting the bug.","summary":"EPyT-Flow's REST API and JSON file loader build objects from a __type__ field, importing an attacker-named class and passing attacker-supplied arguments. Sending a crafted JSON body can instantiate dangerous classes such as subprocess.Popen and run OS commands on the server.","severity":"critical","cvss":10.0,"epss":0.00807,"exploited":false,"exploited_at":null,"products":[{"name":"epyt-flow","fixed":["0.16.1"],"affected":"< 0.16.1","ecosystem":"pypi"},{"name":"waterfutures epyt-flow","fixed":["0.16.1"],"affected":"< 0.16.1","ecosystem":"vendor"}],"ecosystems":["pypi","vendor"],"tags":["cwe-502","epyt-flow","package","pypi","python","rest-api"],"not_affected_if":["no-rest-api-exposed","trusted-json-only","version-0.16.1-or-later"],"how_to_check":"- `pip show epyt-flow` to read the installed version; affected if below `0.16.1`\n- Check whether the REST API of EPyT-Flow is reachable from untrusted networks or whether the app loads JSON files from untrusted sources","fix":"- Upgrade the `epyt-flow` package to `0.16.1` or later\n- Until patched, do not load JSON from untrusted sources and do not expose the REST API","status":"open","published_at":"2026-02-04T20:34:28+00:00","first_seen_at":"2026-10-27T16:25:42+00:00","triaged_at":"2026-10-27T16:27:41+00:00","updated_at":"2026-10-27T16:33:07+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-27T16:27:41Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade the `epyt-flow` package to `0.16.1` or later\n- Until patched, do not load JSON from untrusted sources and do not expose the REST API","reach":"network","title":"EPyT-Flow: unsafe JSON deserialization lets a request run OS commands","impact":"high","summary":"EPyT-Flow's REST API and JSON file loader build objects from a __type__ field, importing an attacker-named class and passing attacker-supplied arguments. Sending a crafted JSON body can instantiate dangerous classes such as subprocess.Popen and run OS commands on the server.","category":"package","nicknames":[],"who_cares":["python","pypi","epyt-flow","rest-api"],"confidence":0.8,"needs_auth":"unknown","worst_case":"Attacker runs OS commands on the server via JSON input","analyst_note":"","how_to_check":"- `pip show epyt-flow` to read the installed version; affected if below `0.16.1`\n- Check whether the REST API of EPyT-Flow is reachable from untrusted networks or whether the app loads JSON files from untrusted sources","needs_analyst":false,"not_affected_if":["version-0.16.1-or-later","no-rest-api-exposed","trusted-json-only"],"who_is_affected":"Any deployment running EPyT-Flow version 0.16.0 or earlier that exposes its REST API or loads JSON files from sources it does not control is exposed. Teams using EPyT-Flow only locally with trusted inputs and no network-exposed API face much less risk, but should still upgrade.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"critical"},"cost_usd":0.000645,"input_tokens":3549,"output_tokens":581,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,19A '-25632':12A,20A '-502':29B '0.16.0':172C '0.16.1':168C '74vm':15A '7w68':17A '8frp':16A 'affect':154C,169C 'allow':135C 'also':153C 'api':38B,44B,92C,188C 'argument':66B,133C 'attack':58B,64B,95C,123C,131C 'attacker-control':94C 'attacker-nam':57B 'attacker-specifi':122C 'attacker-suppli':63B,130C 'bodi':71B,99C 'bug':202C 'build':49B 'chan':195C 'class':60B,75B,138C 'command':82B,147C 'control':96C 'craft':69B 'credit':189C 'custom':102C 'cve':10A,18A 'cwe':28B 'danger':74B,137C 'deseri':8A,103C,118C 'detect':198C 'dynam':119C 'epyt':2A,22A,26A,31B,40B,88C,162C,191C 'epyt-flow':1A,21A,25A,30B,39B,87C,161C,190C 'execut':148C 'expos':185C 'field':54B,112C 'file':47B,159C 'flow':3A,23A,27A,32B,41B,89C,163C,192C 'ghsa':14A 'ghsa-74vm-8frp-7w68':13A 'impact':86C 'import':55B,120C 'instanti':73B,127C 'invok':136C 'jarrett':194C 'json':7A,46B,70B,97C,107C,150C,158C,178C 'lead':144C 'load':105C,156C,176C 'loader':48B 'module/class':125C 'name':59B 'object':50B 'os':81B,146C 'packag':33B 'pars':93C,151C 'pass':62B 'patch':160C,166C 'present':116C 'pypi':34B 'python':35B 'report':200C 'request':98C 'rest':37B,43B,91C,187C 'rest-api':36B 'run':80B 'send':67B 'server':85B 'sourc':181C 'specifi':124C 'subprocess.popen':78B,141C 'suppli':65B,132C 'support':109C 'syphonet':196C 'thank':193C 'type':9A,53B,111C,114C 'unsaf':6A 'untrust':180C 'use':100C 'version':171C 'vulner':4A 'waterfutures':24A 'workaround':173C","nicknames":[],"mitigations":[],"who_affected":"Any deployment running EPyT-Flow version 0.16.0 or earlier that exposes its REST API or loads JSON files from sources it does not control is exposed. Teams using EPyT-Flow only locally with trusted inputs and no network-exposed API face much less risk, but should still upgrade.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-02-04T20:34:28+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-74vm-8frp-7w68","url":"https://github.com/advisories/GHSA-74vm-8frp-7w68","severity":"critical","published_at":"2026-02-04T20:34:28+00:00","modified_at":"2026-10-27T16:23:40+00:00","first_seen_at":"2026-10-27T16:25:42+00:00","fetched_at":"2026-10-27T16:25:42+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-25632","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-25632","severity":null,"published_at":"2026-02-06T21:16:18+00:00","modified_at":"2026-06-17T10:24:58+00:00","first_seen_at":"2026-10-27T16:33:07+00:00","fetched_at":"2026-10-27T16:33:07+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"}