Skip to main content

Kedro Datasets CVE-2026-111170

| EUVDEUVD-2026-102297 HIGH
Path Traversal (CWE-22)
2026-10-15 VulnCheck
7.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain control of pipeline input/plot names
  2. Delivery
    Supply absolute plot name to MatplotlibDataset.save()
  3. Exploit
    validate_sub_path strips slash, pathlib drops base
  4. Execution
    Figure written to attacker path
  5. Impact
    Overwrite arbitrary file on filesystem

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires the attacker to control the plot-name keys in the dictionary passed to MatplotlibDataset.save() (or analogously partition IDs in PartitionedDataset) and to supply an absolute path - POSIX ('/outside.png'), Windows drive ('C:\\outside.png', 'C:outside.png'), or UNC ('\\\\server\\share\\outside.png'). No special non-default configuration is needed: affected versions 9.3.0-9.6.0 are vulnerable out of the box because validate_sub_path() strips leading slashes and pathlib's join discards the base path. The practical limiting factor is that the attacker must be able to inject those plot names into the pipeline (via untrusted input data or catalog configuration), so this is not reachable by a wholly external, unauthenticated actor against a default Kedro install unless pipeline inputs are untrusted; write impact is also bounded to locations the Kedro process user can write.

Impact

This is a genuine but context-dependent integrity issue rather than a top-tier emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) scores 7.1 (High) and isolates the impact cleanly to integrity (VI:H, VC:N, VA:N) - consistent with an arbitrary file-write primitive that does not directly leak data or crash the service. No EPSS score and no SSVC decision data were provided, and the input shows KEV=NO and no POC flag, so by the precision rules this is 'no public exploit identified at time of analysis.' The PR:L requirement is the key risk-limiter: exploitation requires the attacker to control the plot-name keys passed into MatplotlibDataset.save(), which in a Kedro deployment means influence over pipeline inputs or catalog configuration rather than unauthenticated internet reach. A notable conflict exists in the source data: the linked GHSA-cjg8-h5qc-hrjv advisory describes a DIFFERENT sink (PartitionedDataset, fixed in 9.3.0), whereas this CVE concerns MatplotlibDataset in 9.3.0-9.6.0 fixed by PR #1544 - so the advisory corroborates a class of path-traversal bugs in this package but does not directly confirm this specific CVE's fixed version; verify the fixed release against PR #1544 and the project RELEASE.md. Overall: a real priority for anyone running untrusted inputs through these datasets, but not a mass-exploitation 'patch-tonight' event given the privilege prerequisite and absence of exploitation signals.

Exploit ScenarioDerived

An attacker who can influence the data or configuration feeding a Kedro pipeline supplies an absolute plot name such as '/etc/cron.d/evil' or 'C:\\outside.png' to a MatplotlibDataset. When save() runs, validate_sub_path() strips the leading slash while pathlib's join discards the base directory, so the figure is written to the attacker-chosen absolute location, overwriting arbitrary files the process can write. No public exploit code is identified, but the fix's regression tests demonstrate the exact malicious inputs.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 15, 2026

Absolute plot names passed to MatplotlibDataset.save() in kedro-datasets 9.3.0 through 9.6.0 let an authenticated user with the ability to influence plot-name keys write files outside the configured dataset directory, overwriting or creating files anywhere the Kedro process has write access. The flaw is rooted in validate_sub_path(), which strips leading slashes before validation, combined with pathlib join semantics that discard the base path whenever the supplied sub-path is absolute (POSIX '/outside.png', Windows 'C:\\outside.png', or UNC '\\\\server\\share\\outside.png'). Integrity impact is rated High (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N; CVSS 4.0 base 7.1), no public exploit code has been identified at time of analysis, and no CISA KEV entry exists; exploitability is gated by the attacker's ability to inject the plot-name keys (e.g., through untrusted input data or catalog configuration) and by the write permissions of the process running Kedro.

RemediationAI

