Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-38360 — Advisory: CVE-2026-38360 path traversal (CWE-22) no dash-uploader (Python/PyPI) | Kitploit
Ferramentas/GitHubGitHub/a1ohadance/cve-2026-38360
Análise de VulnerabilidadesAnálise de CódigoExploraçãoSegurança WebTestes de PenetraçãoAprendizado e Educação
GitHuba1ohadance/cve-2026-38360

CVE-2026-38360

Advisory: CVE-2026-38360 path traversal (CWE-22) no dash-uploader (Python/PyPI)

Ver Repositório
217há 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-38360: Path Traversal no dash-uploader

CVE NVD CWE Severity Patch Auth Version PyPI Downloads Total Downloads License

Path traversal não autenticado em fohrloop/dash-uploader (Python, PyPI) permitindo escrita arbitrária de arquivos, levando a (mas não se limitando a) Execução Remota de Código (RCE), sobrescrita de código fonte da aplicação, XSS armazenado e instalação persistente de backdoor.

⚠️ Nenhum patch está disponível, e nenhum será lançado

O repositório foi arquivado em 2025-07-19 sem mantenedor ativo. Todas as versões publicadas (0.1.0 até 0.7.0a2) são afetadas e continuarão assim. O pacote ainda tem aproximadamente 28.000 downloads mensais.

Qualquer um que execute dash-uploader em produção deve aplicar uma mitigação por conta própria. A correção recomendada é migrar para o componente dcc.Upload embutido do Plotly Dash. Veja Mitigação para opções completas.

ID CVECVE-2026-38360 (NVD)
VulnerabilidadePath Traversal (CWE-22)
CVSS 3.19.8 / Crítico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
Produtodash-uploader
Versões afetadas0.1.0 até 0.7.0a2 (todas as 18 versões)
Versão corrigidanenhuma (projeto arquivado em 2025-07-19)
Vetor de ataqueRemoto, não autenticado
DescobridorMuhammad Fitri Bin Mohd Sultan
Atribuído porMITRE, 2026-05-07
RelacionadoCVE-2026-38361 (DoS na mesma biblioteca)

Descrição

Três parâmetros controlados pelo usuário de request.form.get() em dash_uploader/httprequesthandler.py são passados diretamente para os.path.join() e os.makedirs() sem qualquer saneamento ou validação:

  1. upload_id (linha 57 → linha 161, BaseHttpRequestHandler.get_temp_root): controla o diretório de destino. Um atacante pode enviar upload_id=../../../../usr/local/lib/python3.10/site-packages e os arquivos são escritos no diretório de pacotes do Python.

  2. resumableFilename (linha 51 → linha 108, BaseHttpRequestHandler._post): controla o nome final do arquivo. Um atacante pode atravessar para fora do diretório de upload através do nome do arquivo mesmo com um upload_id legítimo.

  3. resumableIdentifier (linha 54 → linha 64, BaseHttpRequestHandler._post): usado com os.makedirs() para criar o diretório temporário. Um atacante pode criar diretórios arbitrários em qualquer lugar do sistema de arquivos.

O endpoint de upload (/API/dash-uploader por padrão) não requer autenticação. O hook http_request_handler adicionado na v0.5.0 permite verificações pré-requisição via post_before(), mas o método vulnerável _post() lê todos os parâmetros diretamente de request.form após o hook retornar. O hook não pode sanear parâmetros antes da biblioteca processá-los. Um desenvolvedor que adiciona autenticação via hook ainda está vulnerável a path traversal de um usuário autenticado.

Código vulnerável

# dash_uploader/httprequesthandler.py
def _post(self):
    resumableFilename = request.form.get("resumableFilename", default="error", type=str)
    resumableIdentifier = request.form.get("resumableIdentifier", default="error", type=str)
    upload_id = request.form.get("upload_id", default="", type=str)
    ...
    temp_root = self.get_temp_root(upload_id)                          # upload_id flows in here
    temp_dir = os.path.join(temp_root, resumableIdentifier)            # raw user input -> os.path.join
    if not os.path.isdir(temp_dir):
        os.makedirs(temp_dir)                                          # raw user input -> os.makedirs

def get_temp_root(self, upload_id):
    return os.path.join(self.upload_folder, upload_id)                 # no sanitization: ../../ escapes upload_folder

Três sinks de traversal independentes compartilham a mesma causa raiz: valores do formulário chegam a os.path.join e os.makedirs sem validação.

Vetores de ataque

Um atacante remoto não autenticado envia uma requisição HTTP POST multipart para o endpoint de upload. Ao injetar sequências de path traversal (../) no parâmetro de formulário upload_id, o atacante controla o diretório de destino do arquivo enviado. Por exemplo, upload_id=../../../../usr/local/lib/python3.10/site-packages escreve arquivos no diretório de pacotes do Python, permitindo RCE na próxima inicialização do interpretador via auto-execução de .pth.

Nenhuma autenticação, token de sessão ou token CSRF é necessário. Dois parâmetros adicionais (resumableFilename e resumableIdentifier) fornecem vetores de traversal independentes através do mesmo endpoint. A configuração padrão da biblioteca conforme mostrado na documentação oficial de início rápido é explorável com um único comando curl.

Impacto

Escrita arbitrária de arquivos em qualquer diretório gravável pelo processo do servidor. Isso se traduz em Execução Remota de Código (RCE) através de várias primitivas conhecidas:

Primitivas RCE

  • Arquivo Python .pth colocado em site-packages. Executa código fornecido pelo atacante na próxima inicialização do interpretador.
  • Injeção de sitecustomize.py ou usercustomize.py. Executa em toda inicialização do Python.
  • Sobrescrita de um módulo Python importável no diretório de pacotes da aplicação. Executa na próxima importação ou reciclagem de worker.
  • Sobrescrita do ponto de entrada WSGI/ASGI (ex.: app.wsgi, wsgi.py). Executa na próxima recarga de worker.
  • Drop-in no Cron (/etc/cron.d/, /etc/cron.hourly/, spool de crontab do usuário) quando o processo tem os privilégios necessários. Execução agendada.
  • Drop-in de unit systemd ou unit de usuário (/etc/systemd/system/, ~/.config/systemd/user/). Executa na próxima inicialização do serviço ou reinicialização.
  • Injeção de /etc/ld.so.preload quando o processo é executado como root. Pré-carrega código do atacante em toda execução binária subsequente.
  • Sobrescrita de arquivo de inicialização do shell (~/.bashrc, ~/.profile, ~/.bash_profile). Executa no próximo login interativo do usuário da aplicação.
  • Anexo a ~/.ssh/authorized_keys. Concede acesso SSH persistente ao host como o usuário da aplicação.

Impacto na camada web

Baixar ferramenta