{"id":"CVE-2026-111170","aliases":["EUVD-2026-102297","GHSA-7vr2-8p3f-2p48","GHSA-cjg8-h5qc-hrjv","PYSEC-2026-2545"],"status":"published","title":"kedro-datasets 9.3.0 through 9.6.0 Path Traversal via MatplotlibDataset Plot Name","description":"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.","severity":{"version":"4.0","score":7.1,"vector":"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","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00389,"percentile":0.33471,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-22"],"published":"2026-04-06T17:55:14Z","modified":"2026-10-28T02:30:57Z","affected":[{"source":"osv","ecosystem":"PyPI","package":"kedro-datasets","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"9.3.0"}]}],"versions":["0.0.1","0.0.2","0.0.3","0.0.4","0.0.5","0.0.6","0.0.7","1.0.0","1.0.1","1.0.2","1.1.0","1.1.1","1.2.0","1.3.0","1.4.0","1.4.1","1.4.2","1.5.0","1.5.1","1.5.2","1.5.3","1.6.0","1.7.0","1.7.1","1.8.0","2.0.0","2.1.0","3.0.0","3.0.1","4.0.0","4.1.0","5.0.0","5.1.0","6.0.0","7.0.0","8.0.0","8.1.0","9.0.0","9.1.0","9.1.1","9.2.0"],"bundled":2},{"source":"osv","ecosystem":"PyPI","package":"kedro-datasets","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"9.3.0"}]}],"versions":["0.0.1","0.0.2","0.0.3","0.0.4","0.0.5","0.0.6","0.0.7","1.0.0","1.0.1","1.0.2","1.1.0","1.1.1","1.2.0","1.3.0","1.4.0","1.4.1","1.4.2","1.5.0","1.5.1","1.5.2","1.5.3","1.6.0","1.7.0","1.7.1","1.8.0","2.0.0","2.1.0","3.0.0","3.0.1","4.0.0","4.1.0","5.0.0","5.1.0","6.0.0","7.0.0","8.0.0","8.1.0","9.0.0","9.1.0","9.1.1","9.2.0"],"bundled":2}],"products":[{"vendor":"kedro-org","product":"kedro-datasets"}],"references":[{"url":"https://github.com/kedro-org/kedro-plugins/pull/1544","tags":["issue-tracking","technical-description","patch","fix"]},{"url":"https://github.com/kedro-org/kedro-plugins/blob/611ce7a20dcb0be655190afb9064468fa278b08c/kedro-datasets/kedro_datasets/matplotlib/matplotlib_dataset.py#L198-L201","tags":["technical-description","article"]},{"url":"https://github.com/kedro-org/kedro-plugins/blob/611ce7a20dcb0be655190afb9064468fa278b08c/kedro-datasets/kedro_datasets/_utils/security.py#L22","tags":["technical-description","article"]},{"url":"https://github.com/kedro-org/kedro-plugins/security/advisories/GHSA-cjg8-h5qc-hrjv","tags":["related","vendor-advisory","advisory","web"]},{"url":"https://github.com/kedro-org/kedro-plugins","tags":["product","package"]},{"url":"https://www.vulncheck.com/advisories/kedro-datasets-9.3.0-through-9.6.0-path-traversal-via-matplotlibdataset-plot-name","tags":["third-party-advisory","advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-111170","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-7vr2-8p3f-2p48"},{"url":"https://pypi.org","tags":["web"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/111xxx/CVE-2026-111170.json","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/35xxx/CVE-2026-35492.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-35492","tags":["advisory"]},{"url":"https://github.com/kedro-org/kedro/issues/5452","tags":["report","web"]},{"url":"https://github.com/kedro-org/kedro-plugins/pull/1346","tags":["fix","web"]},{"url":"https://github.com/kedro-org/kedro-plugins/commit/65115f76b872217317734b6bde8927170c98fc4b","tags":["web"]},{"url":"https://github.com/kedro-org/kedro-plugins/releases/tag/kedro-datasets-9.3.0","tags":["web"]},{"url":"https://pypi.org/project/kedro-datasets","tags":["package"]},{"url":"https://github.com/advisories/GHSA-cjg8-h5qc-hrjv","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-111170","title":"kedro-datasets 9.3.0 through 9.6.0 Path Traversal via MatplotlibDataset Plot Name","description":"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.","status":"published","published":"2026-10-15T18:57:55.295Z","modified":"2026-10-21T01:30:43.369Z","cvss":[{"version":"4.0","score":7.1,"vector":"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","level":"high","assessor":"cna"},{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:20:15.34316Z"}],"euvd":[{"id":"EUVD-2026-102297","description":"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.","status":"published","published":"2026-10-15T18:57:55Z","modified":"2026-10-21T01:30:43Z","cvss":[{"version":"4.0","score":7.1,"vector":"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","level":"high"}],"updated_at":"2026-11-02T16:59:40.989797Z"}],"ghsa":[{"id":"GHSA-7vr2-8p3f-2p48","title":"kedro-datasets from 9.3.0 through 9.6.0 contains a path traversal vulnerability in...","description":"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.","status":"published","published":"2026-10-15T21:36:09Z","modified":"2026-10-15T21:36:09Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N","level":"medium"},{"version":"4.0","score":7.1,"vector":"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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:13:49.297576Z"}],"nvd":[{"id":"CVE-2026-111170","description":"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.","status":"published","published":"2026-10-15T19:17:33.153Z","modified":"2026-10-21T02:17:04.873Z","cvss":[{"version":"4.0","score":7.1,"vector":"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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high","assessor":"secondary"},{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:12:59.751798Z"}],"osv":[{"id":"CVE-2026-111170","title":"kedro-datasets 9.3.0 through 9.6.0 Path Traversal via MatplotlibDataset Plot Name","description":"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.","status":"published","published":"2026-10-15T18:57:55.295Z","modified":"2026-10-28T02:30:26.591864132Z","cvss":[{"version":"4.0","score":7.1,"vector":"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","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:44:55.61515Z"},{"id":"CVE-2026-35492","title":"Kedro-Datasets has a path traversal vulnerability in PartitionedDataset allows arbitrary file write","description":"Kedro-Datasets is a Kendo plugin providing data connectors. Prior to 9.3.0, PartitionedDataset in kedro-datasets was vulnerable to path traversal. Partition IDs were concatenated directly with the dataset base path without validation. An attacker or malicious input containing .. components in a partition ID could cause files to be written outside the configured dataset directory, potentially overwriting arbitrary files on the filesystem. Users of PartitionedDataset with any storage backend (local filesystem, S3, GCS, etc.) are affected. This vulnerability is fixed in 9.3.0.","status":"published","published":"2026-04-07T15:03:45.893Z","modified":"2026-10-28T02:30:57.983803455Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N","level":"medium"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:45:02.673625Z"},{"id":"GHSA-cjg8-h5qc-hrjv","title":"kedro-datasets has a path traversal vulnerability in PartitionedDataset that allows arbitrary file write","description":"### Impact\n\nPartitionedDataset in kedro-datasets was vulnerable to path traversal. Partition IDs were concatenated directly with the dataset base path without validation. An attacker or malicious input containing .. components in a partition ID could cause files to be written outside the configured dataset directory, potentially overwriting arbitrary files on the filesystem.\nUsers of PartitionedDataset with any storage backend (local filesystem, S3, GCS, etc.) are affected.\n\n### Patches\nYes. The vulnerability has been patched in kedro-datasets version 9.3.0.\nUsers should upgrade to kedro-datasets \u003e= 9.3.0. The fix normalizes constructed paths using `posixpath.normpath` and validates that the resolved path remains within the dataset base directory before use, raising a `DatasetError` if the path escapes the base directory.\n\n### Workarounds\nUsers who cannot upgrade should validate partition IDs before passing them to PartitionedDataset, ensuring they do not contain `..` path components.\n\n### References\nFix: https://github.com/kedro-org/kedro-plugins/pull/1346\nReport: https://github.com/kedro-org/kedro/issues/5452","status":"published","published":"2026-04-06T17:55:14Z","modified":"2026-10-16T10:55:54.308430209Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N","level":"medium"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:46:45.28161Z"},{"id":"PYSEC-2026-2545","title":"kedro-datasets has a path traversal vulnerability in PartitionedDataset that allows arbitrary file write","description":"### Impact\n\nPartitionedDataset in kedro-datasets was vulnerable to path traversal. Partition IDs were concatenated directly with the dataset base path without validation. An attacker or malicious input containing .. components in a partition ID could cause files to be written outside the configured dataset directory, potentially overwriting arbitrary files on the filesystem.\nUsers of PartitionedDataset with any storage backend (local filesystem, S3, GCS, etc.) are affected.\n\n### Patches\nYes. The vulnerability has been patched in kedro-datasets version 9.3.0.\nUsers should upgrade to kedro-datasets \u003e= 9.3.0. The fix normalizes constructed paths using `posixpath.normpath` and validates that the resolved path remains within the dataset base directory before use, raising a `DatasetError` if the path escapes the base directory.\n\n### Workarounds\nUsers who cannot upgrade should validate partition IDs before passing them to PartitionedDataset, ensuring they do not contain `..` path components.\n\n### References\nFix: https://github.com/kedro-org/kedro-plugins/pull/1346\nReport: https://github.com/kedro-org/kedro/issues/5452","status":"published","published":"2026-07-13T14:36:48.722547Z","modified":"2026-10-16T10:55:54.308430209Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:55.961245Z"}]}}
