<?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://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-09-29T03:12:29.734835+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" 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://vulnerability.circl.lu/vuln/cve-2026-70626</id>
    <title>CVE-2026-70626 — NLTK before 3.9.4 Symlink Escape via CorpusReader</title>
    <updated>2026-09-29T03:12:30.433651+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> nltk</p>
<p>NLTK versions before 3.9.4 contain a symlink escape vulnerability in CorpusReader.open() that allows local attackers to read arbitrary files outside the corpus root. The vulnerability exists because path validation is lexical and does not account for symlink resolution, enabling attackers to place symlinks inside the corpus root to access files outside the intended boundary.</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/cve-2026-70626"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/ghsa-r6gq-whwq-mvg9</id>
    <title>GHSA-r6gq-whwq-mvg9 — NLTK: Symlink escape in CorpusReader allows arbitrary local file read outside the corpus root</title>
    <updated>2026-09-29T03:12:30.433891+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: nltk</p>
<p>### Summary
`nltk.corpus.reader.api.CorpusReader.open()` can be used to read files outside the intended corpus root via a symlink placed inside that root. Although NLTK blocks absolute paths and `..` traversal, the current boundary check is only lexical and does not account for symlink resolution. This leads to an arbitrary local file read / filesystem sandbox bypass for applications that rely on `CorpusReader` or `FileSystemPathPointer` to restrict file access.</p>
<p>### Details
The vulnerable flow is:</p>
<p>- [`nltk/corpus/reader/api.py:222`](/mnt/Data/my_brains/test/nltk/nltk/corpus/reader/api.py#L222)
  - `CorpusReader.open()` blocks absolute paths and `..`, then calls `self._root.join(file).open()`</p>
<p>- [`nltk/data.py:398`](/mnt/Data/my_brains/test/nltk/nltk/data.py#L398)
  - `FileSystemPathPointer.join()` joins the requested file ID and checks whether the resulting path still appears to remain under the configured root</p>
<p>The problem is that the check is based on the lexical path after `os.path.normpath()`, not on the resolved path after following symlinks.</p>
<p>Current behavior:</p>
<p>1. `CorpusReader.open()` rejects:
   - absolute paths
   - `..` path traversal
2. `FileSystemPathPointer.join()` computes:
   - `joined = os.path.normpath(os.path.join(self._path, fileid))`
   - `root = os.path.normpath(self._path)`
3. It allows the access if `joined` starts with `root`</p>
<p>This misses the case where a path stays inside the root lexically, but resolves outside the root via a symlink already prese…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/ghsa-r6gq-whwq-mvg9"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/pysec-2026-3732</id>
    <title>PYSEC-2026-3732</title>
    <updated>2026-09-29T03:12:30.434058+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: nltk</p>
<p>NLTK versions before 3.9.4 contain a symlink escape vulnerability in CorpusReader.open() that allows local attackers to read arbitrary files outside the corpus root. The vulnerability exists because path validation is lexical and does not account for symlink resolution, enabling attackers to place symlinks inside the corpus root to access files outside the intended boundary.</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/pysec-2026-3732"/>
  </entry>
</feed>
