Jupyter Server has a CORS Origin Validation Bypass via `re.match()` in `allow_origin_pat`
High severity
GitHub Reviewed
Published
May 5, 2026
in
jupyter-server/jupyter_server
•
Updated Jul 31, 2026
Description
Published to the GitHub Advisory Database
May 5, 2026
Reviewed
May 5, 2026
Published by the National Vulnerability Database
May 5, 2026
Last updated
Jul 31, 2026
Jupyter Server uses
re.match()to validate the Origin header against theallow_origin_patconfiguration.Since
re.match()only anchors at the start of the string, an attacker who controls a domain likehttp://trusted.example.com.evil.com/passes validation against a pattern intended to match onlytrusted.example.com.Impact
<=2.17.0
Patches
057869a327c46730afede3eab0ca2d2e3e74acea, 49b34392feaa97735b3b777e3baf8f22f2a14ed8
Workarounds
Wrap your
allow_origin_patvalue with^and$References
jupyter-server/jupyter_server#603
https://docs.python.org/3/library/re.html#re.fullmatch
https://docs.python.org/3/library/re.html#re.match
References