---
id: "CVE-2026-31234"
kind: "vulnerability"
aliases: ["CVE-2026-31234", "GHSA-mf8f-x4r3-jm8c"]
title: "Horovod contains an insecure deserialization vulnerability in its KVStore HTTP server component"
severity: "critical"
cvss: 9.8
epss: 0.00687
exploited: false
status: "open"
category: "package"
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"]
published_at: "2026-05-12T18:16:51+00:00"
first_seen_at: "2026-10-27T16:30:45+00:00"
updated_at: "2026-10-27T16:33:07+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-mf8f-x4r3-jm8c", "first_seen_at": "2026-10-27T16:30:45+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-31234", "first_seen_at": "2026-10-27T16:33:07+00:00"}]
---

# Horovod contains an insecure deserialization vulnerability in its KVStore HTTP server component

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.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- pypi:horovod affected <= 0.28.1 fixed ?

## How to check

- Run `pip show horovod` and confirm whether the installed version is `0.28.1` or older
- Check whether the KVStore HTTP server port is reachable from untrusted networks, since the sources do not give a default port

## Timeline

- 2026-10-27T16:30:45+00:00 ghsa https://github.com/advisories/GHSA-mf8f-x4r3-jm8c
- 2026-10-27T16:33:07+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-31234

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
