CVE-2026-40110: jupyter-server CORS origin validation bypass via unanchored regex in allow_origin_pat

Published May 5, 2026
·
Updated

Jupyter Server is the backend for Jupyter web applications. In versions 2.17.0 and earlier, the Origin header validation uses Python's re.match() to check incoming origins against the alloworiginpat configuration value. Because re.match() only anchors at the start of the string and does not require a full match, a pattern intended to match only a trusted domain (e.g., trusted.example.com) will also match any origin that begins with that domain followed by additional characters (e.g., trusted.example.com.evil.com). An attacker who controls such a domain can bypass the CORS origin restriction and make cross-origin requests to the Jupyter Server API from an untrusted site. This issue has been fixed in version 2.18.0.

Other sources

Jupyter Server uses re.match() to validate the Origin header against the alloworiginpat configuration.

Since re.match() only anchors at the start of the string, an attacker who controls a domain like http://trusted.example.com.evil.com/ passes validation against a pattern intended to match only trusted.example.com.

Impact

<=2.17.0

Patches

057869a327c46730afede3eab0ca2d2e3e74acea, 49b34392feaa97735b3b777e3baf8f22f2a14ed8

Workarounds

Wrap your alloworiginpat value with ^ and $

References

https://github.com/jupyter-server/jupyterserver/pull/603 https://docs.python.org/3/library/re.html#re.fullmatch https://docs.python.org/3/library/re.html#re.match

GitHub

Affected Software

2 affected componentsFixes available
pip/jupyter-server<=2.17.0
2.18.0
jupyter Jupyter Server<2.18.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade pip/jupyter-server to a version that resolves this vulnerability.

    Fixed in 2.18.0
  2. Upgrade

    Upgrade jupyter-server to a version that resolves this vulnerability.

    Fixed in 2.18.0
  3. Configuration

    Update the Origin allowlist regex by anchoring it to the start and end: wrap your allow_origin_pat value with ^ and $ to prevent bypass from origins that begin with the trusted domain but include additional characters.

    Jupyter Server allow_origin_pat = Wrap the allow_origin_pat pattern with ^ and $ (e.g., use ^trusted\.example\.com$)

Event History

May 5, 2026
Advisory Published
via GitHub·04:54 PM
Data Sourced
via GitHub·04:54 PM
DescriptionWeaknessAffected Software
CVE Published
via MITRE·09:29 PM
Data Sourced
via MITRE·09:29 PM
DescriptionWeakness
Data Sourced
via Red Hat·10:01 PM
DescriptionSeverityAffected Software
Data Sourced
via NVD·10:16 PM
RemedyDescriptionSeverityWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2026-40110?

CVE-2026-40110 is classified as a high severity vulnerability due to potential unauthorized resource access.

2

How do I fix CVE-2026-40110?

To fix CVE-2026-40110, upgrade jupyter-server to version 2.18.0 or later.

3

What software versions are affected by CVE-2026-40110?

CVE-2026-40110 affects jupyter-server versions 2.17.0 and earlier.

4

What type of vulnerability is CVE-2026-40110?

CVE-2026-40110 is a CORS origin validation bypass vulnerability.

5

What does the CVE-2026-40110 vulnerability impact?

CVE-2026-40110 impacts the validation of the Origin header in requests to the Jupyter Server backend, leading to possible security bypass.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203