{"id":"CVE-2020-13092","aliases":["DEBIAN-CVE-2020-13092","EUVD-2020-0179","GHSA-jjw5-xxj6-pcv5","PYSEC-2020-107"],"status":"disputed","title":"scikit-learn Deserialization of Untrusted Data","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner","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-12","score":0.03472,"percentile":0.89247,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-502"],"published":"2020-05-15T18:41:33Z","modified":"2026-10-26T12:02:25Z","fixes":[{"ecosystem":"PyPI","package":"scikit-learn","fixed_in":["0.23.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"scikit-learn","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.23.0"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"scikit-learn","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.2.1+dfsg-1","1.4.1.post1+dfsg-1","1.4.2+dfsg-1","1.4.2+dfsg-2","1.4.2+dfsg-3","1.4.2+dfsg-4","1.4.2+dfsg-5","1.4.2+dfsg-6","1.4.2+dfsg-7","1.4.2+dfsg-8","1.7.2+dfsg-1","1.7.2+dfsg-2","1.7.2+dfsg-3","1.7.2+dfsg-4","1.8.0+dfsg-1","1.8.0+dfsg-2","1.8.0+dfsg-3","1.8.0+dfsg-4","1.8.0+dfsg-5","1.9.0+dfsg-1","1.9.0+dfsg-2"]},{"source":"osv","ecosystem":"Debian:13","package":"scikit-learn","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.4.2+dfsg-8","1.7.2+dfsg-1","1.7.2+dfsg-2","1.7.2+dfsg-3","1.7.2+dfsg-4","1.8.0+dfsg-1","1.8.0+dfsg-2","1.8.0+dfsg-3","1.8.0+dfsg-4","1.8.0+dfsg-5","1.9.0+dfsg-1","1.9.0+dfsg-2"]},{"source":"osv","ecosystem":"Debian:14","package":"scikit-learn","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.4.2+dfsg-8","1.7.2+dfsg-1","1.7.2+dfsg-2","1.7.2+dfsg-3","1.7.2+dfsg-4","1.8.0+dfsg-1","1.8.0+dfsg-2","1.8.0+dfsg-3","1.8.0+dfsg-4","1.8.0+dfsg-5","1.9.0+dfsg-1","1.9.0+dfsg-2"]},{"source":"osv","ecosystem":"PyPI","package":"scikit-learn","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.23.0"}]}],"versions":["0.10","0.11","0.12","0.12.1","0.13","0.13.1","0.14","0.14.1","0.15.0","0.15.1","0.15.2","0.16.0","0.16.1","0.17","0.17.1","0.18","0.18.1","0.18.2","0.19.0","0.19.1","0.19.2","0.20.0","0.20.1","0.20.2","0.20.3","0.20.4","0.21.0","0.21.1","0.21.2","0.21.3","0.22","0.22.1","0.22.2","0.22.2.post1","0.23.0","0.9"]},{"source":"osv","ecosystem":"PyPI","package":"scikit-learn","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.23.1"}]}],"versions":["0.10","0.11","0.12","0.12.1","0.13","0.13.1","0.14","0.14.1","0.14a1","0.15.0","0.15.0b1","0.15.0b2","0.15.1","0.15.2","0.16.0","0.16.1","0.16b1","0.17","0.17.1","0.17b1","0.18","0.18.1","0.18.2","0.18rc2","0.19.0","0.19.1","0.19.2","0.19b2","0.20.0","0.20.1","0.20.2","0.20.3","0.20.4","0.20rc1","0.21.0","0.21.1","0.21.2","0.21.3","0.21rc2","0.22","0.22.1","0.22.2","0.22.2.post1","0.22rc2.post1","0.22rc3","0.23.0","0.23.0rc1","0.9"]}],"products":[{"vendor":"scikit-learn","product":"scikit-learn"}],"references":[{"url":"https://github.com/0FuzzingQ/vuln/blob/master/sklearn%20unserialize.md","tags":["x_refsource_MISC","x_transferred","Exploit","Third Party Advisory","evidence","web"]},{"url":"https://scikit-learn.org/stable/modules/model_persistence.html#security-maintainability-limitations","tags":["x_refsource_MISC","x_transferred","Third Party Advisory","advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2020-13092","tags":["advisory"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/scikit-learn/PYSEC-2020-107.yaml","tags":["web"]},{"url":"https://github.com/advisories/GHSA-jjw5-xxj6-pcv5","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2020-13092","tags":["advisory"]},{"url":"https://github.com/scikit-learn/scikit-learn","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2020-13092","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner","status":"disputed","published":"2020-05-15T18:41:33Z","modified":"2024-08-04T12:11:18.98Z","updated_at":"2026-11-02T14:35:54.170199Z"}],"euvd":[{"id":"EUVD-2020-0179","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner","status":"published","published":"2020-05-15T18:41:33Z","modified":"2024-08-04T12:11:18Z","updated_at":"2026-11-03T03:07:38.81332Z"}],"ghsa":[{"id":"GHSA-jjw5-xxj6-pcv5","title":"scikit-learn Deserialization of Untrusted Data","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the `joblib.load()` function, if `__reduce__` makes an `os.system call`.\nNOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner.","status":"published","published":"2022-05-24T17:17:59Z","modified":"2024-10-22T17:21:50Z","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:38:12.325695Z"}],"nvd":[{"id":"CVE-2020-13092","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner","status":"disputed","published":"2020-05-15T19:15:12.277Z","modified":"2026-06-17T02:52:37.55Z","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":"2.0","score":7.5,"vector":"AV:N/AC:L/Au:N/C:P/I:P/A:P","level":"high","assessor":"primary"}],"cwes":["CWE-502"],"updated_at":"2026-11-02T14:06:00.784809Z"}],"osv":[{"id":"CVE-2020-13092","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner","status":"published","published":"2020-05-15T19:15:12.277Z","modified":"2026-10-24T10:30:21.618035505Z","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:14.034736Z"},{"id":"DEBIAN-CVE-2020-13092","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner","status":"published","published":"2020-05-15T19:15:12.277Z","modified":"2026-10-26T12:02:25.658832783Z","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:32.862554Z"},{"id":"GHSA-jjw5-xxj6-pcv5","title":"scikit-learn Deserialization of Untrusted Data","description":"scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the `joblib.load()` function, if `__reduce__` makes an `os.system call`.\nNOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner.","status":"published","published":"2022-05-24T17:17:59Z","modified":"2024-10-22T18:05:32.284452Z","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.687609Z"},{"id":"PYSEC-2020-107","description":"** DISPUTED ** scikit-learn (aka sklearn) through 0.23.0 can unserialize and execute commands from an untrusted file that is passed to the joblib.load() function, if __reduce__ makes an os.system call. NOTE: third parties dispute this issue because the joblib.load() function is documented as unsafe and it is the user's responsibility to use the function in a secure manner.","status":"published","published":"2020-05-15T19:15:00Z","modified":"2026-06-10T17:02:41.393980472Z","updated_at":"2026-11-02T15:52:52.192131Z"}]}}
