{"id":"GHSA-9x4q-3gxw-849f","summary":"JupyterHub has a privilege escalation vulnerability with the `admin:users` scope","details":"### Summary\n\nIf a user is granted the `admin:users` scope, they may escalate their own privileges by making themselves a full admin user.\n\n### Details\n\nThe `admin:users` scope allows a user to edit user records:\n\n\u003e admin:users\n\u003e\n\u003e Read, write, create and delete users and their authentication state, not including their servers or tokens.\n\u003e\n\u003e -- https://jupyterhub.readthedocs.io/en/stable/rbac/scopes.html#available-scopes\n\nHowever, this includes making users admins. Admin users are granted scopes beyond `admin:users` making this a mechanism by which granted scopes may be escalated.\n\n### Impact\n\nThe impact is relatively small in that `admin:users` is already an extremely privileged scope only granted to trusted users.\nIn effect, `admin:users` is equivalent to `admin=True`, which is not intended.\n\nNote that the change here only prevents escalation to the built-in JupyterHub admin role that has unrestricted permissions. It does not prevent users with e.g. `groups` permissions from granting themselves or other users permissions via group membership, which is intentional.","aliases":["BIT-jupyterhub-2024-41942","CVE-2024-41942","PYSEC-2024-200"],"modified":"2026-09-10T03:50:17.487409719Z","published":"2024-08-08T14:37:06Z","database_specific":{"nvd_published_at":"2024-08-08T15:15:17Z","cwe_ids":["CWE-274"],"severity":"HIGH","github_reviewed":true,"github_reviewed_at":"2024-08-08T14:37:06Z"},"references":[{"type":"WEB","url":"https://github.com/jupyterhub/jupyterhub/security/advisories/GHSA-9x4q-3gxw-849f"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2024-41942"},{"type":"WEB","url":"https://github.com/jupyterhub/jupyterhub/commit/99e2720b0fc626cbeeca3c6337f917fdacfaa428"},{"type":"WEB","url":"https://github.com/jupyterhub/jupyterhub/commit/ff2db557a85b6980f90c3158634bf924063ab8ba"},{"type":"PACKAGE","url":"https://github.com/jupyterhub/jupyterhub"},{"type":"WEB","url":"https://github.com/pypa/advisory-database/tree/main/vulns/jupyterhub/PYSEC-2024-200.yaml"}],"affected":[{"package":{"name":"jupyterhub","ecosystem":"PyPI","purl":"pkg:pypi/jupyterhub"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.6"}]}],"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","4.1.0","4.1.1","4.1.2","4.1.3","4.1.4","4.1.5"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2024/08/GHSA-9x4q-3gxw-849f/GHSA-9x4q-3gxw-849f.json"}},{"package":{"name":"jupyterhub","ecosystem":"PyPI","purl":"pkg:pypi/jupyterhub"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"5.0.0"},{"fixed":"5.1.0"}]}],"versions":["5.0.0"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2024/08/GHSA-9x4q-3gxw-849f/GHSA-9x4q-3gxw-849f.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"},{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N"}]}