CVE-2026-111170: kedro-datasets: path traversal allows arbitrary file write

MEDIUM
Published October 15, 2026
CISO Take

kedro-datasets 9.3.0 through 9.6.0 has a path traversal flaw in MatplotlibDataset.save(). An attacker who controls a plot name can supply an absolute path and create or overwrite files anywhere the Kedro process can write. The CVSS is 6.5 (medium), with integrity impact only. The package has 2,668 downstream dependents and 11 other CVEs on record. There is no public exploit, no Nuclei template, no KEV listing, and no EPSS data, so mass exploitation is unlikely today. Exposure matters most where plot names come from untrusted input, such as parameterized or multi-tenant pipelines and shared ML platforms. Upgrade to a patched kedro-datasets release (see PR 1544 and GHSA-cjg8-h5qc-hrjv). Until then, validate plot names and run pipelines with minimal filesystem write permissions. The affected and patched version ranges are not given in the data, so confirm the fixed version in the vendor advisory.

Sources:NVDGitHub AdvisoryOpenSSFATLASVulnCheck

What is the risk?

Medium. The attack is network-reachable, low complexity, needs low privileges and no user interaction, and the impact is high integrity (arbitrary file create or overwrite) with no confidentiality or availability impact in the CVSS vector. Real risk depends on whether untrusted users can influence plot dict keys or names passed to MatplotlibDataset. In typical batch data-science pipelines the attacker is an authenticated or semi-trusted actor. Overwriting files such as cron entries, shell profiles, SSH authorized_keys, or Python modules could escalate to code execution depending on process privileges. No exploitation evidence (KEV, public PoC, scanner template) exists. EPSS is unavailable.

How does the attack unfold?

Initial Access
An attacker with low privileges influences the plot name passed to a Kedro pipeline that uses MatplotlibDataset.
AML.T0049
Exploitation
An absolute plot name passes validate_sub_path(), which strips the leading slash, and the pathlib join then discards the dataset base path.
AML.T0010.001
Impact
The process creates or overwrites arbitrary files it can write, which can corrupt artifacts or plant scripts for persistence.

What systems are affected?

PackageEcosystemVulnerable RangePatched
HF Datasetspip—No patch
22.1KOpenSSF 6.22.7K dependentsPushed 8d ago81% patched~23d to patchFull package profile →

Do you use HF Datasets? You're affected.

How severe is it?

CVSS 3.1
6.5 / 10
EPSS
0.4%
chance of exploitation in 30 days
Higher than 33% of all CVEs
Exploitation Status
No known exploitation
Sophistication
Trivial

What is the attack surface?

AVACPRUISCIA
AVNetwork
ACLow
PRLow
UINone
SUnchanged
CNone
IHigh
ANone

What should I do?

6 steps
  1. Upgrade kedro-datasets to the patched release referenced in kedro-plugins PR 1544 and GHSA-cjg8-h5qc-hrjv, and confirm the fixed version before rollout.

  2. Until patched, do not pass untrusted or user-controlled strings as plot names or dict keys to MatplotlibDataset. Reject names that are absolute or contain '..'.

  3. Run Kedro processes as least-privileged users, with read-only filesystems and restricted write mounts.

  4. Inventory usage with pip freeze or SBOM tooling for kedro-datasets 9.3.0 to 9.6.0.

  5. Detect unexpected file writes outside the dataset or artifact directories using file integrity monitoring and audit logs on pipeline hosts.

  6. Review recently modified files in sensitive locations (startup scripts, cron, SSH keys, Python site-packages).

What does CISA's SSVC say?

DecisionTrack
Exploitationnone
AutomatableNo
Technical Impactpartial

Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.

How is it classified?

Supply ChainCode ExecutionFrameworkTraining DataAML.T0010.001AML.T0049

Which compliance frameworks are affected?

This CVE is relevant to:

EU AI Act
Art. 15-Accuracy, robustness and cybersecurity
ISO 42001
A.7.4-Quality of data for AI systems
NIST AI RMF
MANAGE 2.3-Procedures to respond to and recover from unknown risks

Frequently Asked Questions

What is CVE-2026-111170?

