<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://cve.radiocsirt.org/rss/recent/pysec/10</id>
  <title>Most recent entries from pysec</title>
  <updated>2026-10-02T09:40:32.322873+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>csirt@opendfir.org</email>
  </author>
  <link href="https://cve.radiocsirt.org" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4059</id>
    <title>PYSEC-2026-4059 — JupyterLab: Cross-site scripting (XSS) in JupyterLab via crafted language package (jupyterlab.json)</title>
    <updated>2026-10-01T17:10:25.828296+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: jupyterlite-core</p>
<p>## Description</p>
<p>A language pack ships a `Plural-Forms` header saying how the language counts, for example `nplurals=2; plural=(n != 1);`. JupyterLab turns that string into a function with `new Function`, so the header gets executed. The check that meant to keep it safe was a regular expression. The regex was anchored at the start but not at the end, so it accepted any string that began with a valid plural rule and ignored everything after it.</p>
<p>A header such as the following passed the check, and the part after the plural rule ran in the JupyterLab page as soon as the first plural string was translated:</p>
<p>```
nplurals=2; plural=(n &gt; 1); &lt;anything here ran as JavaScript&gt;
```</p>
<p>Users are affected if all of the following are true:</p>
<p>- they run JupyterLab 3.0.0 through 4.6.3, or an application that bundles it such as Notebook 7;
- a language pack they did not write is installed in the environment; and
- that language is selected, so its catalogue is loaded</p>
<p>An installation using the default English locale loads no catalogue and is not affected.</p>
<p>&gt; CVE assignment pending, GitHub CNA is experiencing severe backlog</p>
<p>### Impact</p>
<p>The code in the header ran in the JupyterLab page, in the same origin and session as the authenticated user. It could call the Jupyter Server REST API as that user: read and write any file under the server root, start a kernel and run code in it, and open a terminal where terminals are enabled. Nothing had to be clicked; translating one plural string was enough,…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4059"/>
    <published>2026-10-01T16:44:34.781942+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4056</id>
    <title>PYSEC-2026-4056 — JupyterLab: Cross-site scripting (XSS) in JupyterLab via crafted language package (jupyterlab.json)</title>
    <updated>2026-10-01T17:10:25.646257+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: jupyterlab</p>
<p>## Description</p>
<p>A language pack ships a `Plural-Forms` header saying how the language counts, for example `nplurals=2; plural=(n != 1);`. JupyterLab turns that string into a function with `new Function`, so the header gets executed. The check that meant to keep it safe was a regular expression. The regex was anchored at the start but not at the end, so it accepted any string that began with a valid plural rule and ignored everything after it.</p>
<p>A header such as the following passed the check, and the part after the plural rule ran in the JupyterLab page as soon as the first plural string was translated:</p>
<p>```
nplurals=2; plural=(n &gt; 1); &lt;anything here ran as JavaScript&gt;
```</p>
<p>Users are affected if all of the following are true:</p>
<p>- they run JupyterLab 3.0.0 through 4.6.3, or an application that bundles it such as Notebook 7;
- a language pack they did not write is installed in the environment; and
- that language is selected, so its catalogue is loaded</p>
<p>An installation using the default English locale loads no catalogue and is not affected.</p>
<p>&gt; CVE assignment pending, GitHub CNA is experiencing severe backlog</p>
<p>### Impact</p>
<p>The code in the header ran in the JupyterLab page, in the same origin and session as the authenticated user. It could call the Jupyter Server REST API as that user: read and write any file under the server root, start a kernel and run code in it, and open a terminal where terminals are enabled. Nothing had to be clicked; translating one plural string was enough,…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4056"/>
    <published>2026-10-01T16:44:34.714662+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4055</id>
    <title>PYSEC-2026-4055 — JupyterLab: Argument injection in JupyterLab extension uninstall exposes server-readable files and internal URLs</title>
    <updated>2026-10-01T17:10:25.523160+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: jupyterlab</p>
