{"id":"CVE-2020-15195","aliases":["BIT-tensorflow-2020-15195","EUVD-2020-0191","GHSA-63xm-rx5p-xvqr","PYSEC-2020-118","PYSEC-2020-275","PYSEC-2020-310","openSUSE-SU-2020:1766-1"],"status":"published","title":"Heap buffer overflow in Tensorflow","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","severity":{"version":"3.1","score":8.5,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.0095,"percentile":0.61743,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-119","CWE-122","CWE-787"],"published":"2020-09-25T18:28:29Z","modified":"2026-10-20T14:10:24Z","fixes":[{"ecosystem":"PyPI","package":"tensorflow","fixed_in":["1.15.4","2.0.3","2.1.2","2.2.1","2.3.1"],"sources":["ghsa","osv"]},{"ecosystem":"PyPI","package":"tensorflow-cpu","fixed_in":["1.15.4","2.0.3","2.1.2","2.2.1","2.3.1"],"sources":["ghsa","osv"]},{"ecosystem":"PyPI","package":"tensorflow-gpu","fixed_in":["1.15.4","2.0.3","2.1.2","2.2.1","2.3.1"],"sources":["ghsa","osv"]},{"ecosystem":"Bitnami","package":"tensorflow","fixed_in":["1.15.4","2.0.3","2.1.2","2.2.1","2.3.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0"},{"fixed":"2.0.3"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.1.0"},{"fixed":"2.1.2"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.2.0"},{"last_affected":"2.2.0"},{"fixed":"2.2.1"}]}],"versions":["2.2.0"]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"last_affected":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["2.3.0"]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0"},{"fixed":"2.0.3"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.1.0"},{"fixed":"2.1.2"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.2.0"},{"last_affected":"2.2.0"},{"fixed":"2.2.1"}]}],"versions":["2.2.0"]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"last_affected":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["2.3.0"]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0"},{"fixed":"2.0.3"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.1.0"},{"fixed":"2.1.2"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.2.0"},{"last_affected":"2.2.0"},{"fixed":"2.2.1"}]}],"versions":["2.2.0"]},{"source":"ghsa","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"last_affected":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["2.3.0"]},{"source":"osv","ecosystem":"Bitnami","package":"tensorflow","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.15.4"},{"introduced":"2.0.0"},{"fixed":"2.0.3"},{"introduced":"2.1.0"},{"fixed":"2.1.2"},{"introduced":"2.2.0"},{"fixed":"2.2.1"},{"introduced":"2.3.0"},{"fixed":"2.3.1"}]}]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"}]}],"versions":["0.12.0","0.12.1","1.0.0","1.0.1","1.1.0","1.10.0","1.10.1","1.11.0","1.12.0","1.12.2","1.12.3","1.13.1","1.13.2","1.14.0","1.15.0","1.15.2","1.15.3","1.2.0","1.2.1","1.3.0","1.4.0","1.4.1","1.5.0","1.5.1","1.6.0","1.7.0","1.7.1","1.8.0","1.9.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0"},{"fixed":"2.0.3"}]}],"versions":["2.0.0","2.0.1","2.0.2"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.1.0"},{"fixed":"2.1.2"}]}],"versions":["2.1.0","2.1.1"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.2.0"},{"fixed":"2.2.1"}]}],"versions":["2.2.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["2.3.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"}]}],"versions":["1.15.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0"},{"fixed":"2.0.3"}]}]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.1.0"},{"fixed":"2.1.2"}]}],"versions":["2.1.0","2.1.1"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.2.0"},{"fixed":"2.2.1"}]}],"versions":["2.2.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["2.3.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"}]}],"versions":["0.12.0","0.12.1","1.0.0","1.0.1","1.1.0","1.10.0","1.10.1","1.11.0","1.12.0","1.12.2","1.12.3","1.13.1","1.13.2","1.14.0","1.15.0","1.15.2","1.15.3","1.2.0","1.2.1","1.3.0","1.4.0","1.4.1","1.5.0","1.5.1","1.6.0","1.7.0","1.7.1","1.8.0","1.9.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0"},{"fixed":"2.0.3"}]}],"versions":["2.0.0","2.0.1","2.0.2"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.1.0"},{"fixed":"2.1.2"}]}],"versions":["2.1.0","2.1.1"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.2.0"},{"fixed":"2.2.1"}]}],"versions":["2.2.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["2.3.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow","ranges":[{"type":"GIT","events":[{"introduced":"0"},{"fixed":"390611e0d45c5793c7066110af37c8514e6a6c54"}]},{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"},{"introduced":"2.0.0"},{"fixed":"2.0.3"},{"introduced":"2.1.0"},{"fixed":"2.1.2"},{"introduced":"2.2.0"},{"fixed":"2.2.1"},{"introduced":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["0.12.0rc0","0.12.0rc1","0.12.0","0.12.1","1.0.0","1.0.1","1.1.0rc0","1.1.0rc1","1.1.0rc2","1.1.0","1.2.0rc0","1.2.0rc1","1.2.0rc2","1.2.0","1.2.1","1.3.0rc0","1.3.0rc1","1.3.0rc2","1.3.0","1.4.0rc0","1.4.0rc1","1.4.0","1.4.1","1.5.0rc0","1.5.0rc1","1.5.0","1.5.1","1.6.0rc0","1.6.0rc1","1.6.0","1.7.0rc0","1.7.0rc1","1.7.0","1.7.1","1.8.0rc0","1.8.0rc1","1.8.0","1.9.0rc0","1.9.0rc1","1.9.0rc2","1.9.0","1.10.0rc0","1.10.0rc1","1.10.0","1.10.1","1.11.0rc0","1.11.0rc1","1.11.0rc2","1.11.0","1.12.0rc0","1.12.0rc1","1.12.0rc2","1.12.0","1.12.2","1.12.3","1.13.0rc0","1.13.0rc1","1.13.0rc2","1.13.1","1.13.2","1.14.0rc0","1.14.0rc1","1.14.0","1.15.0rc0","1.15.0rc1","1.15.0rc2","1.15.0rc3","1.15.0","1.15.2","1.15.3","2.0.0","2.0.1","2.0.2","2.1.0","2.1.1","2.2.0","2.3.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-cpu","ranges":[{"type":"GIT","events":[{"introduced":"0"},{"fixed":"390611e0d45c5793c7066110af37c8514e6a6c54"}]},{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"},{"introduced":"2.0.0"},{"fixed":"2.0.3"},{"introduced":"2.1.0"},{"fixed":"2.1.2"},{"introduced":"2.2.0"},{"fixed":"2.2.1"},{"introduced":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["1.15.0","2.1.0","2.1.1","2.2.0","2.3.0"]},{"source":"osv","ecosystem":"PyPI","package":"tensorflow-gpu","ranges":[{"type":"GIT","events":[{"introduced":"0"},{"fixed":"390611e0d45c5793c7066110af37c8514e6a6c54"}]},{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.15.4"},{"introduced":"2.0.0"},{"fixed":"2.0.3"},{"introduced":"2.1.0"},{"fixed":"2.1.2"},{"introduced":"2.2.0"},{"fixed":"2.2.1"},{"introduced":"2.3.0"},{"fixed":"2.3.1"}]}],"versions":["0.12.0","0.12.1","1.0.0","1.0.1","1.1.0","1.10.0","1.10.1","1.11.0","1.12.0","1.12.2","1.12.3","1.13.1","1.13.2","1.14.0","1.15.0","1.15.2","1.15.3","1.2.0","1.2.1","1.3.0","1.4.0","1.4.1","1.5.0","1.5.1","1.6.0","1.7.0","1.7.1","1.8.0","1.9.0","2.0.0","2.0.1","2.0.2","2.1.0","2.1.1","2.2.0","2.3.0"]},{"source":"osv","ecosystem":"openSUSE:Leap 15.2","package":"tensorflow2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.1.2-lp152.7.3.1"}]}],"bundled":16},{"source":"osv","ecosystem":"openSUSE:Leap 15.2","package":"tensorflow2-lite","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.1.2-lp152.7.3.1"}]}],"bundled":16},{"source":"osv","ecosystem":"openSUSE:Leap 15.2","package":"tensorflow2_2_1_2-gnu-hpc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.1.2-lp152.7.3.1"}]}],"bundled":16},{"source":"osv","ecosystem":"openSUSE:Leap 15.2","package":"tensorflow2_2_1_2-gnu-openmpi2-hpc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.1.2-lp152.7.3.1"}]}],"bundled":16}],"products":[{"vendor":"google","product":"tensorflow"},{"vendor":"opensuse","product":"leap"},{"vendor":"tensorflow","product":"tensorflow"}],"references":[{"url":"https://github.com/tensorflow/tensorflow/releases/tag/v2.3.1","tags":["x_refsource_MISC","x_transferred","Third Party Advisory","advisory","web"]},{"url":"https://github.com/tensorflow/tensorflow/security/advisories/GHSA-63xm-rx5p-xvqr","tags":["x_refsource_CONFIRM","x_transferred","Exploit","Third Party Advisory","advisory","evidence","web"]},{"url":"https://github.com/tensorflow/tensorflow/commit/390611e0d45c5793c7066110af37c8514e6a6c54","tags":["x_refsource_MISC","x_transferred","Patch","Third Party Advisory","advisory","fix","web"]},{"url":"http://lists.opensuse.org/opensuse-security-announce/2020-10/msg00065.html","tags":["vendor-advisory","x_refsource_SUSE","x_transferred","Mailing List","Third Party Advisory","advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2020-15195","tags":["web","advisory"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/tensorflow-cpu/PYSEC-2020-275.yaml","tags":["web"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/tensorflow-gpu/PYSEC-2020-310.yaml","tags":["web"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/tensorflow/PYSEC-2020-118.yaml","tags":["web"]},{"url":"https://github.com/advisories/GHSA-63xm-rx5p-xvqr"},{"url":"https://github.com/tensorflow/tensorflow","tags":["package"]},{"url":"https://lists.opensuse.org/archives/list/security-announce@lists.opensuse.org/thread/TNMEEN772D6LWSHNB64QFB5TB3CZZEF4/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1173314","tags":["report"]},{"url":"https://bugzilla.suse.com/1175099","tags":["report"]},{"url":"https://bugzilla.suse.com/1175789","tags":["report"]},{"url":"https://bugzilla.suse.com/1177022","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15190","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15191","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15192","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15193","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15194","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15195","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15202","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15203","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15204","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15205","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15206","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15207","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15208","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15209","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15210","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2020-15211","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2020-15195","title":"Heap buffer overflow in Tensorflow","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2020-09-25T18:40:41Z","modified":"2024-08-04T13:08:22.718Z","cvss":[{"version":"3.1","score":8.5,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-119","CWE-122"],"updated_at":"2026-11-02T14:35:50.545879Z"}],"euvd":[{"id":"EUVD-2020-0191","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2020-09-25T18:40:41Z","modified":"2024-08-04T13:08:22Z","cvss":[{"version":"3.1","score":8.5,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-03T03:07:33.100327Z"}],"ghsa":[{"id":"GHSA-63xm-rx5p-xvqr","title":"Heap buffer overflow in Tensorflow","description":"### Impact\nThe implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern:\nhttps://github.com/tensorflow/tensorflow/blob/0e68f4d3295eb0281a517c3662f6698992b7b2cf/tensorflow/core/kernels/sparse_fill_empty_rows_op.cc#L263-L269\n\nIt is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow.\n\n### Patches\nWe have patched the issue in 390611e0d45c5793c7066110af37c8514e6a6c54 and will release a patch release for all affected versions.\n\nWe recommend users to upgrade to TensorFlow 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.\n\n### For more information\nPlease consult [our security guide](https://github.com/tensorflow/tensorflow/blob/master/SECURITY.md) for more information regarding the security model and how to contact us with issues and questions.\n\n### Attribution\nThis vulnerability has been reported by members of the Aivul Team from Qihoo 360.","status":"published","published":"2020-09-25T18:28:29Z","modified":"2024-10-28T20:21:03Z","cvss":[{"version":"4.0","score":5.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H","level":"medium"},{"version":"3.1","score":8.5,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","level":"high"}],"cwes":["CWE-119","CWE-122","CWE-787"],"updated_at":"2026-11-02T14:38:14.769863Z"}],"nvd":[{"id":"CVE-2020-15195","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2020-09-25T19:15:14.743Z","modified":"2026-06-17T02:56:14.457Z","cvss":[{"version":"3.1","score":8.5,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","level":"high","assessor":"secondary"},{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high","assessor":"primary"},{"version":"2.0","score":6.5,"vector":"AV:N/AC:L/Au:S/C:P/I:P/A:P","level":"medium","assessor":"primary"}],"cwes":["CWE-119","CWE-122","CWE-787"],"updated_at":"2026-11-02T14:06:17.70091Z"}],"osv":[{"id":"CVE-2020-15195","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2020-09-25T19:15:14.743Z","modified":"2026-10-20T14:10:24.761383118Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:44:14.828228Z"},{"id":"GHSA-63xm-rx5p-xvqr","title":"Heap buffer overflow in Tensorflow","description":"### Impact\nThe implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern:\nhttps://github.com/tensorflow/tensorflow/blob/0e68f4d3295eb0281a517c3662f6698992b7b2cf/tensorflow/core/kernels/sparse_fill_empty_rows_op.cc#L263-L269\n\nIt is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow.\n\n### Patches\nWe have patched the issue in 390611e0d45c5793c7066110af37c8514e6a6c54 and will release a patch release for all affected versions.\n\nWe recommend users to upgrade to TensorFlow 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.\n\n### For more information\nPlease consult [our security guide](https://github.com/tensorflow/tensorflow/blob/master/SECURITY.md) for more information regarding the security model and how to contact us with issues and questions.\n\n### Attribution\nThis vulnerability has been reported by members of the Aivul Team from Qihoo 360.","status":"published","published":"2020-09-25T18:28:29Z","modified":"2026-07-08T06:27:32.770742745Z","cvss":[{"version":"3.1","score":8.5,"vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H","level":"high"},{"version":"4.0","score":5.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H","level":"medium"}],"cwes":["CWE-119","CWE-122","CWE-787"],"updated_at":"2026-11-02T15:46:39.266402Z"},{"id":"BIT-tensorflow-2020-15195","title":"Heap buffer overflow in Tensorflow","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2024-03-06T11:20:46.206Z","modified":"2026-09-08T08:48:10.798791653Z","updated_at":"2026-11-02T15:28:35.51001Z"},{"id":"openSUSE-SU-2020:1766-1","title":"Security update for tensorflow2","description":"This update for tensorflow2 fixes the following issues:\n\n- updated to 2.1.2 with following fixes (boo#1177022):\n  * Fixes an undefined behavior causing a segfault in tf.raw_ops.Switch (CVE-2020-15190)\n  * Fixes three vulnerabilities in conversion to DLPack format (CVE-2020-15191, CVE-2020-15192, CVE-2020-15193)\n  * Fixes two vulnerabilities in SparseFillEmptyRowsGrad (CVE-2020-15194, CVE-2020-15195)\n  * Fixes an integer truncation vulnerability in code using the work sharder API (CVE-2020-15202)\n  * Fixes a format string vulnerability in tf.strings.as_string (CVE-2020-15203)\n  * Fixes segfault raised by calling session-only ops in eager mode (CVE-2020-15204)\n  * Fixes data leak and potential ASLR violation from tf.raw_ops.StringNGrams (CVE-2020-15205)\n  * Fixes segfaults caused by incomplete SavedModel validation (CVE-2020-15206)\n  * Fixes a data corruption due to a bug in negative indexing support in TFLite (CVE-2020-15207)\n  * Fixes a data corruption due to dimension mismatch in TFLite (CVE-2020-15208)\n  * Fixes several vulnerabilities in TFLite saved model format (CVE-2020-15209, CVE-2020-15210, CVE-2020-15211)\n","status":"published","published":"2020-10-29T11:23:39Z","modified":"2026-02-04T03:45:35.673536Z","updated_at":"2026-11-02T16:58:31.517538Z"},{"id":"PYSEC-2020-118","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2020-09-25T19:15:00Z","modified":"2023-12-06T01:00:16.335009Z","updated_at":"2026-11-02T15:52:52.192131Z"},{"id":"PYSEC-2020-275","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2020-09-25T19:15:00Z","modified":"2023-12-06T01:00:16.335009Z","updated_at":"2026-11-02T15:52:52.682031Z"},{"id":"PYSEC-2020-310","description":"In Tensorflow before versions 1.15.4, 2.0.3, 2.1.2, 2.2.1 and 2.3.1, the implementation of `SparseFillEmptyRowsGrad` uses a double indexing pattern. It is possible for `reverse_index_map(i)` to be an index outside of bounds of `grad_values`, thus resulting in a heap buffer overflow. The issue is patched in commit 390611e0d45c5793c7066110af37c8514e6a6c54, and is released in TensorFlow versions 1.15.4, 2.0.3, 2.1.2, 2.2.1, or 2.3.1.","status":"published","published":"2020-09-25T19:15:00Z","modified":"2023-12-06T01:00:16.335009Z","updated_at":"2026-11-02T15:52:52.682031Z"}]}}
