{"id":"CVE-2026-40110","summary":"jupyter-server CORS origin validation bypass via unanchored regex in allow_origin_pat","details":"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.","aliases":["GHSA-24qx-w28j-9m6p","PYSEC-2026-2187"],"modified":"2026-07-16T03:31:07.336912398Z","published":"2026-05-05T21:29:31.323Z","related":["CGA-rrcf-x2gc-fp65","openSUSE-SU-2026:10710-1"],"database_specific":{"cna_assigner":"GitHub_M","cwe_ids":["CWE-777"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40110.json"},"references":[{"type":"WEB","url":"https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-40110.json"},{"type":"ADVISORY","url":"https://access.redhat.com/security/cve/CVE-2026-40110"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40110.json"},{"type":"ADVISORY","url":"https://github.com/jupyter-server/jupyter_server/security/advisories/GHSA-24qx-w28j-9m6p"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-40110"},{"type":"REPORT","url":"https://bugzilla.redhat.com/show_bug.cgi?id=2466912"},{"type":"FIX","url":"https://github.com/jupyter-server/jupyter_server/commit/057869a327c46730afede3eab0ca2d2e3e74acea"},{"type":"FIX","url":"https://github.com/jupyter-server/jupyter_server/commit/49b34392feaa97735b3b777e3baf8f22f2a14ed8"},{"type":"FIX","url":"https://github.com/jupyter-server/jupyter_server/pull/603"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/jupyter-server/jupyter_server","events":[{"introduced":"0"},{"fixed":"0ceed45a803ca36735f0fcfeb6d9db9430a50aa0"},{"fixed":"057869a327c46730afede3eab0ca2d2e3e74acea"},{"fixed":"49b34392feaa97735b3b777e3baf8f22f2a14ed8"}],"database_specific":{"extracted_events":[{"introduced":"0"},{"fixed":"2.18.0"}],"source":["CPE_RANGE","REFERENCES"],"cpe":"cpe:2.3:a:jupyter:jupyter_server:*:*:*:*:*:*:*:*"}}],"versions":["v2.17.0","v2.16.0","v2.15.0","v2.14.2","v2.14.1","v2.14.0","v2.13.0","v2.12.5","v2.12.4","v2.12.3","v2.12.2","v2.12.1","v2.12.0","v2.11.2","v2.11.1","v2.11.0","v2.10.1","v2.10.0","v2.9.1","v2.9.0","v2.8.0","v2.7.3","v2.7.2","v2.7.1","v2.7.0","v2.6.0","v2.5.0","v2.4.0","v2.3.0","v2.2.1","v2.2.0","v2.1.0","v2.0.7","v2.0.6","v2.0.5","v2.0.4","v2.0.3","v2.0.2","v2.0.1","v2.0.0","v2.0.0rc8","v2.0.0rc7","v2.0.0rc6","v2.0.0rc5","v2.0.0rc4","v2.0.0rc3","v2.0.0rc2","v2.0.0rc1","v2.0.0rc0","v2.0.0b1","v2.0.0b0","v2.0.0a2","v2.0.0a1","v2.0.0a0","v1.16.0","v1.15.6","v1.15.5","v1.15.4","v1.15.3","v1.15.2","v1.15.1","v1.15.0","v1.13.5","v1.13.4","v1.13.3","v1.13.2","v1.13.1","v1.13.0","v1.12.1","v1.12.0","v1.11.2","v1.11.1","v1.11.0","v1.10.2","v1.10.1","v1.10.0","v1.9.0","v1.8.0","v1.7.0","v1.7.0a2","v1.7.0a1","v1.7.0a0","v1.6.4","v1.6.3","v1.6.2","1.6.1","1.6.0","1.5.1","1.5.0","1.4.1","1.4.0","1.3.0","1.2.3","1.2.2","1.2.1","1.2.0","1.1.4","1.1.3","1.1.2","1.1.1","1.1.0","1.0.5","1.0.4","1.0.3","1.0.2","1.0.1","1.0.0","1.0.0rc16","1.0.0rc15","1.0.0rc14","1.0.0rc13","1.0.0rc12","1.0.0rc11","1.0.0rc10","1.0.0rc9","1.0.0rc8","1.0.0rc7","1.0.0rc6","1.0.0rc5","1.0.0rc4","1.0.0rc3","1.0.0rc2","1.0.0rc1","0.3.0","0.2.0","0.1.1","0.1.0","0.0.5","0.0.4","0.0.3","0.0.2","0.0.1"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-40110.json"}}],"schema_version":"1.7.5","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:L/SC:L/SI:L/SA:L"}]}