{"id":"CVE-2014-9720","aliases":["DEBIAN-CVE-2014-9720","DLA-279-1","DLA-475-1","EUVD-2020-0222","GHSA-8vpw-mgpf-mpvv","MGASA-2015-0251","PYSEC-2020-213","SUSE-SU-2016:1195-1"],"status":"published","title":"Tornado XSRF cookie allows side-channel attack against TLS (BREACH attack)","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","severity":{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"primary","from":"nvd"},"epss":{"day":"2026-11-07","score":0.02521,"percentile":0.84946,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-203"],"published":"2015-07-01T12:40:22Z","modified":"2026-10-23T16:02:12Z","fixes":[{"ecosystem":"PyPI","package":"tornado","fixed_in":["3.2.2"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:12","package":"python-tornado","fixed_in":["3.2.2-1"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"python-tornado","fixed_in":["3.2.2-1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"python-tornado","fixed_in":["3.2.2-1"],"sources":["osv"]},{"ecosystem":"Debian:6.0","package":"python-tornado","fixed_in":["1.0.1-1+deb6u1"],"sources":["osv"]},{"ecosystem":"Debian:7","package":"python-tornado","fixed_in":["2.3-2+deb7u1"],"sources":["osv"]},{"ecosystem":"Mageia:4","package":"python-tornado","fixed_in":["3.1-4.1.mga4"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Desktop 12","package":"python-backports.ssl_match_hostname","fixed_in":["3.4.0.2-15.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Desktop 12","package":"python-tornado","fixed_in":["4.2.1-11.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Desktop 12 SP1","package":"python-backports.ssl_match_hostname","fixed_in":["3.4.0.2-15.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Desktop 12 SP1","package":"python-tornado","fixed_in":["4.2.1-11.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Workstation Extension 12","package":"python-backports.ssl_match_hostname","fixed_in":["3.4.0.2-15.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Workstation Extension 12","package":"python-tornado","fixed_in":["4.2.1-11.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Workstation Extension 12 SP1","package":"python-backports.ssl_match_hostname","fixed_in":["3.4.0.2-15.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Workstation Extension 12 SP1","package":"python-tornado","fixed_in":["4.2.1-11.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.2"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.2-1"}]}]},{"source":"osv","ecosystem":"Debian:13","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.2-1"}]}]},{"source":"osv","ecosystem":"Debian:14","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.2-1"}]}]},{"source":"osv","ecosystem":"Debian:6.0","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.1-1+deb6u1"}]}],"versions":["1.0.1-1"]},{"source":"osv","ecosystem":"Debian:7","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.3-2+deb7u1"}]}],"versions":["2.3-2"]},{"source":"osv","ecosystem":"PyPI","package":"tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.2"}]}],"versions":["0.2","1.0","1.1","1.1.1","1.2","1.2.1","2.0","2.1","2.1.1","2.2","2.2.1","2.3","2.4","2.4.1","3.0","3.0.1","3.0.2","3.1","3.1.1","3.2","3.2.1"]},{"source":"osv","ecosystem":"Mageia:4","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.1-4.1.mga4"}]}]},{"source":"osv","ecosystem":"PyPI","package":"tornado","ranges":[{"type":"GIT","events":[{"introduced":"0"},{"fixed":"1c36307463b1e8affae100bf9386948e6c1b2308"}]},{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.2"}]}],"versions":["0.2","1.0","1.1","1.1.1","1.2","1.2.1","2.0","2.1","2.1.1","2.2","2.2.1","2.3","2.4","2.4.1","3.0","3.0.1","3.0.2","3.1","3.1.1","3.2","3.2.1","v3.2.1","v3.2.0","v3.2.0b2","v3.2.0b1","v3.1.0","v3.0.1","v3.0.0","v2.1.1","v2.3.0","v2.2.0","v2.1.0","v2.0.0","v1.2.0","v1.1.0","v1.0.0"]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Desktop 12","package":"python-backports.ssl_match_hostname","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.4.0.2-15.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Desktop 12","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.1-11.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Desktop 12 SP1","package":"python-backports.ssl_match_hostname","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.4.0.2-15.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Desktop 12 SP1","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.1-11.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Workstation Extension 12","package":"python-backports.ssl_match_hostname","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.4.0.2-15.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Workstation Extension 12","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.1-11.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Workstation Extension 12 SP1","package":"python-backports.ssl_match_hostname","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.4.0.2-15.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Workstation Extension 12 SP1","package":"python-tornado","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.1-11.1"}]}]}],"products":[{"vendor":"tornadoweb","product":"tornado"}],"references":[{"url":"http://www.tornadoweb.org/en/stable/releases/v3.2.2.html","tags":["x_refsource_MISC","x_transferred","Release Notes","Vendor Advisory","advisory","web"]},{"url":"https://github.com/tornadoweb/tornado/commit/1c36307463b1e8affae100bf9386948e6c1b2308","tags":["x_refsource_MISC","x_transferred","Patch","fix","web"]},{"url":"https://bugzilla.novell.com/show_bug.cgi?id=930362","tags":["x_refsource_MISC","x_transferred","Issue Tracking","Patch","Third Party Advisory","advisory","fix","report","web"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=1222816","tags":["x_refsource_MISC","x_transferred","Issue Tracking","Patch","Third Party Advisory","advisory","fix","report","web"]},{"url":"http://openwall.com/lists/oss-security/2015/05/19/4","tags":["x_refsource_MISC","x_transferred","Mailing List","Patch","Third Party Advisory","advisory","article","fix","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2014-9720","tags":["advisory"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/tornado/PYSEC-2020-213.yaml","tags":["web"]},{"url":"https://github.com/advisories/GHSA-8vpw-mgpf-mpvv","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2014-9720","tags":["advisory"]},{"url":"https://github.com/tornadoweb/tornado","tags":["package"]},{"url":"https://advisories.mageia.org/MGASA-2015-0251.html","tags":["advisory"]},{"url":"https://bugs.mageia.org/show_bug.cgi?id=16100","tags":["report"]},{"url":"http://lwn.net/Vulnerabilities/647618/","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2016/suse-su-20161195-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/930361","tags":["report"]},{"url":"https://bugzilla.suse.com/930362","tags":["report"]},{"url":"https://bugzilla.suse.com/974657","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2014-9720","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2014-9720","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2020-01-24T17:03:38Z","modified":"2024-08-06T13:55:04.572Z","updated_at":"2026-11-02T14:33:42.54191Z"}],"euvd":[{"id":"EUVD-2020-0222","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2020-01-24T17:03:38Z","modified":"2024-08-06T13:55:04Z","updated_at":"2026-11-03T01:56:47.514809Z"}],"ghsa":[{"id":"GHSA-8vpw-mgpf-mpvv","title":"Tornado XSRF cookie allows side-channel attack against TLS (BREACH attack)","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2022-05-17T19:57:19Z","modified":"2024-11-13T22:52:59Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"},{"version":"4.0","score":7.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N","level":"high"}],"cwes":["CWE-203"],"updated_at":"2026-11-02T14:38:18.163845Z"}],"nvd":[{"id":"CVE-2014-9720","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2020-01-24T18:15:12.053Z","modified":"2026-06-17T00:18:52.41Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"primary"},{"version":"2.0","score":4.3,"vector":"AV:N/AC:M/Au:N/C:P/I:N/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-203"],"updated_at":"2026-11-02T14:02:59.461996Z"}],"osv":[{"id":"CVE-2014-9720","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2020-01-24T18:15:12Z","modified":"2026-04-16T06:19:38.903571478Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T15:44:00.097545Z"},{"id":"DEBIAN-CVE-2014-9720","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2020-01-24T18:15:12.053Z","modified":"2026-10-23T16:02:12.444234399Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T15:45:26.442161Z"},{"id":"GHSA-8vpw-mgpf-mpvv","title":"Tornado XSRF cookie allows side-channel attack against TLS (BREACH attack)","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2022-05-17T19:57:19Z","modified":"2024-11-13T23:00:51.921404Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"},{"version":"4.0","score":7.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N","level":"high"}],"cwes":["CWE-203"],"updated_at":"2026-11-02T15:46:42.78452Z"},{"id":"DLA-279-1","title":"python-tornado - security update","status":"published","published":"2015-07-22T00:00:00Z","modified":"2026-03-09T01:21:50.281643Z","updated_at":"2026-11-02T15:46:11.189256Z"},{"id":"DLA-475-1","title":"python-tornado - security update","status":"published","published":"2016-05-15T00:00:00Z","modified":"2026-03-09T02:11:37.131832Z","updated_at":"2026-11-02T15:46:13.207219Z"},{"id":"MGASA-2015-0251","title":"Updated python-tornado package fixes security vulnerability","description":"Security fixes (CVE-2014-9720)\nThe XSRF token is now encoded with a random mask on each request. This\nmakes it safe to include in compressed pages without being vulnerable to\nthe BREACH attack. This applies to most applications that use both the\nxsrf_cookies and gzip options (or have gzip applied by a proxy).\n","status":"published","published":"2015-07-01T12:40:22Z","modified":"2026-04-16T06:24:27.175924281Z","updated_at":"2026-11-02T15:49:39.792687Z"},{"id":"PYSEC-2020-213","description":"Tornado before 3.2.2 sends arbitrary responses that contain a fixed CSRF token and may be sent with HTTP compression, which makes it easier for remote attackers to conduct a BREACH attack and determine this token via a series of crafted requests.","status":"published","published":"2020-01-24T18:15:00Z","modified":"2026-06-10T17:02:44.825142638Z","updated_at":"2026-11-02T15:52:52.192131Z"},{"id":"SUSE-SU-2016:1195-1","title":"Security update for python-tornado","description":"\nThe python-tornado module was updated to version 4.2.1, which brings several fixes,\nenhancements and new features.\n\nThe following security issues have been fixed:\n\n- A path traversal vulnerability in StaticFileHandler, in which files whose names\n  started with the static_path directory but were not actually in that directory\n  could be accessed.\n- The XSRF token is now encoded with a random mask on each request. This makes it\n  safe to include in compressed pages without being vulnerable to the BREACH attack.\n  This applies to most applications that use both the xsrf_cookies and gzip options\n  (or have gzip applied by a proxy). (bsc#930362, CVE-2014-9720)\n- The signed-value format used by RequestHandler.{g,s}et_secure_cookie changed to be\n  more secure. (bsc#930361)\n\nThe following enhancements have been implemented:\n\n- SSLIOStream.connect and IOStream.start_tls now validate certificates by default.\n- Certificate validation will now use the system CA root certificates.\n- The default SSL configuration has become stricter, using ssl.create_default_context\n  where available on the client side.\n- The deprecated classes in the tornado.auth module, GoogleMixin, FacebookMixin and\n  FriendFeedMixin have been removed.\n- New modules have been added: tornado.locks and tornado.queues.\n- The tornado.websocket module now supports compression via the 'permessage-deflate'\n  extension.\n- Tornado now depends on the backports.ssl_match_hostname when running on Python 2.\n\nFor a comprehensive list of changes, please refer to the release notes:\n\n- http://www.tornadoweb.org/en/stable/releases/v4.2.0.html\n- http://www.tornadoweb.org/en/stable/releases/v4.1.0.html\n- http://www.tornadoweb.org/en/stable/releases/v4.0.0.html\n- http://www.tornadoweb.org/en/stable/releases/v3.2.0.html\n","status":"published","published":"2016-05-02T13:01:41Z","modified":"2026-02-04T02:18:56.603574Z","updated_at":"2026-11-02T15:53:43.438985Z"}]}}
