<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 29 Sep 2026 17:15:42 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-65915 — NLTK before 3.10.0 Arbitrary File Read via FileSystemPathPointer</title>
      <link>https://db.gcve.eu/vuln/cve-2026-65915</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; nltk&lt;/p&gt;
&lt;p&gt;NLTK versions before 3.10.0 contain a logic bug in FileSystemPathPointer.open() where the sandbox validation check compares a normalized path against itself, making the security check permanently inert. Attackers can pass file:// URLs to nltk.data.load() to read arbitrary files accessible to the process user, including credentials and configuration files.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; nltk&lt;/p&gt;
&lt;p&gt;NLTK versions before 3.10.0 contain a logic bug in FileSystemPathPointer.open() where the sandbox validation check compares a normalized path against itself, making the security check permanently inert. Attackers can pass file:// URLs to nltk.data.load() to read arbitrary files accessible to the process user, including credentials and configuration files.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-65915</guid>
    </item>
    <item>
      <title>GHSA-72r2-7mfr-5xr9 — NLTK: FileSystemPathPointer.open() sandbox check is dead code — arbitrary file read via file:// protocol</title>
      <link>https://db.gcve.eu/vuln/ghsa-72r2-7mfr-5xr9</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: nltk&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a logic bug in `FileSystemPathPointer.open()` inside `nltk/data.py`
that makes the sandbox check permanently inert. The guard condition is always
`False` — meaning any file the process can read is accessible by passing a
`file://` URL to `nltk.data.load()`.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;In `nltk/data.py`, `FileSystemPathPointer.open()` was patched at some point
with a comment saying &amp;#34;SECURITY PATCH ENFORCING SANDBOX&amp;#34;, but the check
doesn&amp;#39;t work:
```python
def open(self, encoding=None):
    path = os.path.normpath(self._path)&lt;/p&gt;
&lt;p&gt;# Block raw absolute reads such as &amp;#34;/&amp;#34; &amp;#34;C:\\Windows&amp;#34; etc.
    if os.path.isabs(path) and path != os.path.normpath(self._path):
        raise ValueError(f&amp;#34;Direct absolute file access blocked: {path}&amp;#34;)&lt;/p&gt;
&lt;p&gt;stream = open(self._path, &amp;#34;rb&amp;#34;)
```&lt;/p&gt;
&lt;p&gt;`path` is set to `os.path.normpath(self._path)` on line 1, then compared
against `os.path.normpath(self._path)` again in the condition. They are
always equal. The `ValueError` never fires.&lt;/p&gt;
&lt;p&gt;On top of that, `__init__` already calls `os.path.abspath()` before storing
`self._path`, so it&amp;#39;s normalized before `open()` is even called. Running
`normpath` on it again changes nothing.&lt;/p&gt;
&lt;p&gt;The `stream = open(self._path, &amp;#34;rb&amp;#34;)` line is always reached regardless of
what path was passed in.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;Tested on Python 3.11, NLTK 3.9.1, Ubuntu 22.04.
```python
import nltk
from nltk.data import FileSystemPathPointer&lt;/p&gt;
&lt;p&gt;# direct construction
ptr = FileSystemPathPointer(&amp;#34;/etc/passwd&amp;#34;)
with ptr.open() as f:
    print(f.r…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: nltk&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a logic bug in `FileSystemPathPointer.open()` inside `nltk/data.py`
that makes the sandbox check permanently inert. The guard condition is always
`False` — meaning any file the process can read is accessible by passing a
`file://` URL to `nltk.data.load()`.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;In `nltk/data.py`, `FileSystemPathPointer.open()` was patched at some point
with a comment saying &amp;#34;SECURITY PATCH ENFORCING SANDBOX&amp;#34;, but the check
doesn&amp;#39;t work:
```python
def open(self, encoding=None):
    path = os.path.normpath(self._path)&lt;/p&gt;
&lt;p&gt;# Block raw absolute reads such as &amp;#34;/&amp;#34; &amp;#34;C:\\Windows&amp;#34; etc.
    if os.path.isabs(path) and path != os.path.normpath(self._path):
        raise ValueError(f&amp;#34;Direct absolute file access blocked: {path}&amp;#34;)&lt;/p&gt;
&lt;p&gt;stream = open(self._path, &amp;#34;rb&amp;#34;)
```&lt;/p&gt;
&lt;p&gt;`path` is set to `os.path.normpath(self._path)` on line 1, then compared
against `os.path.normpath(self._path)` again in the condition. They are
always equal. The `ValueError` never fires.&lt;/p&gt;
&lt;p&gt;On top of that, `__init__` already calls `os.path.abspath()` before storing
`self._path`, so it&amp;#39;s normalized before `open()` is even called. Running
`normpath` on it again changes nothing.&lt;/p&gt;
&lt;p&gt;The `stream = open(self._path, &amp;#34;rb&amp;#34;)` line is always reached regardless of
what path was passed in.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;Tested on Python 3.11, NLTK 3.9.1, Ubuntu 22.04.
```python
import nltk
from nltk.data import FileSystemPathPointer&lt;/p&gt;
&lt;p&gt;# direct construction
ptr = FileSystemPathPointer(&amp;#34;/etc/passwd&amp;#34;)
with ptr.open() as f:
    print(f.r…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-72r2-7mfr-5xr9</guid>
    </item>
    <item>
      <title>PYSEC-2026-3731</title>
      <link>https://db.gcve.eu/vuln/pysec-2026-3731</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: nltk&lt;/p&gt;
&lt;p&gt;NLTK versions before 3.10.0 contain a logic bug in FileSystemPathPointer.open() where the sandbox validation check compares a normalized path against itself, making the security check permanently inert. Attackers can pass file:// URLs to nltk.data.load() to read arbitrary files accessible to the process user, including credentials and configuration files.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: nltk&lt;/p&gt;
&lt;p&gt;NLTK versions before 3.10.0 contain a logic bug in FileSystemPathPointer.open() where the sandbox validation check compares a normalized path against itself, making the security check permanently inert. Attackers can pass file:// URLs to nltk.data.load() to read arbitrary files accessible to the process user, including credentials and configuration files.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/pysec-2026-3731</guid>
    </item>
  </channel>
</rss>
