---
id: "CVE-2026-120859"
kind: "vulnerability"
aliases: ["CVE-2026-120859"]
title: "PyMoDAQ: crafted HDF5, dock or XML files run arbitrary Python code"
severity: "high"
cvss: 8.5
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["hdf5", "package", "pymodaq", "python", "scientific-instrumentation"]
not_affected_if: ["trusted-files-only", "versions-patched"]
published_at: "2026-11-05T18:17:05+00:00"
first_seen_at: "2026-11-05T18:40:09+00:00"
updated_at: "2026-11-05T18:40:25+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-120859", "first_seen_at": "2026-11-05T18:40:09+00:00"}]
exploit_sources: []
---

# PyMoDAQ: crafted HDF5, dock or XML files run arbitrary Python code

PyMoDAQ and its pymodaq_data, pymodaq_gui and pymodaq_utils packages unpickle or eval data taken from HDF5 attributes, HDF5 string nodes, .dock layout files and XML settings files. A user who opens a crafted file lets an attacker run arbitrary Python code on their machine.

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

## How to check

- Check the installed PyMoDAQ version with `pip show pymodaq` and the pymodaq_data, pymodaq_gui and pymodaq_utils versions with `pip show pymodaq_data pymodaq_gui pymodaq_utils`.
- Look for the packages in lab or instrument-control environments that open shared HDF5, .dock or XML files.

## Fix

- PyMoDAQ: move to `4.4.13` or later.
- pymodaq_data, pymodaq_gui and pymodaq_utils: move to `5.1.15` or later on the 5.1 line, `5.2.14` or later on the 5.2 line, and `5.3.10` or later on the 5.3 line.

## Timeline

- 2026-11-05T18:40:09+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-120859

## Documents

- [advisory] Vendor advisory: github.com https://github.com/PyMoDAQ/PyMoDAQ/security/advisories/GHSA-jw9g-5c9x-cf84
- [advisory] Third-party advisory: www.vulncheck.com https://www.vulncheck.com/advisories/pymodaq-before-5.3.10-arbitrary-code-execution-via-crafted-hdf5-dock-layout-and-xml-settings-files
- [fix] Patch: github.com https://github.com/PyMoDAQ/PyMoDAQ/commit/6c7fff74d82624c640bd79513f5b4675ea6d88da
- [fix] Patch: github.com https://github.com/PyMoDAQ/PyMoDAQ/commit/ae0042513eb979c84da690825902658c625718d1
- [fix] Release notes: github.com https://github.com/PyMoDAQ/PyMoDAQ/releases/tag/4.4.13
- [fix] Patch: github.com https://github.com/PyMoDAQ/PyMoDAQ/commit/041e8a22b3dbe3c986ec0ea3c6b46a22f5efe374
- [fix] Release notes: github.com https://github.com/PyMoDAQ/PyMoDAQ/releases/tag/5.2.14
- [fix] Release notes: github.com https://github.com/PyMoDAQ/PyMoDAQ/releases/tag/5.3.10
- [fix] Release notes: github.com https://github.com/PyMoDAQ/PyMoDAQ/releases/tag/5.1.15
- [fix] Patch: github.com https://github.com/PyMoDAQ/PyMoDAQ/commit/3bf9042a58f5d4870a2b45fe2c9423aafe6b9203

## From the sources

PyMoDAQ before 4.4.13, and pymodaq_data, pymodaq_gui, and pymodaq_utils before 5.1.15, 5.2.x before 5.2.14, and 5.3.x before 5.3.10, contain deserialization of untrusted data and eval injection vulnerabilities that allow attackers to execute arbitrary code by supplying crafted files that a user opens. Attackers can store pickled objects in HDF5 string nodes that StringARRAY.array_to_string() passes to pickle.loads() when the node is browsed or read, place Python expressions in HDF5 attributes that JsonConverter.json2object() evaluates, supply a .dock file that load_layout_state() unpickles from the Dashboard Load layout action, or embed Python expressions in XML settings files that elt_to_dict() and set_txt_from_elt() evaluate.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
