---
id: CVE-2026-40110
aliases:
  - GHSA-24qx-w28j-9m6p
  - PYSEC-2026-2187
title: >-
  Jupyter Server has a  CORS Origin Validation Bypass via `re.match()` in
  `allow_origin_pat`
summary: >-
  Jupyter Server has a  CORS Origin Validation Bypass via `re.match()` in
  `allow_origin_pat`
severity: high
vendor: jupyter-server
product: jupyter-server
ecosystem: pip
affected:
  - jupyter-server < 2.18.0
patched:
  - jupyter-server 2.18.0
published: '2026-05-05'
updated: '2026-09-10'
sourceUpdated: '2026-09-10T03:50:45.011553229Z'
source: OSV
sourceUrl: 'https://osv.dev/vulnerability/GHSA-24qx-w28j-9m6p'
references:
  - url: >-
      https://github.com/jupyter-server/jupyter_server/security/advisories/GHSA-24qx-w28j-9m6p
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-40110'
  - url: 'https://github.com/jupyter-server/jupyter_server/pull/603'
  - url: >-
      https://github.com/jupyter-server/jupyter_server/commit/057869a327c46730afede3eab0ca2d2e3e74acea
  - url: >-
      https://github.com/jupyter-server/jupyter_server/commit/49b34392feaa97735b3b777e3baf8f22f2a14ed8
  - url: 'https://access.redhat.com/errata/RHSA-2026:43038'
  - url: 'https://access.redhat.com/security/cve/CVE-2026-40110'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2466912'
  - url: 'https://github.com/jupyter-server/jupyter_server'
  - url: >-
      https://github.com/pypa/advisory-database/tree/main/vulns/jupyter-server/PYSEC-2026-2187.yaml
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-40110.json
tags:
  - osv
  - pip
epss: 0.0047
epssPercentile: 0.37961
ingestedAt: '2026-07-13T18:57:51.087Z'
---

## Overview

Jupyter Server uses `re.match()` to validate the Origin header against the `allow_origin_pat` 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 `allow_origin_pat` value with `^` and `$`

### References

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

## Affected packages

- `jupyter-server < 2.18.0`

## Remediation

Upgrade to a patched release:

- `jupyter-server 2.18.0`
