{"id":"CVE-2024-28233","aliases":["BIT-jupyterhub-2024-28233","DEBIAN-CVE-2024-28233","EUVD-2024-0861","GHSA-7r3h-4ph8-w38g","PYSEC-2026-1480","UBUNTU-CVE-2024-28233"],"status":"published","title":"XSS in JupyterHub via Self-XSS leveraged by Cookie Tossing","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","severity":{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00329,"percentile":0.26199,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-352","CWE-565","CWE-79"],"published":"2024-03-27T18:16:24Z","modified":"2026-11-02T12:02:12Z","fixes":[{"ecosystem":"PyPI","package":"jupyterhub","fixed_in":["4.1.0"],"sources":["ghsa","osv"]},{"ecosystem":"Bitnami","package":"jupyterhub","fixed_in":["4.1.0"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"jupyterhub","fixed_in":["5.0.0+ds1-1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"jupyterhub","fixed_in":["5.0.0+ds1-1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.0"}]}]},{"source":"osv","ecosystem":"Bitnami","package":"jupyterhub","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"4.1.0"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.0.0+ds1-1","5.0.0+ds1-1","5.0.0+ds1-2","5.0.0+ds1-3","5.0.0+ds1-4","5.2.1+ds1-1","5.2.1+ds1-2","5.2.1+ds1-3","5.2.1+ds1-4","5.2.1+ds1-5"]},{"source":"osv","ecosystem":"Debian:13","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.0.0+ds1-1"}]}]},{"source":"osv","ecosystem":"Debian:14","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"5.0.0+ds1-1"}]}]},{"source":"osv","ecosystem":"PyPI","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.0"}]}],"versions":["0.1.0","0.2.0","0.3.0","0.4.0","0.4.1","0.5.0","0.6.0","0.6.1","0.7.0","0.7.0b1","0.7.1","0.7.2","0.8.0","0.8.0b1","0.8.0b2","0.8.0b3","0.8.0b4","0.8.0b5","0.8.0rc1","0.8.0rc2","0.8.1","0.9.0","0.9.0b1","0.9.0b2","0.9.0b3","0.9.0rc1","0.9.1","0.9.2","0.9.3","0.9.4","0.9.5","0.9.6","1.0.0","1.0.0b1","1.0.0b2","1.1.0","1.1.0b1","1.2.0","1.2.0b1","1.2.1","1.2.2","1.3.0","1.4.0","1.4.1","1.4.2","1.5.0","1.5.1","2.0.0","2.0.0b1","2.0.0b2","2.0.0b3","2.0.0rc1","2.0.0rc2","2.0.0rc3","2.0.0rc4","2.0.0rc5","2.0.1","2.0.2","2.1.0","2.1.1","2.2.0","2.2.1","2.2.2","2.3.0","2.3.1","3.0.0","3.0.0b1","3.1.0","3.1.1","4.0.0","4.0.0b1","4.0.0b2","4.0.1","4.0.2"]},{"source":"osv","ecosystem":"PyPI","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.0"}]}],"versions":["0.1.0","0.2.0","0.3.0","0.4.0","0.4.1","0.5.0","0.6.0","0.6.1","0.7.0","0.7.0b1","0.7.1","0.7.2","0.8.0","0.8.0b1","0.8.0b2","0.8.0b3","0.8.0b4","0.8.0b5","0.8.0rc1","0.8.0rc2","0.8.1","0.9.0","0.9.0b1","0.9.0b2","0.9.0b3","0.9.0rc1","0.9.1","0.9.2","0.9.3","0.9.4","0.9.5","0.9.6","1.0.0","1.0.0b1","1.0.0b2","1.1.0","1.1.0b1","1.2.0","1.2.0b1","1.2.1","1.2.2","1.3.0","1.4.0","1.4.1","1.4.2","1.5.0","1.5.1","2.0.0","2.0.0b1","2.0.0b2","2.0.0b3","2.0.0rc1","2.0.0rc2","2.0.0rc3","2.0.0rc4","2.0.0rc5","2.0.1","2.0.2","2.1.0","2.1.1","2.2.0","2.2.1","2.2.2","2.3.0","2.3.1","3.0.0","3.0.0b1","3.1.0","3.1.1","4.0.0","4.0.0b1","4.0.0b2","4.0.1","4.0.2"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.0.0+ds1-1","2.0.0+ds1-2"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.0.0+ds1-1"]},{"source":"osv","ecosystem":"Ubuntu:25.10","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.2.1+ds1-2","5.2.1+ds1-3","5.2.1+ds1-4"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.2.1+ds1-4","5.2.1+ds1-5"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"jupyterhub","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["5.2.1+ds1-4"]}],"products":[{"vendor":"jupyter","product":"jupyterhub"},{"vendor":"jupyterhub","product":"jupyterhub"}],"references":[{"url":"https://github.com/jupyterhub/jupyterhub/security/advisories/GHSA-7r3h-4ph8-w38g","tags":["x_refsource_CONFIRM","x_transferred","Third Party Advisory","advisory","web","report"]},{"url":"https://github.com/jupyterhub/jupyterhub/commit/e2798a088f5ad45340fe79cdf1386198e664f77f","tags":["x_refsource_MISC","x_transferred","Patch","fix","web","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2024-28233","tags":["web","advisory"]},{"url":"https://github.com/advisories/GHSA-7r3h-4ph8-w38g","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/28xxx/CVE-2024-28233.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2024-28233","tags":["advisory"]},{"url":"https://github.com/jupyterhub/jupyterhub","tags":["package"]},{"url":"https://pypi.org/project/jupyterhub","tags":["package"]},{"url":"https://ubuntu.com/security/CVE-2024-28233","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2024-28233","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2024-28233","title":"XSS in JupyterHub via Self-XSS leveraged by Cookie Tossing","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","status":"published","published":"2024-03-27T18:16:24.308Z","modified":"2024-08-15T14:46:24.624Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high","assessor":"cna"}],"cwes":["CWE-79","CWE-352","CWE-565"],"updated_at":"2026-11-02T14:34:18.597034Z"}],"euvd":[{"id":"EUVD-2024-0861","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","status":"published","published":"2024-03-27T18:16:24Z","modified":"2024-08-15T14:46:24Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high"}],"updated_at":"2026-11-03T00:56:17.723066Z"}],"ghsa":[{"id":"GHSA-7r3h-4ph8-w38g","title":"Cross site scripting (XSS) in JupyterHub via Self-XSS leveraged by Cookie Tossing","description":"### Impact\n\nAffected configurations:\n\n- Single-origin JupyterHub deployments\n- JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server.\n\nBy tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve the following:\n\n- Full access to JupyterHub API and user's single-user server, e.g.\n  - Create and exfiltrate an API Token\n  - Exfiltrate all files hosted on the user's single-user server: notebooks, images, etc.\n  - Install malicious extensions. They can be used as a backdoor to silently regain access to victim's session anytime.\n\n### Patches\n\nTo prevent cookie-tossing:\n\n- Upgrade to JupyterHub 4.1 (both hub and user environment)\n- enable per-user domains via `c.JupyterHub.subdomain_host = \"https://mydomain.example.org\"`\n- set `c.JupyterHub.cookie_host_prefix_enabled = True` to enable domain-locked cookies\n\nor, if available (applies to earlier JupyterHub versions):\n\n- deploy jupyterhub on its own domain, not shared with any other services\n- enable per-user domains via `c.JupyterHub.subdomain_host = \"https://mydomain.example.org\"`","status":"published","published":"2024-03-28T17:08:10Z","modified":"2024-03-28T17:08:11Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-79","CWE-352","CWE-565"],"updated_at":"2026-11-02T14:37:42.744468Z"}],"nvd":[{"id":"CVE-2024-28233","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","status":"published","published":"2024-03-27T19:15:48.43Z","modified":"2026-06-17T07:21:13.837Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high","assessor":"secondary"},{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-79","CWE-352","CWE-565"],"updated_at":"2026-11-02T14:09:44.124823Z"}],"osv":[{"id":"CVE-2024-28233","title":"XSS in JupyterHub via Self-XSS leveraged by Cookie Tossing","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","status":"published","published":"2024-03-27T18:16:24.308Z","modified":"2026-10-28T02:30:38.598442688Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-352","CWE-565","CWE-79"],"updated_at":"2026-11-02T15:44:39.569658Z"},{"id":"DEBIAN-CVE-2024-28233","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","status":"published","published":"2024-03-27T19:15:48.43Z","modified":"2026-11-02T12:02:12.215452624Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:45:42.530184Z"},{"id":"GHSA-7r3h-4ph8-w38g","title":"Cross site scripting (XSS) in JupyterHub via Self-XSS leveraged by Cookie Tossing","description":"### Impact\n\nAffected configurations:\n\n- Single-origin JupyterHub deployments\n- JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server.\n\nBy tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve the following:\n\n- Full access to JupyterHub API and user's single-user server, e.g.\n  - Create and exfiltrate an API Token\n  - Exfiltrate all files hosted on the user's single-user server: notebooks, images, etc.\n  - Install malicious extensions. They can be used as a backdoor to silently regain access to victim's session anytime.\n\n### Patches\n\nTo prevent cookie-tossing:\n\n- Upgrade to JupyterHub 4.1 (both hub and user environment)\n- enable per-user domains via `c.JupyterHub.subdomain_host = \"https://mydomain.example.org\"`\n- set `c.JupyterHub.cookie_host_prefix_enabled = True` to enable domain-locked cookies\n\nor, if available (applies to earlier JupyterHub versions):\n\n- deploy jupyterhub on its own domain, not shared with any other services\n- enable per-user domains via `c.JupyterHub.subdomain_host = \"https://mydomain.example.org\"`","status":"published","published":"2024-03-28T17:08:10Z","modified":"2026-09-10T03:50:00.245591053Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-352","CWE-565","CWE-79"],"updated_at":"2026-11-02T15:46:41.349637Z"},{"id":"PYSEC-2026-1480","title":"Cross site scripting (XSS) in JupyterHub via Self-XSS leveraged by Cookie Tossing","description":"### Impact\n\nAffected configurations:\n\n- Single-origin JupyterHub deployments\n- JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server.\n\nBy tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve the following:\n\n- Full access to JupyterHub API and user's single-user server, e.g.\n  - Create and exfiltrate an API Token\n  - Exfiltrate all files hosted on the user's single-user server: notebooks, images, etc.\n  - Install malicious extensions. They can be used as a backdoor to silently regain access to victim's session anytime.\n\n### Patches\n\nTo prevent cookie-tossing:\n\n- Upgrade to JupyterHub 4.1 (both hub and user environment)\n- enable per-user domains via `c.JupyterHub.subdomain_host = \"https://mydomain.example.org\"`\n- set `c.JupyterHub.cookie_host_prefix_enabled = True` to enable domain-locked cookies\n\nor, if available (applies to earlier JupyterHub versions):\n\n- deploy jupyterhub on its own domain, not shared with any other services\n- enable per-user domains via `c.JupyterHub.subdomain_host = \"https://mydomain.example.org\"`","status":"published","published":"2026-07-07T11:45:36.867733Z","modified":"2026-07-07T17:57:03.463828143Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high"}],"updated_at":"2026-11-02T15:52:55.06457Z"},{"id":"UBUNTU-CVE-2024-28233","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","status":"published","published":"2024-03-27T19:15:00Z","modified":"2026-10-17T12:56:43.929409996Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N","level":"high"},{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T16:54:48.333535Z"},{"id":"BIT-jupyterhub-2024-28233","title":"XSS in JupyterHub via Self-XSS leveraged by Cookie Tossing","description":"JupyterHub is an open source multi-user server for Jupyter notebooks. By tricking a user into visiting a malicious subdomain, the attacker can achieve an XSS directly affecting the former's session. More precisely, in the context of JupyterHub, this XSS could achieve full access to JupyterHub API and user's single-user server. The affected configurations are single-origin JupyterHub deployments and JupyterHub deployments with user-controlled applications running on subdomains or peer subdomains of either the Hub or a single-user server. This vulnerability is fixed in 4.1.0.","status":"published","published":"2024-04-03T10:52:35.17Z","modified":"2026-09-10T16:01:01.000787065Z","updated_at":"2026-11-02T15:28:31.782692Z"}]}}
