{"id":"CVE-2017-20189","aliases":["DEBIAN-CVE-2017-20189","EUVD-2024-0379","GHSA-jgxc-8mwq-9xqw","ROOT-APP-MAVEN-CVE-2017-20189","UBUNTU-CVE-2017-20189"],"status":"published","title":"Clojure classes can be used to craft a serialized object that runs arbitrary code on deserialization","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary","from":"nvd"},"epss":{"day":"2026-11-08","score":0.01332,"percentile":0.71288,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-502"],"published":"2024-01-22T00:00:00Z","modified":"2026-10-20T10:50:33Z","fixes":[{"ecosystem":"Maven","package":"org.clojure:clojure","fixed_in":["1.9.0"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:12","package":"clojure","fixed_in":["1.9.0-1"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"clojure","fixed_in":["1.9.0-1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"clojure","fixed_in":["1.9.0-1"],"sources":["osv"]},{"ecosystem":"Root:Maven","package":"io.root.org.clojure:clojure","fixed_in":["1.8.0-root.io.1","1.7.0-root.io.1","1.6.0-root.io.1","1.5.1-root.io.1","1.4.0-root.io.1","1.9.0-root.io.1"],"sources":["osv"]},{"ecosystem":"Root:Maven","package":"org.clojure:clojure","fixed_in":["1.8.0-aikido.1","1.7.0-aikido.1","1.6.0-aikido.1","1.5.1-aikido.1","1.4.0-aikido.1","1.9.0-aikido.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"Maven","package":"org.clojure:clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.9.0"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.9.0-1"}]}]},{"source":"osv","ecosystem":"Debian:13","package":"clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.9.0-1"}]}]},{"source":"osv","ecosystem":"Debian:14","package":"clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.9.0-1"}]}]},{"source":"osv","ecosystem":"Maven","package":"org.clojure:clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.9.0"}]}],"versions":["1.0.0","1.1.0","1.2.0","1.2.1","1.3.0","1.3.0-RC0","1.3.0-alpha5","1.3.0-alpha6","1.3.0-alpha7","1.3.0-alpha8","1.3.0-beta1","1.3.0-beta2","1.3.0-beta3","1.4.0","1.4.0-alpha1","1.4.0-alpha2","1.4.0-alpha3","1.4.0-alpha4","1.4.0-alpha5","1.4.0-beta1","1.4.0-beta2","1.4.0-beta3","1.4.0-beta4","1.4.0-beta5","1.4.0-beta6","1.4.0-beta7","1.5.0","1.5.0-RC1","1.5.0-RC14","1.5.0-RC15","1.5.0-RC16","1.5.0-RC17","1.5.0-RC2","1.5.0-RC3","1.5.0-RC4","1.5.0-RC5","1.5.0-RC6","1.5.0-alpha1","1.5.0-alpha2","1.5.0-alpha3","1.5.0-alpha4","1.5.0-alpha5","1.5.0-alpha6","1.5.0-alpha7","1.5.0-beta1","1.5.0-beta10","1.5.0-beta11","1.5.0-beta12","1.5.0-beta13","1.5.0-beta2","1.5.0-beta7","1.5.0-beta8","1.5.0-beta9","1.5.1","1.6.0","1.6.0-RC1","1.6.0-RC2","1.6.0-RC3","1.6.0-RC4","1.6.0-alpha1","1.6.0-alpha2","1.6.0-alpha3","1.6.0-beta1","1.6.0-beta2","1.7.0","1.7.0-RC1","1.7.0-RC2","1.7.0-alpha1","1.7.0-alpha2","1.7.0-alpha3","1.7.0-alpha4","1.7.0-alpha5","1.7.0-alpha6","1.7.0-beta1","1.7.0-beta2","1.7.0-beta3","1.8.0","1.8.0-RC1","1.8.0-RC2","1.8.0-RC3","1.8.0-RC4","1.8.0-RC5","1.8.0-alpha1","1.8.0-alpha2","1.8.0-alpha3","1.8.0-alpha4","1.8.0-alpha5","1.8.0-beta1","1.8.0-beta2","1.9.0-RC1","1.9.0-RC2","1.9.0-alpha1","1.9.0-alpha10","1.9.0-alpha11","1.9.0-alpha12","1.9.0-alpha13","1.9.0-alpha14","1.9.0-alpha15","1.9.0-alpha16","1.9.0-alpha17","1.9.0-alpha18","1.9.0-alpha19","1.9.0-alpha2","1.9.0-alpha20","1.9.0-alpha3","1.9.0-alpha4","1.9.0-alpha5","1.9.0-alpha6","1.9.0-alpha7","1.9.0-alpha8","1.9.0-alpha9","1.9.0-beta1","1.9.0-beta2","1.9.0-beta3","1.9.0-beta4"]},{"source":"osv","ecosystem":"Root:Maven","package":"io.root.org.clojure:clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.8.0-root.io.1"},{"fixed":"1.7.0-root.io.1"},{"fixed":"1.6.0-root.io.1"},{"fixed":"1.5.1-root.io.1"},{"fixed":"1.4.0-root.io.1"},{"fixed":"1.9.0-root.io.1"}]}]},{"source":"osv","ecosystem":"Root:Maven","package":"org.clojure:clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.8.0-aikido.1"},{"fixed":"1.7.0-aikido.1"},{"fixed":"1.6.0-aikido.1"},{"fixed":"1.5.1-aikido.1"},{"fixed":"1.4.0-aikido.1"},{"fixed":"1.9.0-aikido.1"}]}]},{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"clojure","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.8.0-3","1.9.0~alpha15-1","1.9.0~alpha15-2","1.9.0-2","1.9.0-6~18.04"]}],"products":[{"vendor":"clojure","product":"clojure"}],"references":[{"url":"https://hackmd.io/%40fe1w0/HyefvRQKp","tags":["x_transferred","Exploit","Third Party Advisory","evidence","web","report"]},{"url":"https://clojure.atlassian.net/browse/CLJ-2204","tags":["x_transferred","Exploit","Patch","Vendor Advisory","fix","web","report"]},{"url":"https://github.com/frohoff/ysoserial/pull/68/files","tags":["x_transferred","Patch","fix","web","report"]},{"url":"https://github.com/clojure/clojure/commit/271674c9b484d798484d134a5ac40a6df15d3ac3","tags":["x_transferred","Patch","fix","web"]},{"url":"https://security.snyk.io/vuln/SNYK-JAVA-ORGCLOJURE-5740378","tags":["x_transferred","Patch","Third Party Advisory","fix","web","report"]},{"url":"https://security.netapp.com/advisory/ntap-20241108-0002/","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2017-20189","tags":["advisory"]},{"url":"https://groups.google.com/d/msg/clojure/WaL3hHzsevI/7zHU-L7LBQAJ","tags":["web"]},{"url":"https://security.netapp.com/advisory/ntap-20241108-0002","tags":["web"]},{"url":"https://github.com/advisories/GHSA-jgxc-8mwq-9xqw"},{"url":"https://security-tracker.debian.org/tracker/CVE-2017-20189","tags":["advisory"]},{"url":"https://github.com/clojure/clojure","tags":["package"]},{"url":"https://ubuntu.com/security/CVE-2017-20189","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2017-20189","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2017-20189","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T00:00:00Z","modified":"2025-11-03T21:44:02.825Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"adp"}],"cwes":["CWE-502"],"updated_at":"2026-11-02T14:33:11.928814Z"}],"euvd":[{"id":"EUVD-2024-0379","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T00:00:00Z","modified":"2025-11-03T21:44:02Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T19:49:31.7352Z"}],"ghsa":[{"id":"GHSA-jgxc-8mwq-9xqw","title":"Clojure classes can be used to craft a serialized object that runs arbitrary code on deserialization","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T06:30:32Z","modified":"2025-11-04T00:30:44Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-502"],"updated_at":"2026-11-02T14:39:05.278442Z"}],"nvd":[{"id":"CVE-2017-20189","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T06:15:07.563Z","modified":"2026-06-17T01:15:22.077Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary"},{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"secondary"}],"cwes":["CWE-502"],"updated_at":"2026-11-02T14:04:21.492973Z"}],"osv":[{"id":"CVE-2017-20189","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T06:15:07.563Z","modified":"2026-10-20T10:50:33.43408592Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:44:05.486486Z"},{"id":"DEBIAN-CVE-2017-20189","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T06:15:07.563Z","modified":"2026-09-01T20:03:47.344847427Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:45:29.100767Z"},{"id":"GHSA-jgxc-8mwq-9xqw","title":"Clojure classes can be used to craft a serialized object that runs arbitrary code on deserialization","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T06:30:32Z","modified":"2025-11-04T01:00:11.651137Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-502"],"updated_at":"2026-11-02T15:46:50.336262Z"},{"id":"UBUNTU-CVE-2017-20189","description":"In Clojure before 1.9.0, classes can be used to construct a serialized object that executes arbitrary code upon deserialization. This is relevant if a server deserializes untrusted objects.","status":"published","published":"2024-01-22T06:15:00Z","modified":"2025-10-24T04:46:41Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"},{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:54:14.977781Z"},{"id":"ROOT-APP-MAVEN-CVE-2017-20189","title":"CVE-2017-20189 in io.root.org.clojure:clojure - Patched by Root","description":"Root has patched CVE-2017-20189 in the io.root.org.clojure:clojure package for Root:Maven. Multiple fixed versions available.","status":"published","published":"2026-06-25T12:42:14Z","modified":"2026-06-25T19:45:07.800720951Z","updated_at":"2026-11-02T15:53:26.76659Z"}]}}