kedro-datasets 9.3.0 through 9.6.0 has a path traversal flaw in MatplotlibDataset.save(). An attacker who controls a plot name can supply an absolute path and create or overwrite files anywhere the Kedro process can write. The CVSS is 6.5 (medium), with integrity impact only. The package has 2,668 downstream dependents and 11 other CVEs on record. There is no public exploit, no Nuclei template, no KEV listing, and no EPSS data, so mass exploitation is unlikely today. Exposure matters most where plot names come from untrusted input, such as parameterized or multi-tenant pipelines and shared ML platforms. Upgrade to a patched kedro-datasets release (see PR 1544 and GHSA-cjg8-h5qc-hrjv). Until then, validate plot names and run pipelines with minimal filesystem write permissions. The affected and patched version ranges are not given in the data, so confirm the fixed version in the vendor advisory.

Is CVE-2026-111170 actively exploited?

No confirmed active exploitation of CVE-2026-111170 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-111170?

1. Upgrade kedro-datasets to the patched release referenced in kedro-plugins PR 1544 and GHSA-cjg8-h5qc-hrjv, and confirm the fixed version before rollout. 2. Until patched, do not pass untrusted or user-controlled strings as plot names or dict keys to MatplotlibDataset. Reject names that are absolute or contain '..'. 3. Run Kedro processes as least-privileged users, with read-only filesystems and restricted write mounts. 4. Inventory usage with pip freeze or SBOM tooling for kedro-datasets 9.3.0 to 9.6.0. 5. Detect unexpected file writes outside the dataset or artifact directories using file integrity monitoring and audit logs on pipeline hosts. 6. Review recently modified files in sensitive locations (startup scripts, cron, SSH keys, Python site-packages).

What systems are affected by CVE-2026-111170?

This vulnerability affects the following AI/ML architecture patterns: training pipelines, ML data pipelines, experiment reporting, MLOps orchestration.

What is the CVSS score for CVE-2026-111170?

CVE-2026-111170 has a CVSS v3.1 base score of 6.5 (MEDIUM). The EPSS exploitation probability is 0.39%.

What is the AI security impact?

Affected AI Architectures

training pipelinesML data pipelinesexperiment reportingMLOps orchestration

MITRE ATLAS Techniques

AML.T0010.001AI Software
AML.T0049Exploit Public-Facing Application

Compliance Controls Affected

EU AI Act: Art. 15
ISO 42001: A.7.4
NIST AI RMF: MANAGE 2.3

What are the technical details?

Original Advisory

kedro-datasets from 9.3.0 through 9.6.0 contains a path traversal vulnerability in MatplotlibDataset.save() that allows attackers to write files outside the dataset directory by supplying absolute plot names. Because validate_sub_path() strips leading slashes while pathlib's join discards the base path, attackers can create or overwrite files anywhere the process can write.

Exploitation Scenario

An attacker with low-privilege access to an internal ML platform submits a pipeline parameter or config that sets a plot name such as '/home/mlsvc/.ssh/authorized_keys' or '/opt/pipeline/hooks.py'. When the Kedro node saves the matplotlib figure, validate_sub_path() strips the leading slash but the pathlib join discards the base path. The write then lands at the absolute location. The attacker overwrites a file the service account can write, such as a startup script or Python module, and gains persistence or code execution on the training host. The same technique can corrupt model artifacts or reports.

Weaknesses (CWE)

CWE-22 — Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'): The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.

  • [Implementation] Assume all input is malicious. Use an "accept known good" input validation strategy, i.e., use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does. When performing input validation, consider all potentially relevant properties, including length, type of input, the full range of acceptable values, missing or extra inputs, syntax, consistency across related fields, and conformance to business rules. As an example of business rule logic, "boat" may be syntactically valid because it only contains alphanumeric characters, but it is not valid if the input is only expected to contain colors such as "red" or "blue." Do not rely exclusively on looking for malicious or malformed inputs. This is likely to miss at least one undesirable input, especially if the code's environment changes. This can give attackers enough room to bypass the intended validation. However, denylis
  • [Architecture and Design] For any security checks that are performed on the client side, ensure that these checks are duplicated on the server side, in order to avoid CWE-602. Attackers can bypass the client-side checks by modifying values after the checks have been performed, or by changing the client to remove the client-side checks entirely. Then, these modified values would be submitted to the server.

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N

Timeline

Published
October 15, 2026
Last Modified
October 21, 2026
First Seen
October 16, 2026

Related Vulnerabilities