CVE-2026-49384 Overview
CVE-2026-49384 is a stored cross-site scripting (XSS) vulnerability in JetBrains PyCharm versions prior to 2025.3.4. The flaw resides in the rendering of Markdown cells within Jupyter notebooks. Attackers can embed malicious script payloads inside notebook Markdown content. When a developer opens the notebook in PyCharm, the embedded script executes in the IDE context. This vulnerability is tracked under CWE-79: Improper Neutralization of Input During Web Page Generation.
Critical Impact
Malicious Jupyter notebooks shared through repositories or collaboration channels can execute attacker-controlled script in PyCharm, leading to information disclosure and integrity impact within the IDE session.
Affected Products
- JetBrains PyCharm versions before 2025.3.4
- Jupyter notebook integration component in PyCharm
- All PyCharm editions exposing the Jupyter notebook Markdown renderer
Discovery Timeline
- 2026-05-29 - CVE-2026-49384 published to NVD
- 2026-06-01 - Last updated in NVD database
Technical Details for CVE-2026-49384
Vulnerability Analysis
The vulnerability stems from improper sanitization of Markdown content inside Jupyter notebook cells rendered by PyCharm. Markdown cells permit inline HTML by design. Without strict neutralization, attacker-supplied HTML and script constructs persist when the notebook file is saved and are executed when the file is opened by another user. Because the payload is stored inside the .ipynb file, the attack is persistent across sessions and propagates through any channel that distributes the notebook, including Git repositories, shared drives, and email attachments.
The issue is classified as stored XSS [CWE-79] with required user interaction, meaning a victim must open the malicious notebook in a vulnerable PyCharm build for the payload to fire.
Root Cause
The root cause is missing or insufficient output encoding in the Markdown rendering pipeline used by PyCharm's Jupyter notebook viewer. HTML and script elements embedded in Markdown cells are passed to the rendering surface without adequate neutralization, allowing arbitrary script execution within the IDE's notebook preview context.
Attack Vector
An attacker authors a Jupyter notebook containing a crafted Markdown cell with embedded script content. The attacker distributes the notebook through a repository, package, dataset, or direct share. A developer using a vulnerable PyCharm build opens the notebook, triggering execution of the stored payload. The scope change indicates the executed script can affect resources beyond the immediate rendering component.
No verified public proof-of-concept exists at the time of publication. See the JetBrains Fixed Security Issues advisory for vendor-provided technical context.
// No verified exploit code available.
// The payload resides in a Markdown cell of an .ipynb file
// and is triggered when PyCharm renders the notebook preview.
Detection Methods for CVE-2026-49384
Indicators of Compromise
- Jupyter notebook (.ipynb) files containing <script> tags, inline event handlers (onerror, onload), or javascript: URIs inside Markdown cells
- Notebooks sourced from untrusted repositories, mailing lists, or chat attachments opened by developer endpoints
- Unexpected outbound network connections from PyCharm processes shortly after a notebook is opened
Detection Strategies
- Scan .ipynb files in source repositories for HTML and script content in cells where cell_type equals markdown
- Inspect PyCharm versions across developer fleets and flag installations earlier than 2025.3.4
- Correlate child processes and network activity originating from the PyCharm process tree against developer workstation baselines
Monitoring Recommendations
- Monitor endpoint telemetry for anomalous behavior from JetBrains IDE processes following notebook activity
- Track inbound .ipynb files arriving through email gateways, web downloads, and code collaboration platforms
- Alert on PyCharm versions reported by software inventory tools that remain below the fixed release
How to Mitigate CVE-2026-49384
Immediate Actions Required
- Upgrade PyCharm to version 2025.3.4 or later across all developer workstations
- Audit existing Jupyter notebooks for embedded HTML or script content in Markdown cells before opening
- Restrict opening of notebooks from untrusted sources until the IDE is patched
Patch Information
JetBrains addressed the vulnerability in PyCharm 2025.3.4. Patch details and the full list of fixed security issues are available in the JetBrains Fixed Security Issues advisory.
Workarounds
- Open untrusted notebooks first in a sandboxed environment or a non-vulnerable viewer that does not render HTML in Markdown
- Strip HTML from Markdown cells using a preprocessing script before opening notebooks in PyCharm
- Enforce code review on .ipynb files in shared repositories to block notebooks containing inline scripts
# Preprocess notebooks to remove HTML from Markdown cells before opening
jupyter nbconvert --to notebook --ClearMetadataPreprocessor.enabled=True \
--inplace suspicious_notebook.ipynb
# Grep repositories for risky Markdown content in notebooks
grep -rEn '<script|javascript:|onerror=|onload=' --include='*.ipynb' .
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

