CVE-2021-32797
JupyterLab: XSS due to lack of sanitization of the action attribute of an html <form>
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. In affected versions untrusted notebook can execute code on load. In particular JupyterLab doesn’t sanitize the action attribute of html <form>. Using this it is possible to trigger the form validation outside of the form itself. This is a remote code execution, but requires user action to open a notebook.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.4
JupyterLab: XSS due to lack of sanitization of the action attribute of an html <form>
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. In affected versions untrusted notebook can execute code on load. In particular JupyterLab doesn’t sanitize the action attribute of html <form>. Using this it is possible to trigger the form validation outside of the form itself. This is a remote code execution, but requires user action to open a notebook.
- Record
CVE-2021-32797- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2021-0107
7.4
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. In affected versions untrusted notebook can execute code on load. In particular JupyterLab doesn’t sanitize the action attribute of html <form>. Using this it is possible to trigger the form validation outside of the form itself. This is a remote code execution, but requires user action to open a notebook.
- Record
EUVD-2021-0107- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-4952-p58q-6crx
6.3
JupyterLab: XSS due to lack of sanitization of the action attribute of an html <form>
Impact
Untrusted notebook can execute code on load. This is a remote code execution, but requires user action to open a notebook.
Patches
Patched in the following versions: 3.1.4, 3.0.17, 2.3.2, 2.2.10, 1.2.21.
References
OWASP Page on Restricting Form Submissions
For more information
If you have any questions or comments about this advisory, or vulnerabilities to report, please email our security list [email protected].
Credit: Guillaume Jeanne from Google
- Record
GHSA-4952-p58q-6crx- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N - CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N - Weakness
- CWE-75, CWE-79, CWE-87
- Updated
- 2026-11-02
NVD
7.4
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. In affected versions untrusted notebook can execute code on load. In particular JupyterLab doesn’t sanitize the action attribute of html <form>. Using this it is possible to trigger the form validation outside of the form itself. This is a remote code execution, but requires user action to open a notebook.
- Record
CVE-2021-32797- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N - CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - CVSS 2.0
- 6.8 Medium
AV:N/AC:M/Au:N/C:P/I:P/A:P - Weakness
- CWE-79
- Updated
- 2026-11-02
OSV
9.6
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. In affected versions untrusted notebook can execute code on load. In particular JupyterLab doesn’t sanitize the action attribute of html <form>. Using this it is possible to trigger the form validation outside of the form itself. This is a remote code execution, but requires user action to open a notebook.
- Record
CVE-2021-32797- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - Updated
- 2026-11-02
OSVGHSA-4952-p58q-6crx
6.3
JupyterLab: XSS due to lack of sanitization of the action attribute of an html <form>
Impact
Untrusted notebook can execute code on load. This is a remote code execution, but requires user action to open a notebook.
Patches
Patched in the following versions: 3.1.4, 3.0.17, 2.3.2, 2.2.10, 1.2.21.
References
OWASP Page on Restricting Form Submissions
For more information
If you have any questions or comments about this advisory, or vulnerabilities to report, please email our security list [email protected].
Credit: Guillaume Jeanne from Google
- Record
GHSA-4952-p58q-6crx- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N - CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N - Weakness
- CWE-75, CWE-79, CWE-87
- Updated
- 2026-11-02
Show 5 moreShow less
OSVPYSEC-2026-688
6.3
JupyterLab: XSS due to lack of sanitization of the action attribute of an html <form>
Impact
Untrusted notebook can execute code on load. This is a remote code execution, but requires user action to open a notebook.
Patches
Patched in the following versions: 3.1.4, 3.0.17, 2.3.2, 2.2.10, 1.2.21.
References
OWASP Page on Restricting Form Submissions
For more information
If you have any questions or comments about this advisory, or vulnerabilities to report, please email our security list [email protected].
Credit: Guillaume Jeanne from Google
- Record
PYSEC-2026-688- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N - CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N - Updated
- 2026-11-02
OSVBIT-jupyterlab-2021-32797 No score
JupyterLab: XSS due to lack of sanitization of the action attribute of an html <form>
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. In affected versions untrusted notebook can execute code on load. In particular JupyterLab doesn’t sanitize the action attribute of html <form>. Using this it is possible to trigger the form validation outside of the form itself. This is a remote code execution, but requires user action to open a notebook.
- Record
BIT-jupyterlab-2021-32797- Updated
- 2026-11-02
OSVMGASA-2023-0060 No score
Updated python-jupyterlab packages fix security vulnerability
Remote code execution, but requires user action to open a notebook. (CVE-2021-32797), and other bug fixes.
- Record
MGASA-2023-0060- Updated
- 2026-11-02
OSVopenSUSE-SU-2022:10075-1 No score
Security update for python-jupyterlab
This update for python-jupyterlab fixes the following issues:
Update to 2.2.10:
- Remove
formtags'actionattribute during sanitizing, to prevent an XSS (CVE-2021-32797) (boo#1196663) - Header ‘Content-Type’ should not be overwritten
- Do not use token parameters in websocket urls
- Properly handle errors in async browser_check
- Cells can no longer be executed while kernels are terminating or restarting. There is a new status for these events on the Kernel Indicator
- Add styling for high memory usage warning in status bar with nbresuse
- Adds support for Python version 3.10
- Support live editing of SVG with updating rendering
- Lazy load codemirror theme stylesheets
- Add feature request template + slight reorg in readme
- Add link to react example in extension-examples repo
- Close correct tab with close tab
- Remove unused css rules
- Simplified multicursor backspace code
- Fix recent breaking changes to normalizepath in filebrowser
- Handle quit_button when launched as an extension
- Add worker-loader
- Fix icon sidebar height for third party extensions
- Scrolls cells into view after deletion
- Support Node.js 10+
- Select search text when focusing the search overlay
- Throttle fetch requests in the setting registry’s data connector
- Avoid redundant checkpoint calls on loading a notebook
- Record
openSUSE-SU-2022:10075-1- Updated
- 2026-11-02
OSVPYSEC-2021-130 No score
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. In affected versions untrusted notebook can execute code on load. In particular JupyterLab doesn’t sanitize the action attribute of html <form>. Using this it is possible to trigger the form validation outside of the form itself. This is a remote code execution, but requires user action to open a notebook.
- Record
PYSEC-2021-130- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
jupyterlabPyPI |
before 1.2.21 | 1.2.21 |
notebookPyPI |
before 5.7.11 | 5.7.11 |
notebookPyPI |
6.0.0 up to 6.4.1 | 6.4.1 |
jupyterlabPyPI |
2.0.0a0 up to 2.2.10 | 2.2.10 |
jupyterlabPyPI |
2.3.0a0 up to 2.3.2 | 2.3.2 |
jupyterlabPyPI |
3.0.0a0 up to 3.0.17 | 3.0.17 |
jupyterlabPyPI |
3.1.0a0 up to 3.1.4 | 3.1.4 |
jupyterlabBitnami |
before 1.2.21, 2.0.0 up to 2.2.10, 2.3.0 up to 2.3.2, 3.0.0 up to 3.0.17, 3.1.0 up to 3.1.4 | 1.2.212.2.102.3.23.0.173.1.4 |
jupyterlabPyPI |
before 1.2.21, plus listed versions 0.0.10.0.100.0.130.0.20.0.3 Show 45 moreShow less0.0.40.0.50.0.60.0.70.0.80.0.90.1.10.1.20.10.00.11.00.11.10.11.20.11.30.12.00.12.10.13.00.13.10.13.20.14.00.15.00.15.10.16.00.16.20.17.00.17.10.17.20.17.40.17.50.18.00.18.0.dev10.18.10.19.00.2.00.20.00.20.0rc10.20.10.20.20.20.30.20.40.21.00.21.0rc10.21.0rc20.21.0rc30.21.0rc40.21.0rc5 |
1.2.21 |
jupyterlabPyPI |
2.0.0a0 up to 2.2.10, plus listed versions 2.0.02.0.0a12.0.0a32.0.0a42.0.0b1 Show 29 moreShow less2.0.0b22.0.0b32.0.0rc02.0.0rc12.0.0rc22.0.12.0.1rc02.0.22.1.02.1.0a02.1.0b02.1.0rc02.1.12.1.22.1.32.1.42.1.52.2.02.2.0a02.2.0a12.2.0rc12.2.12.2.22.2.42.2.52.2.62.2.72.2.82.2.9 |
2.2.10 |
Show 11 moreShow less
| Package | Affected | Fixed |
|---|---|---|
jupyterlabPyPI |
2.3.0a0 up to 2.3.2, plus listed versions 2.3.02.3.0a12.3.0a22.3.0rc02.3.1 |
2.3.2 |
jupyterlabPyPI |
3.0.0a0 up to 3.0.17, plus listed versions 3.0.03.0.0a103.0.0a113.0.0a123.0.0a13 Show 45 moreShow less3.0.0a143.0.0a33.0.0a43.0.0a53.0.0a63.0.0a73.0.0a83.0.0a93.0.0b13.0.0b23.0.0b33.0.0b43.0.0b63.0.0b73.0.0b83.0.0rc03.0.0rc13.0.0rc103.0.0rc113.0.0rc123.0.0rc133.0.0rc143.0.0rc153.0.0rc23.0.0rc33.0.0rc43.0.0rc53.0.0rc63.0.0rc73.0.0rc83.0.0rc93.0.13.0.103.0.113.0.123.0.133.0.143.0.153.0.163.0.23.0.33.0.43.0.53.0.63.0.7 |
3.0.17 |
jupyterlabPyPI |
3.1.0a0 up to 3.1.4, plus listed versions 3.1.03.1.0a13.1.0a103.1.0a113.1.0a12 Show 15 moreShow less3.1.0a133.1.0a23.1.0a33.1.0a43.1.0a53.1.0a63.1.0a73.1.0a83.1.0a93.1.0b03.1.0b13.1.0rc13.1.0rc23.1.13.1.2 |
3.1.4 |
notebookPyPI |
before 5.7.11, plus listed versions 0.0.04.0.04.0.14.0.24.0.4 Show 45 moreShow less4.0.54.0.64.1.04.2.04.2.0b14.2.14.2.24.2.34.3.04.3.14.3.24.4.04.4.15.0.05.0.0b15.0.0b25.0.0rc15.0.0rc25.1.05.1.0rc15.1.0rc25.1.0rc35.2.05.2.0rc15.2.15.2.1rc15.2.25.3.05.3.0rc15.3.15.4.05.4.15.5.05.5.0rc15.6.05.6.0rc15.7.05.7.15.7.105.7.25.7.35.7.45.7.55.7.65.7.8 |
5.7.11 |
notebookPyPI |
6.0.0 up to 6.4.1, plus listed versions 6.0.16.0.26.0.36.1.06.1.0rc1 Show 12 moreShow less6.1.16.1.26.1.36.1.46.1.56.1.66.2.06.3.06.4.06.4.0a06.4.0a16.4.0rc0 |
6.4.1 |
python-jupyterlabMageia:8 |
before 2.2.10-1.mga8 | 2.2.10-1.mga8 |
jupyter-jupyterlab-serverMageia:8 |
before 1.1.5-1.mga8 | 1.1.5-1.mga8 |
jupyterlabPyPI |
before 1.2.21, 2 up to 2.2.10, 2.3 up to 2.3.2, 3 up to 3.0.17, 3.1 up to 3.1.4, plus listed versions 0.0.10.0.100.0.130.0.20.0.3 Show 45 moreShow less0.0.40.0.50.0.60.0.70.0.80.0.90.1.10.1.20.10.00.11.00.11.10.11.20.11.30.12.00.12.10.13.00.13.10.13.20.14.00.15.00.15.10.16.00.16.20.17.00.17.10.17.20.17.40.17.50.18.00.18.0.dev10.18.10.19.00.2.00.20.00.20.0rc10.20.10.20.20.20.30.20.40.21.00.21.0rc10.21.0rc20.21.0rc30.21.0rc40.21.0rc5 |
1.2.212.2.102.3.23.0.173.1.4 |
notebookPyPI |
before 5.7.11, 6.0.0 up to 6.4.1, plus listed versions 0.0.04.0.04.0.14.0.24.0.4 Show 45 moreShow less4.0.54.0.64.1.04.2.04.2.0b14.2.14.2.24.2.34.3.04.3.14.3.24.4.04.4.15.0.05.0.0b15.0.0b25.0.0rc15.0.0rc25.1.05.1.0rc15.1.0rc25.1.0rc35.2.05.2.0rc15.2.15.2.1rc15.2.25.3.05.3.0rc15.3.15.4.05.4.15.5.05.5.0rc15.6.05.6.0rc15.7.05.7.15.7.105.7.25.7.35.7.45.7.55.7.65.7.8 |
5.7.116.4.1 |
python-jupyterlabSUSE:Package Hub 15 SP4 |
before 2.2.10-bp154.2.3.1 | 2.2.10-bp154.2.3.1 |
python-jupyterlabopenSUSE:Leap 15.4 |
before 2.2.10-bp154.2.3.1 | 2.2.10-bp154.2.3.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| aliases | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2021-32797 is a high vulnerability (CVSS 7.4) in Jupyter Jupyterlab, published August 9, 2021. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 2.66%, the 85th percentile. Fixed in jupyterlab 1.2.21.
References
github.com/jupyterlab/jupyterlab/security/advisories/GHSA-4952-p58q-6crx
github.com/jupyterlab/jupyterlab/commit/504825938c0abfa2fb8ff8d529308830a5ae42ed
nvd.nist.gov/vuln/detail/CVE-2021-32797
github.com/google/security-research/security/advisories/GHSA-c469-p3jp-2vhx
github.com/pypa/advisory-database/tree/main/vulns/jupyterlab/PYSEC-2021-130.yaml
github.com/advisories/GHSA-4952-p58q-6crx
Left out here: 462 versions. The JSON record has them.