Jupyter Server: 5xx request logging leaks token-bearing Referer header values
High7.1CVE-2026-86049 · Published Sep 17, 2026
Affected versions
| Package | Affected | Fixed in |
|---|---|---|
| jupyter-server PyPI | < 2.21.0 | 2.21.0 |
Details and references
### Summary When a request returns a 500, `jupyter_server/log.py` logs a small JSON block of request headers. The Referer header was copied into it as-is, so a token in the Referer URL ended up in the logs in plain text. ### Impact Anyone who can read the server logs can pick tokens out of these 500 entries. Tokens end up in the Referer during normal token-based login and launch flows. Affected: all versions before 2.21.0. ### PoC Any malformed request that returns a 500 works: ```bash curl -i -X POST \ -H 'Content-Type: application/json' \ -H 'Referer: http://127.0.0.1:8899/tree?token=REFERTOKEN' \ --data '{"name":123}' \ 'http://127.0.0.1:8899/api/kernels?token=VALIDTOKEN' ``` The log shows the token twice, once raw and once redacted: ``` "Referer": "http://127.0.0.1:8899/tree?token=REFERTOKEN", [E ... ServerApp] 500 POST /api/kernels?token=[secret] (...) referer=http://127.0.0.1:8899/tree?token=[secret] ``` ### Patches Fixed in 2.21.0 by 5251352. Header values are now scrubbed before the block is logged. Upgrade to 2.21.0 or later. ### Workarounds Limit who can read the server logs. If you can, avoid flows that put the token in the URL.
- CVSS 3.1
- CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H
- Severity from
- GitHub (reviewed advisory)
- Weakness
- CWE-532
- Also known as
- CVE-2026-86049
- github.com/jupyter-server/jupyter_server/security/advisories/GHSA-c3mw-737p-c7g2
- github.com/jupyter-server/jupyter_server/pull/1681
- github.com/jupyter-server/jupyter_server/commit/52513529af7096e622c00911b17627b266294717
- github.com/jupyter-server/jupyter_server
- github.com/jupyter-server/jupyter_server/releases/tag/v2.21.0
More Jupyter advisories
All Jupyter| Date | Advisory | Severity | Fixed in |
|---|---|---|---|
| Aug 25 | JupyterHub has Unauthenticated Denial of Service via Unbounded Username Logging on Failed Login CVE-2026-54338Medium5.3fixed in 5.5.0 | Medium5.3 | 5.5.0 |
| Jul 23 | jupyter-server is vulnerable to CORS origin validation bypass when the `allow_origin_pat` configuration is used CVE-2026-6657Medium6.1no fix yet | Medium6.1 | No fix yet |
| Jul 22 | JupyterLab: Cross-site scripting (XSS) via crafted settings file (`overrides.json`) CVE-2026-73417Highfixed in 4.5.10, 4.6.2 | High | 4.5.10, 4.6.2 |
| Jul 22 | JupyterLab: Image viewer allows XSS when opening malicious image in new browser tab CVE-2026-73415Highfixed in 4.5.10, 4.6.2 | High | 4.5.10, 4.6.2 |
| Jul 22 | JupyterLab: PyPI extension blocklist package-name canonicalization bypass CVE-2026-73416Mediumfixed in 4.5.10, 4.6.2 | Medium | 4.5.10, 4.6.2 |
| Jul 22 | JupyterLab PluginManager lock-rule enforcement bypass GHSA-h5v5-8746-g7mmMediumfixed in 4.5.10, 4.6.2 | Medium | 4.5.10, 4.6.2 |