CVE-2026-40110: jupyter-server CORS origin validation bypass via unanchored regex in allow_origin_pat
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 allow_origin_pat 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.
Security readout for executives and security teams
Plain-English summary
CVE-2026-40110 lets a malicious website appear trusted to some Jupyter Server deployments because origin checking accepts regex prefix matches. If a user visits an attacker-controlled site, that site may be able to make browser-based API requests to the Jupyter Server as though it were an allowed origin.
Executive priority
Treat as high priority for environments using Jupyter Server with cross-origin access controls. The issue can undermine browser trust boundaries around sensitive notebooks, data, or API actions, but evidence provided does not establish active exploitation.
Technical view
Jupyter Server 2.17.0 and earlier validate the Origin header against allow_origin_pat using Python re.match(). Because the match is not required to cover the full origin, attacker-controlled lookalike origins that start with a trusted value can bypass intended CORS restrictions. The issue is fixed in 2.18.0.
Likely exposure
Exposure is most likely where Jupyter Server <=2.17.0 is reachable by users' browsers and allow_origin_pat is configured for trusted domains without fully anchored patterns.
Exploitation context
The bundle does not show KEV listing or active exploitation. Exploitation requires user interaction and a deployment whose CORS trust pattern can be prefix-matched by an attacker-controlled origin.
Researcher notes
Focus validation on CORS behavior and configuration state, not just package presence. The vulnerable condition depends on allow_origin_pat semantics and regex construction. Avoid assuming all Jupyter Server deployments are exploitable without confirming affected version, configuration, reachability, and user-interaction path.
Mitigation direction
Upgrade Jupyter Server to version 2.18.0 or later.
Review allow_origin_pat values for exact anchoring and overly broad regex patterns.
Limit browser access to Jupyter Server through trusted networks or access controls.
Check vendor advisories for distribution-specific fixed packages, including Red Hat guidance.
Validation and detection
Inventory Jupyter Server versions and flag deployments at 2.17.0 or earlier.
Identify systems using allow_origin_pat and review their configured origin regexes.
Confirm upgraded systems report Jupyter Server 2.18.0 or later.
Review access logs for unexpected cross-origin API requests from lookalike domains.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · low confidence lookup
CWE-625: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
2CVSS vectors
5Timeline events
2ADP providers
9Source links
SSVC decision data
CISA-ADPCISA Coordinator
Timestamp
Version
2.0.3
Exploitation: noneAutomatable: noTechnical Impact: total
CVSS vector scores
2 official scores
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-625 · source CWE mapping
Permissive Regular Expression
Permissive Regular Expression represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.
Regular Expression without Anchors represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.