{"id":"CVE-2026-59294","aliases":["CLSA-2026-1793463667","CLSA-2026-1793654179","EUVD-2026-67182","GHSA-2mrf-pjhv-x8h2"],"status":"published","title":"Arbitrary File Write via Path Traversal in ResourceCacheService","description":"ResourceCacheService.getCacheName() builds the on-disk filename by appending the URI fragment verbatim, without stripping path separators or .. sequences, and passes the result to new File(resourceParentFolder, newFileName) before writing the downloaded bytes there.\nSpring AI 2.0.0\nSpring AI 1.1.0 - 1.1.8\nSpring AI 1.0.9 and earlier","severity":{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.0036,"percentile":0.30064,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-22"],"published":"2026-08-27T17:57:52Z","modified":"2026-11-03T02:45:02Z","affected":[{"source":"osv","ecosystem":"TuxCare:Maven","package":"org.springframework.ai:spring-ai-model","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.9"},{"fixed":"1.0.9-tuxcare.1"}]}],"versions":["1.0.9"],"bundled":4},{"source":"osv","ecosystem":"TuxCare:Maven","package":"org.springframework.ai:spring-ai-pdf-document-reader","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.9"},{"fixed":"1.0.9-tuxcare.1"}]}],"versions":["1.0.9"],"bundled":4},{"source":"osv","ecosystem":"TuxCare:Maven","package":"org.springframework.ai:spring-ai-transformers","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.9"},{"fixed":"1.0.9-tuxcare.1"}]}],"versions":["1.0.9"],"bundled":4},{"source":"osv","ecosystem":"TuxCare:Maven","package":"org.springframework.ai:spring-ai-model","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.1.8"},{"fixed":"1.1.8-tuxcare.1"}]}],"versions":["1.1.8"],"bundled":4},{"source":"osv","ecosystem":"TuxCare:Maven","package":"org.springframework.ai:spring-ai-pdf-document-reader","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.1.8"},{"fixed":"1.1.8-tuxcare.1"}]}],"versions":["1.1.8"],"bundled":4},{"source":"osv","ecosystem":"TuxCare:Maven","package":"org.springframework.ai:spring-ai-transformers","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.1.8"},{"fixed":"1.1.8-tuxcare.1"}]}],"versions":["1.1.8"],"bundled":4}],"products":[{"vendor":"spring","product":"spring ai"},{"vendor":"vmware","product":"spring ai"},{"vendor":"vmware","product":"spring_ai"}],"references":[{"url":"https://spring.io/security/cve-2026-59294","tags":["Vendor Advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-59294","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-2mrf-pjhv-x8h2"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/59xxx/CVE-2026-59294.json","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-59294","title":"Arbitrary File Write via Path Traversal in ResourceCacheService","description":"ResourceCacheService.getCacheName() builds the on-disk filename by appending the URI fragment verbatim, without stripping path separators or .. sequences, and passes the result to new File(resourceParentFolder, newFileName) before writing the downloaded bytes there.\nSpring AI 2.0.0\nSpring AI 1.1.0 - 1.1.8\nSpring AI 1.0.9 and earlier","status":"published","published":"2026-08-27T17:57:52.047Z","modified":"2026-08-28T18:36:07.272Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L","level":"medium","assessor":"cna"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:19:58.560602Z"}],"euvd":[{"id":"EUVD-2026-67182","description":"ResourceCacheService.getCacheName() builds the on-disk filename by appending the URI fragment verbatim, without stripping path separators or .. sequences, and passes the result to new File(resourceParentFolder, newFileName) before writing the downloaded bytes there.\nSpring AI 2.0.0\nSpring AI 1.1.0 - 1.1.8\nSpring AI 1.0.9 and earlier","status":"published","published":"2026-08-27T17:57:52Z","modified":"2026-08-28T18:36:07Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L","level":"medium"}],"updated_at":"2026-11-02T18:01:22.342607Z"}],"ghsa":[{"id":"GHSA-2mrf-pjhv-x8h2","title":"ResourceCacheService.getCacheName() builds the on-disk filename by appending the URI fragment...","description":"ResourceCacheService.getCacheName() builds the on-disk filename by appending the URI fragment verbatim, without stripping path separators or .. sequences, and passes the result to new File(resourceParentFolder, newFileName) before writing the downloaded bytes there.\nSpring AI 2.0.0\nSpring AI 1.1.0 - 1.1.8\nSpring AI 1.0.9 and earlier","status":"published","published":"2026-08-27T21:31:43Z","modified":"2026-08-28T21:32:12Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L","level":"medium"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:11:08.705354Z"}],"nvd":[{"id":"CVE-2026-59294","description":"ResourceCacheService.getCacheName() builds the on-disk filename by appending the URI fragment verbatim, without stripping path separators or .. sequences, and passes the result to new File(resourceParentFolder, newFileName) before writing the downloaded bytes there.\nSpring AI 2.0.0\nSpring AI 1.1.0 - 1.1.8\nSpring AI 1.0.9 and earlier","status":"published","published":"2026-08-27T20:17:55.583Z","modified":"2026-08-31T23:24:18.26Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L","level":"medium","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":"primary"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:12:42.035353Z"}],"osv":[{"id":"CVE-2026-59294","title":"Arbitrary File Write via Path Traversal in ResourceCacheService","description":"ResourceCacheService.getCacheName() builds the on-disk filename by appending the URI fragment verbatim, without stripping path separators or .. sequences, and passes the result to new File(resourceParentFolder, newFileName) before writing the downloaded bytes there.\nSpring AI 2.0.0\nSpring AI 1.1.0 - 1.1.8\nSpring AI 1.0.9 and earlier","status":"published","published":"2026-08-27T17:57:52.047Z","modified":"2026-10-28T02:30:29.51036367Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L","level":"medium"}],"updated_at":"2026-11-02T15:45:12.496548Z"},{"id":"CLSA-2026-1793463667","title":"TuxCare security update for org.springframework.ai (4 CVEs)","description":"TuxCare rebuilt 3 org.springframework.ai packages to address 4 CVEs. Fixed in 1.0.9-tuxcare.1.","status":"published","published":"2026-10-31T17:21:08Z","modified":"2026-11-02T19:46:33.281908979Z","updated_at":"2026-11-02T20:28:42.34712Z"},{"id":"CLSA-2026-1793654179","title":"TuxCare security update for org.springframework.ai (4 CVEs)","description":"TuxCare rebuilt 3 org.springframework.ai packages to address 4 CVEs. Fixed in 1.1.8-tuxcare.1.","status":"published","published":"2026-11-02T22:16:19Z","modified":"2026-11-03T02:45:02.358314545Z","updated_at":"2026-11-03T03:05:43.703218Z"}]}}
