JupyterLab: Command link trust prompt in JupyterLab can trust a document other than the one clicked
## Description A Markdown file or a notebook output can carry a button that runs a JupyterLab command. Since 4.5.7 the first click on such a button opens a prompt naming the command, with Cancel, Run Once and Trust. Choosing Trust runs the command and marks the document trusted, so its later buttons run without a prompt. Which document gets marked is decided when the user answers, not when they click. Both trust commands read whichever document is current at that moment: `markdownviewer:trust` uses `tracker.currentWidget`, and `notebook:trust` uses the equivalent lookup. If another document becomes current while the prompt is open, that document is the one marked trusted, and the one the user was looking at stays untrusted. Users are affected if all of the following are true: - they run JupyterLab 4.5.7 through 4.6.3, or an application that bundles it such as Notebook 7.5+; - they open a Markdown file or notebook from someone else and click a button in it; - they answer Trust rather than Cancel or Run Once; and - a second document becomes the current one while the prompt is open, for example through a workspace restoring at startup, an extension activating a widget, or a command that opens a file ### Impact The user loses control over which document they trusted. Every button in the document that was (incorrectly) marked as trusted runs from then on without a prompt, so if that document also came from an untrusted source, its buttons fire on a single click with no confirmatio
- Products
- jupyterlab, jupyterlite-core, notebook
- Affected versions
- 0.7.5, 0.7.6, 0.8.0, 0.8.0a0, 0.8.0a1, 0.8.0a2, 0.8.0b0, 0.8.0b1, 0.8.0rc0, 0.8.1, 0.8.2, 0.8.3, 4.5.10, 4.5.7, 4.5.8, 4.5.9, 4.6.0, 4.6.1, 4.6.2, 4.6.3, 7.5.6, 7.5.7, 7.5.8, 7.6.0, 7.6.0a0, 7.6.0a1, 7.6.0a2, 7.6.0a3, 7.6.0a4, 7.6.0a5, 7.6.0b0, 7.6.0b1, 7.6.0rc0, 7.6.0rc1, 7.6.1, 7.6.2
- Fixed versions
- 0.8.4, 4.5.11, 4.6.4, 7.6.3
- CVEs
- CVE-2026-102832
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 30 Oct 2026, 19:14 UTC · Revision 1
Source evidence
JupyterLab: Command link trust prompt in JupyterLab can trust a document other than the one clicked
core-osv · Original sourcePublished 15 Oct 2026, 20:22 UTC
## Description A Markdown file or a notebook output can carry a button that runs a JupyterLab command. Since 4.5.7 the first click on such a button opens a prompt naming the command, with Cancel, Run Once and Trust. Choosing Trust runs the command and marks the document trusted, so its later buttons run without a prompt. Which document gets marked is decided when the user answers, not when they click. Both trust commands read whichever document is current at that moment: `markdownviewer:trust` uses `tracker.currentWidget`, and `notebook:trust` uses the equivalent lookup. If another document becomes current while the prompt is open, that document is the one marked trusted, and the one the user was looking at stays untrusted. Users are affected if all of the following are true: - they run JupyterLab 4.5.7 through 4.6.3, or an application that bundles it such as Notebook 7.5+; - they open a Markdown file or notebook from someone else and click a button in it; - they answer Trust rather than Cancel or Run Once; and - a second document becomes the current one while the prompt is open, for example through a workspace restoring at startup, an extension activating a widget, or a command that opens a file ### Impact The user loses control over which document they trusted. Every button in the document that was (incorrectly) marked as trusted runs from then on without a prompt, so if that document also came from an untrusted source, its buttons fire on a single click with no confirmatio
osv:GHSA-jwrc-gm9j-263p
jupyterlab
Fixed versions: 4.6.4
jupyterlab
Fixed versions: 4.5.11
notebook
Fixed versions: 7.6.3
jupyterlite-core
Fixed versions: 0.8.4
Complete source record
{
"id": "9f52dc5280eadeea20e499cea226e4b515c45dc0807a678ce56a65277b0f32a9",
"url": "https://osv.dev/vulnerability/GHSA-jwrc-gm9j-263p",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "JupyterLab: Command link trust prompt in JupyterLab can trust a document other than the one clicked",
"summary": "## Description A Markdown file or a notebook output can carry a button that runs a JupyterLab command. Since 4.5.7 the first click on such a button opens a prompt naming the command, with Cancel, Run Once and Trust. Choosing Trust runs the command and marks the document trusted, so its later buttons run without a prompt. Which document gets marked is decided when the user answers, not when they click. Both trust commands read whichever document is current at that moment: `markdownviewer:trust` uses `tracker.currentWidget`, and `notebook:trust` uses the equivalent lookup. If another document becomes current while the prompt is open, that document is the one marked trusted, and the one the user was looking at stays untrusted. Users are affected if all of the following are true: - they run JupyterLab 4.5.7 through 4.6.3, or an application that bundles it such as Notebook 7.5+; - they open a Markdown file or notebook from someone else and click a button in it; - they answer Trust rather than Cancel or Run Once; and - a second document becomes the current one while the prompt is open, for example through a workspace restoring at startup, an extension activating a widget, or a command that opens a file ### Impact The user loses control over which document they trusted. Every button in the document that was (incorrectly) marked as trusted runs from then on without a prompt, so if that document also came from an untrusted source, its buttons fire on a single click with no confirmatio",
"evidence": "osv:GHSA-jwrc-gm9j-263p",
"products": [
{
"name": {
"value": "jupyterlab",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "4.6.4",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "4.6.0",
"evidence": "/affected/0/versions"
},
{
"value": "4.6.1",
"evidence": "/affected/0/versions"
},
{
"value": "4.6.2",
"evidence": "/affected/0/versions"
},
{
"value": "4.6.3",
"evidence": "/affected/0/versions"
}
]
},
{
"name": {
"value": "jupyterlab",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "4.5.11",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": [
{
"value": "4.5.10",
"evidence": "/affected/1/versions"
},
{
"value": "4.5.7",
"evidence": "/affected/1/versions"
},
{
"value": "4.5.8",
"evidence": "/affected/1/versions"
},
{
"value": "4.5.9",
"evidence": "/affected/1/versions"
}
]
},
{
"name": {
"value": "notebook",
"evidence": "/affected/2/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "7.6.3",
"evidence": "/affected/2/ranges"
}
],
"affected_versions": [
{
"value": "7.5.6",
"evidence": "/affected/2/versions"
},
{
"value": "7.5.7",
"evidence": "/affected/2/versions"
},
{
"value": "7.5.8",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0a0",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0a1",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0a2",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0a3",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0a4",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0a5",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0b0",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0b1",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0rc0",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.0rc1",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.1",
"evidence": "/affected/2/versions"
},
{
"value": "7.6.2",
"evidence": "/affected/2/versions"
}
]
},
{
"name": {
"value": "jupyterlite-core",
"evidence": "/affected/3/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "0.8.4",
"evidence": "/affected/3/ranges"
}
],
"affected_versions": [
{
"value": "0.7.5",
"evidence": "/affected/3/versions"
},
{
"value": "0.7.6",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.0",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.0a0",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.0a1",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.0a2",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.0b0",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.0b1",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.0rc0",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.1",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.2",
"evidence": "/affected/3/versions"
},
{
"value": "0.8.3",
"evidence": "/affected/3/versions"
}
]
}
],
"severity": "medium",
"structured": {
"id": "GHSA-jwrc-gm9j-263p",
"aliases": [
"CVE-2026-102832",
"GHSA-jwrc-gm9j-263p"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N"
}
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "4.6.0"
},
{
"fixed": "4.6.4"
}
]
}
],
"package": {
"name": "jupyterlab",
"purl": "pkg:pypi/jupyterlab",
"ecosystem": "PyPI"
},
"versions": [
"4.6.0",
"4.6.1",
"4.6.2",
"4.6.3"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-jwrc-gm9j-263p/GHSA-jwrc-gm9j-263p.json",
"last_known_affected_version_range": "<= 4.6.3"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "4.5.7"
},
{
"fixed": "4.5.11"
}
]
}
],
"package": {
"name": "jupyterlab",
"purl": "pkg:pypi/jupyterlab",
"ecosystem": "PyPI"
},
"versions": [
"4.5.10",
"4.5.7",
"4.5.8",
"4.5.9"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-jwrc-gm9j-263p/GHSA-jwrc-gm9j-263p.json",
"last_known_affected_version_range": "<= 4.5.10"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "7.5.6"
},
{
"fixed": "7.6.3"
}
]
}
],
"package": {
"name": "notebook",
"purl": "pkg:pypi/notebook",
"ecosystem": "PyPI"
},
"versions": [
"7.5.6",
"7.5.7",
"7.5.8",
"7.6.0",
"7.6.0a0",
"7.6.0a1",
"7.6.0a2",
"7.6.0a3",
"7.6.0a4",
"7.6.0a5",
"7.6.0b0",
"7.6.0b1",
"7.6.0rc0",
"7.6.0rc1",
"7.6.1",
"7.6.2"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-jwrc-gm9j-263p/GHSA-jwrc-gm9j-263p.json",
"last_known_affected_version_range": "<= 7.6.2"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0.7.5"
},
{
"fixed": "0.8.4"
}
]
}
],
"package": {
"name": "jupyterlite-core",
"purl": "pkg:pypi/jupyterlite-core",
"ecosystem": "PyPI"
},
"versions": [
"0.7.5",
"0.7.6",
"0.8.0",
"0.8.0a0",
"0.8.0a1",
"0.8.0a2",
"0.8.0b0",
"0.8.0b1",
"0.8.0rc0",
"0.8.1",
"0.8.2",
"0.8.3"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-jwrc-gm9j-263p/GHSA-jwrc-gm9j-263p.json",
"last_known_affected_version_range": "<= 0.8.3"
}
}
],
"modified": "2026-10-15T20:30:07.110246844Z",
"provider": "osv",
"references": [
"https://github.com/jupyterlab/jupyterlab/security/advisories/GHSA-jwrc-gm9j-263p",
"https://nvd.nist.gov/vuln/detail/CVE-2026-102832",
"https://github.com/jupyterlab/jupyterlab/commit/0fc18ab4ef67e431a8f6560e387193baf786c70a",
"https://github.com/jupyterlab/jupyterlab/commit/b64bc88b8ca034cf158604a5cc48ca9170ea453b",
"https://github.com/jupyterlab/jupyterlab/commit/f7e5f9803fdf2aaaa0e9bfb9cc73386a8cc5f0b2",
"https://github.com/jupyterlab/jupyterlab",
"https://github.com/jupyterlab/jupyterlab/releases/tag/v4.5.11",
"https://github.com/jupyterlab/jupyterlab/releases/tag/v4.6.4"
],
"provider_metadata": {
"cwe_ids": [
"CWE-367",
"CWE-863"
],
"severity": "MODERATE",
"github_reviewed": true,
"nvd_published_at": "2026-10-13T16:17:09Z",
"github_reviewed_at": "2026-10-15T20:22:13Z"
}
},
"related_cves": [
{
"value": "CVE-2026-102832",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 336055,
"published_at": "2026-10-15T20:22:13+00:00"
}