JupyterHub's XSRF protection (updated in 4.1.0) inappropriately treated requests with Sec-Fetch-Mode: no-cors as same-origin requests, which they are not, bypassing XSRF checks. The JSON API is not affected, only HTTP form endpoints, such as /hub/spawn and /hub/accept-share, meaning attackers could trigger server spawn (but not access the server) and if the attacker is a JupyterHub user permitted to share access to their server, cause a user to accept a share and have access to the attacker's server.
Upgrade to JupyterHub 5.4.5.
If a reverse proxy is in use, drop requests to JupyterHub with Sec-Fetch-Mode: no-cors.
{
"cwe_ids": [
"CWE-352"
],
"github_reviewed": true,
"github_reviewed_at": "2026-05-05T18:10:58Z",
"nvd_published_at": "2026-05-22T21:16:43Z",
"severity": "MODERATE"
}