{"id":"CVE-2026-31234","kind":"vulnerability","aliases":["CVE-2026-31234","GHSA-mf8f-x4r3-jm8c"],"related":[],"title":"Horovod contains an insecure deserialization vulnerability in its KVStore HTTP server component","description":"Horovod thru 0.28.1 contains an insecure deserialization vulnerability (CWE-502) in its KVStore HTTP server component. The KVStore server, used for distributed task coordination, lacks authentication and authorization controls, allowing any remote attacker to write arbitrary data via HTTP PUT requests. When a Horovod worker reads data from the KVStore (via HTTP GET), it deserializes the data using cloudpickle.loads() without verifying its source or integrity. An attacker can exploit this by sending a malicious pickle payload to the server before the legitimate data is written, causing the victim worker to deserialize and execute arbitrary code, leading to remote code execution.","summary":"Horovod's KVStore HTTP server accepts unauthenticated PUT requests, and workers later deserialize stored values with cloudpickle.loads(). An attacker can write a malicious pickle payload that runs arbitrary code on a worker.","severity":"critical","cvss":9.8,"epss":0.00687,"exploited":false,"exploited_at":null,"products":[{"name":"horovod","fixed":[],"affected":"<= 0.28.1","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["cwe-502","distributed-training","horovod","ml-infrastructure","package","python"],"not_affected_if":["isolated-network","no-kvstore-exposure"],"how_to_check":"- Run `pip show horovod` and confirm whether the installed version is `0.28.1` or older\n- Check whether the KVStore HTTP server port is reachable from untrusted networks, since the sources do not give a default port","fix":null,"status":"open","published_at":"2026-05-12T18:16:51+00:00","first_seen_at":"2026-10-27T16:30:45+00:00","triaged_at":"2026-10-27T16:31:49+00:00","updated_at":"2026-10-27T16:33:07+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-27T16:31:49Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"network","title":"Horovod: unauthenticated KVStore server lets remote attackers execute code","impact":"high","summary":"Horovod's KVStore HTTP server accepts unauthenticated PUT requests, and workers later deserialize stored values with cloudpickle.loads(). An attacker can write a malicious pickle payload that runs arbitrary code on a worker.","category":"package","nicknames":[],"who_cares":["python","horovod","distributed-training","ml-infrastructure"],"confidence":0.8,"needs_auth":"no","worst_case":"Attacker runs arbitrary code on training worker nodes via pickle payload.","analyst_note":"Find the patched Horovod version and the KVStore server's default bind address and port in the GHSA-mf8f-x4r3-jm8c advisory at https://github.com/advisories/GHSA-mf8f-x4r3-jm8c.","how_to_check":"- Run `pip show horovod` and confirm whether the installed version is `0.28.1` or older\n- Check whether the KVStore HTTP server port is reachable from untrusted networks, since the sources do not give a default port","needs_analyst":true,"not_affected_if":["isolated-network","no-kvstore-exposure"],"who_is_affected":"Teams running distributed Horovod training jobs at version `0.28.1` or older are exposed when the KVStore server is reachable by an attacker. The sources do not name a patched version. Deployments where the KVStore port is confined to an isolated network segment or a trusted cluster network carry much less risk.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"critical"},"cost_usd":0.000637,"input_tokens":3493,"output_tokens":576,"severity_before":"critical"},"analyst_status":"queued","analyst_note":"Find the patched Horovod version and the KVStore server's default bind address and port in the GHSA-mf8f-x4r3-jm8c advisory at https://github.com/advisories/GHSA-mf8f-x4r3-jm8c.","search":"'-2026':14A,22A '-31234':15A,23A '-502':26B,77C '0.28.1':70C 'accept':41B 'allow':97C 'arbitrari':63B,103C,161C 'attack':54B,100C,134C 'authent':93C 'author':95C 'caus':153C 'cloudpickle.loads':52B,126C 'code':64B,162C,166C 'compon':12A,83C 'contain':2A,71C 'control':96C 'coordin':91C 'cve':13A,21A 'cwe':25B,76C 'data':104C,114C,124C,150C 'deseri':5A,48B,74C,122C,158C 'distribut':28B,89C 'distributed-train':27B 'execut':160C,167C 'exploit':136C 'get':120C 'ghsa':17A 'ghsa-mf8f-x4r3-jm8c':16A 'horovod':1A,24A,30B,36B,68C,111C 'http':10A,39B,81C,106C,119C 'infrastructur':33B 'insecur':4A,73C 'integr':132C 'jm8c':20A 'kvstore':9A,38B,80C,85C,117C 'lack':92C 'later':47B 'lead':163C 'legitim':149C 'malici':58B,141C 'mf8f':18A 'ml':32B 'ml-infrastructur':31B 'packag':34B 'payload':60B,143C 'pickl':59B,142C 'put':43B,107C 'python':35B 'read':113C 'remot':99C,165C 'request':44B,108C 'run':62B 'send':139C 'server':11A,40B,82C,86C,146C 'sourc':130C 'store':49B 'task':90C 'thru':69C 'train':29B 'unauthent':42B 'use':87C,125C 'valu':50B 'verifi':128C 'via':105C,118C 'victim':155C 'vulner':6A,75C 'without':127C 'worker':46B,67B,112C,156C 'write':56B,102C 'written':152C 'x4r3':19A","nicknames":[],"mitigations":[],"who_affected":"Teams running distributed Horovod training jobs at version `0.28.1` or older are exposed when the KVStore server is reachable by an attacker. The sources do not name a patched version. Deployments where the KVStore port is confined to an isolated network segment or a trusted cluster network carry much less risk.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-05-12T18:16:51+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-mf8f-x4r3-jm8c","url":"https://github.com/advisories/GHSA-mf8f-x4r3-jm8c","severity":"critical","published_at":"2026-05-12T18:30:40+00:00","modified_at":"2026-10-27T16:28:27+00:00","first_seen_at":"2026-10-27T16:30:45+00:00","fetched_at":"2026-10-27T16:30:45+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-31234","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-31234","severity":null,"published_at":"2026-05-12T18:16:51+00:00","modified_at":"2026-10-19T22:10:00+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"}