<p>JupyterLab's PyPI extension manager runs `python -m pip uninstall` with the extension name taken from the request body. `ExtensionHandler.post` validates the name for `cmd=install` but not for `cmd=uninstall`, so a name that begins with `-` reaches the command line and pip reads it as an option rather than as a package.</p>
<p>```python
cmdline = [
    sys.executable,
    "-m",
    "pip",
    "uninstall",
    "--yes",
    "--no-input",
    extension,
]
```</p>
<p>An extension name of the form `-r` followed by a path therefore made pip open that path as a requirements file. pip's parse error quotes the line it could not read and names the file it came from, and JupyterLab returned that error in the response body, so the line reached the requester.</p>
<p>This has security implications only for deployments that combine all of the following:</p>
<p>- the (default) PyPI Extension Manager enabled, so that uninstall requests reach pip;
- an authenticated account permitted to call the extension API; and
- kernels and terminals disabled or delegated to remote hosts (otherwise a user with kernel access can read the same files and make the same outbound requests directly, regardless of this endpoint)</p>
<p>Unlike [GHSA-37w4-hwhx-4rc4](https://github.com/jupyterlab/jupyterlab/security/advisories/GHSA-37w4-hwhx-4rc4) and [GHSA-89vp-jrxv-24w8](https://github.com/jupyterlab/jupyterlab/security/advisories/GHSA-89vp-jrxv-24w8), this does not need an allowlist or blocklist to be configured. The uninstall path never cons…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4055"/>
    <published>2026-10-01T16:44:34.569594+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4060</id>
    <title>PYSEC-2026-4060 — JupyterLab: Cross-site scripting (XSS) in JupyterLab via notebook cells pasted from the system clipboard</title>
    <updated>2026-10-01T17:10:25.896827+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: jupyterlite-core</p>
<p>## Description</p>
<p>JupyterLab 4.5.0 enabled copying and pasing cells through the system clipboard. The paste path parses clipboard text as cell JSON and inserts the cells without clearing `metadata.trusted`, so a payload can declare its own output as trusted. JupyterLab does not sanitize a trusted output and evaluates the `&lt;script&gt;` elements it contains, so pasting the cell runs attacker's JavaScript in the JupyterLab origin. The same payload with `"trusted": false` is sanitized.</p>
<p>```json
[
  {
    "cell_type": "code",
    "execution_count": null,
    "source": "",
    "metadata": { "trusted": true },
    "outputs": [
      {
        "output_type": "display_data",
        "metadata": {},
        "data": { "text/html": "&lt;script&gt;/* runs on paste */&lt;/script&gt;" }
      }
    ]
  }
]
```</p>
<p>Users are affected if all of the following are true:</p>
<p>- they run JupyterLab 4.5.0 through 4.6.3, or an application that bundles it such as Notebook 7.5+;
- if running 4.5.2 or newer, `useSystemClipboardForCells` is enabled - it is off by default in 4.5.2+, and always enabled on 4.5.0 and 4.5.1 with no opt-out
- they run a Paste Cells command (e.g. from context menu, command palette, shortcut) while attacker-controlled text is in the clipboard; and
- `pasteCodeCellsWithoutOutput` is off, the default, so the pasted cell keeps its outputs</p>
<p>### Impact</p>
<p>The script runs in the JupyterLab page, in the same origin and session as the authenticated user, so it can call the Jupyter Server REST API as that use…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4060"/>
    <published>2026-10-01T16:44:34.455277+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4058</id>
    <title>PYSEC-2026-4058 — JupyterLab: Cross-site scripting (XSS) in JupyterLab via notebook cells pasted from the system clipboard</title>
    <updated>2026-10-01T17:10:25.963722+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: jupyterlite</p>
<p>## Description</p>
<p>JupyterLab 4.5.0 enabled copying and pasing cells through the system clipboard. The paste path parses clipboard text as cell JSON and inserts the cells without clearing `metadata.trusted`, so a payload can declare its own output as trusted. JupyterLab does not sanitize a trusted output and evaluates the `&lt;script&gt;` elements it contains, so pasting the cell runs attacker's JavaScript in the JupyterLab origin. The same payload with `"trusted": false` is sanitized.</p>
<p>```json
[
  {
    "cell_type": "code",
    "execution_count": null,
    "source": "",
    "metadata": { "trusted": true },
    "outputs": [
      {
        "output_type": "display_data",
        "metadata": {},
        "data": { "text/html": "&lt;script&gt;/* runs on paste */&lt;/script&gt;" }
      }
    ]
  }
]
```</p>
<p>Users are affected if all of the following are true:</p>
<p>- they run JupyterLab 4.5.0 through 4.6.3, or an application that bundles it such as Notebook 7.5+;
- if running 4.5.2 or newer, `useSystemClipboardForCells` is enabled - it is off by default in 4.5.2+, and always enabled on 4.5.0 and 4.5.1 with no opt-out
- they run a Paste Cells command (e.g. from context menu, command palette, shortcut) while attacker-controlled text is in the clipboard; and
- `pasteCodeCellsWithoutOutput` is off, the default, so the pasted cell keeps its outputs</p>
<p>### Impact</p>
<p>The script runs in the JupyterLab page, in the same origin and session as the authenticated user, so it can call the Jupyter Server REST API as that use…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4058"/>
    <published>2026-10-01T16:44:34.300579+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4112</id>
    <title>PYSEC-2026-4112 — JupyterLab: Cross-site scripting (XSS) in JupyterLab via notebook cells pasted from the system clipboard</title>
    <updated>2026-10-01T17:10:33.634055+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: notebook</p>
<p>## Description</p>
<p>JupyterLab 4.5.0 enabled copying and pasing cells through the system clipboard. The paste path parses clipboard text as cell JSON and inserts the cells without clearing `metadata.trusted`, so a payload can declare its own output as trusted. JupyterLab does not sanitize a trusted output and evaluates the `&lt;script&gt;` elements it contains, so pasting the cell runs attacker's JavaScript in the JupyterLab origin. The same payload with `"trusted": false` is sanitized.</p>
<p>```json
[
  {
    "cell_type": "code",
    "execution_count": null,
    "source": "",
    "metadata": { "trusted": true },
    "outputs": [
      {
        "output_type": "display_data",
        "metadata": {},
        "data": { "text/html": "&lt;script&gt;/* runs on paste */&lt;/script&gt;" }
      }
    ]
  }
]
```</p>
<p>Users are affected if all of the following are true:</p>
<p>- they run JupyterLab 4.5.0 through 4.6.3, or an application that bundles it such as Notebook 7.5+;
- if running 4.5.2 or newer, `useSystemClipboardForCells` is enabled - it is off by default in 4.5.2+, and always enabled on 4.5.0 and 4.5.1 with no opt-out
- they run a Paste Cells command (e.g. from context menu, command palette, shortcut) while attacker-controlled text is in the clipboard; and
- `pasteCodeCellsWithoutOutput` is off, the default, so the pasted cell keeps its outputs</p>
<p>### Impact</p>
<p>The script runs in the JupyterLab page, in the same origin and session as the authenticated user, so it can call the Jupyter Server REST API as that use…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4112"/>
    <published>2026-10-01T16:44:34.145574+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4057</id>
    <title>PYSEC-2026-4057 — JupyterLab: Cross-site scripting (XSS) in JupyterLab via notebook cells pasted from the system clipboard</title>
    <updated>2026-10-01T17:10:25.762677+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: jupyterlab</p>
<p>## Description</p>
<p>JupyterLab 4.5.0 enabled copying and pasing cells through the system clipboard. The paste path parses clipboard text as cell JSON and inserts the cells without clearing `metadata.trusted`, so a payload can declare its own output as trusted. JupyterLab does not sanitize a trusted output and evaluates the `&lt;script&gt;` elements it contains, so pasting the cell runs attacker's JavaScript in the JupyterLab origin. The same payload with `"trusted": false` is sanitized.</p>
<p>```json
[
  {
    "cell_type": "code",
    "execution_count": null,
    "source": "",
    "metadata": { "trusted": true },
    "outputs": [
      {
        "output_type": "display_data",
        "metadata": {},
        "data": { "text/html": "&lt;script&gt;/* runs on paste */&lt;/script&gt;" }
      }
    ]
  }
]
```</p>
<p>Users are affected if all of the following are true:</p>
<p>- they run JupyterLab 4.5.0 through 4.6.3, or an application that bundles it such as Notebook 7.5+;
- if running 4.5.2 or newer, `useSystemClipboardForCells` is enabled - it is off by default in 4.5.2+, and always enabled on 4.5.0 and 4.5.1 with no opt-out
- they run a Paste Cells command (e.g. from context menu, command palette, shortcut) while attacker-controlled text is in the clipboard; and
- `pasteCodeCellsWithoutOutput` is off, the default, so the pasted cell keeps its outputs</p>
<p>### Impact</p>
<p>The script runs in the JupyterLab page, in the same origin and session as the authenticated user, so it can call the Jupyter Server REST API as that use…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4057"/>
    <published>2026-10-01T16:44:34.044285+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4159</id>
    <title>PYSEC-2026-4159 — pypdf: Possible long runtimes with large amount of embedded files</title>
    <updated>2026-10-01T17:10:42.141380+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: pypdf</p>
<p>### Impact</p>
<p>An attacker who uses this vulnerability can craft a PDF which leads to long runtimes. This requires accessing the embedded files through the dictionary-based API.</p>
<p>### Patches</p>
<p>This has been fixed in [pypdf==6.19.0](https://github.com/py-pdf/pypdf/releases/tag/6.19.0).</p>
<p>### Workarounds</p>
<p>If you cannot upgrade yet, consider applying the changes from PR [#4081](https://github.com/py-pdf/pypdf/pull/4081).</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4159"/>
    <published>2026-10-01T16:44:33.811924+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4157</id>
    <title>PYSEC-2026-4157 — pypdf: Possible long runtimes when generating appearance streams</title>
    <updated>2026-10-01T17:10:42.015222+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: pypdf</p>
<p>### Impact</p>
<p>An attacker who uses this vulnerability can craft a PDF which leads to long runtimes. This requires updating form field values with flattening enabled, which triggers appearance stream generation.</p>
<p>### Patches</p>
<p>This has been fixed in [pypdf==6.19.0](https://github.com/py-pdf/pypdf/releases/tag/6.19.0).</p>
<p>### Workarounds</p>
<p>If you cannot upgrade yet, consider applying the changes from PR [#4087](https://github.com/py-pdf/pypdf/pull/4087).</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4157"/>
    <published>2026-10-01T16:44:33.743667+00:00</published>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/pysec-2026-4160</id>
    <title>PYSEC-2026-4160 — pypdf: Possible large memory usage when retrieving alphabetical page labels</title>
    <updated>2026-10-01T17:10:42.203842+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: pypdf</p>
<p>### Impact</p>
<p>An attacker who uses this vulnerability can craft a PDF which leads to large memory consumption. This requires accessing the page labels of a document with large alphabetical labels.</p>
<p>### Patches</p>
<p>This has been fixed in [pypdf==6.19.0](https://github.com/py-pdf/pypdf/releases/tag/6.19.0).</p>
<p>### Workarounds</p>
<p>If you cannot upgrade yet, consider applying the changes from PR [#4096](https://github.com/py-pdf/pypdf/pull/4096).</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/pysec-2026-4160"/>
    <published>2026-10-01T16:44:33.671507+00:00</published>
  </entry>
</feed>