Patch status is: upstream fix available (PR/commit); released patched version not independently confirmed. The vendor-supplied fix is kedro-plugins PR #1544 (https://github.com/kedro-org/kedro-plugins/pull/1544), which adds a PureWindowsPath anchor check in kedro_datasets/_utils/security.py so that absolute POSIX, Windows drive, and UNC plot names raise DatasetError instead of escaping the dataset root; because the reported affected range extends to 9.6.0, upgrade only to a kedro-datasets release that explicitly contains this change rather than assuming any version in the 9.3.0-9.6.0 range is safe, and verify the installed file no longer contains the '.lstrip("/")' normalization before relying on the fix. If upgrading immediately is not possible, validate every plot name and partition ID before it reaches the dataset class: reject values that are absolute (start with '/', contain a Windows drive pattern such as 'C:' or a UNC '\\\\server\\share' form) or contain '..' segments, and enforce a strict allowlist of expected relative names - the trade-off is that this duplicates the upstream logic and will break any pipeline that legitimately relies on absolute-looking keys, so audit catalogs first. As a boundary control, run the Kedro process as a dedicated least-privilege account or inside a container whose filesystem is read-only outside the designated dataset output directories, which caps the write primitive to the output tree at the cost of requiring volume-writable mounts for expected outputs; additionally treat plot names derived from raw input data as untrusted and sanitize them at ingestion. Review the advisory at https://github.com/kedro-org/kedro-plugins/security/advisories/GHSA-cjg8-h5qc-hrjv and the affected source at https://github.com/kedro-org/kedro-plugins/blob/611ce7a20dcb0be655190afb9064468fa278b08c/kedro-datasets/kedro_datasets/matplotlib/matplotlib_dataset.py#L198-L201 to confirm exposure.

Affected VersionsENISA

kedro-datasets 9.3.0 ≤9.6.0

Affected Packages

pypi kedro-datasets fix: 9.3.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

CWE-22 (Improper Limitation of a Pathname to a Restricted Directory) manifests here through a flawed sanitization routine in kedro_datasets/_utils/security.py, referenced in the advisory at line 22. In vulnerable versions, validate_sub_path() normalized the user-supplied sub-path with sub_path.replace('\\', '/').lstrip('/'), removing the leading separator before the traversal check - so an absolute path such as '/outside.png' passed validation as if it were the relative 'outside.png'. MatplotlibDataset.save() then built the destination with pathlib semantics (base / sub_path), and because pathlib's join operator returns the absolute right-hand operand and discards the base directory, the write landed outside the dataset root. The upstream fix (kedro-plugins PR #1544) removes the lstrip and instead rejects any sub-path whose PureWindowsPath anchor is non-empty, which catches POSIX separators, Windows drive letters with and without a colon separator, and UNC network shares; the diff also hardens the analogous PartitionedDataset partition-ID path and adds regression tests asserting that absolute plot names raise DatasetError and that no file is written to the targeted outside location. The same underlying construction-and-validation pattern affects multiple dataset backends (local filesystem, S3, GCS), since the check is applied before the storage layer resolves the key.

Know when Kedro Datasets gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 6.5 MEDIUM

Attacker must inject plot names into save(), implying some pipeline/catalog access (PR:L); low complexity, no UI; arbitrary file write yields integrity impact only (I:H), with no direct confidentiality or availability loss.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

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.

Technical POC Analysis

CWE-22 (Improper Limitation of a Pathname to a Restricted Directory / Path Traversal).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Kedro-datasets versions 9.3.0 through 9.6.0 are affected by a high-severity path traversal flaw that lets an authenticated user with control over plot-name keys write files outside the configured dataset directory. This can corrupt or overwrite critical files on any system running Kedro pipelines, undermining data integrity and potentially enabling broader system compromise. Leadership should act because the vulnerability is exploitable by any authenticated user who can influence plot names, and no public exploit identified at time of analysis.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 69% exploitable
Prevalence
Low
niche data-engineering pipeline library, limited production deployment footprint
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy