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
vsftpd-deny-file-brace-child — vsftpd 3.0.5 - Hoch - Remote - Privilege leftover - brace deny_file misses .private/secret | Kitploit
Tools/GitHubGitHub/abraxas/vsftpd-deny-file-brace-child
SchwachstellenanalyseExploitationWebanwendungs-ExploitationInformationsbeschaffungNetzwerksicherheitPenetrationstestsLabs & Praxis
GitHub
abraxas/vsftpd-deny-file-brace-child

vsftpd-deny-file-brace-child

vsftpd 3.0.5 - Hoch - Remote - Privilege leftover - brace deny_file misses .private/secret

Repository anzeigen
6vor 5 TagenNoch 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

Abraxas Labs - vsftpd-deny-file-brace-child

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vsftpd-deny-file-brace-child

vsftpd-deny-file-brace-child

Klasse: Privilegien-Überbleibsel Reichweite: Remote

vsftpd 3.0.5 - Chris Evans

Das Beispiel in der Manpage (vsftpd.conf.5) lautet deny_file={*.mp3,*.mov,.private}. Passende Namen „sollten in keiner Weise zugänglich sein", einschließlich „Download, Wechsel in das Verzeichnis, Beeinflussung von etwas innerhalb des Verzeichnisses". vsf_access_check_file (access.c:16-43) ruft vsf_filename_passes_filter auf den übergebenen Client-Pfad auf und dann str_locate_str des gesamten Brace-Tunables. Der Filter gleicht die letzte Komponente / das Präfix ab; das übrig bleibende /secret schlägt fehl; die Teilzeichenkette von {*.mp3,*.mov,.private} wird nicht gefunden.

CWD .private wird verweigert (Basename trifft). RETR .private/secret und RETR dir/.private gelingen. Genau dieses „innerhalb des Verzeichnisses" bricht dieses Überbleibsel.

CVE-2015-1419 ist ein öffentlicher Distro-realpath/Basename-Patch. Das offizielle 3.0.5 hat ihn nie übernommen. Debian's Brace-Zweig gleicht weiterhin den vollständigen Pfad ab, sodass dieser Child-Walk auch auf gepatchten Distro-Paketen bestehen bleibt. 2015-1419 nicht erneut melden.

Dieses Überbleibsel ist ein konfigurationsgesteuerter Deny-List-Fehlschlag. Es ist kein Unauth-RCE, kein Chroot-Ausbruch und kein Host-/etc-Read.

IDnoch keine CVE
KlassePrivilegien-Überbleibsel
ReichweiteRemote (authentifiziertes FTP)
CWECWE-863, CWE-22
CVSSHoch: 7.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
Produktvsftpd (Chris Evans)
Betroffenvsftpd 3.0.5 offizielles Tarball SHA-256 26b602ae454b0ba6d99ef44a09b6b9e0dfa7f67228106736df1f278c70bc91d3
Authauthentifiziertes FTP USER/PASS (anonym im Lab). deny_file auf eine Brace-Liste gesetzt (standardmäßig nicht gesetzt)
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1. Anonym schreibgeschützt. Witness-Datei.

Was ein Angreifer tun kann

Wer: ein authentifizierter FTP-Benutzer (anonym ftp im Lab). Session-UID nach dem üblichen vsftpd-Drop. deny_file ist die zusätzliche Richtlinie, die dieser UID eigentlich Fähigkeiten entziehen sollte. Virtual-User-Rezepte, die die Manpage nennt, teilen guest_username, sodass Unix-DAC sie nicht trennt. Stock 3.0.5 mit tunable_deny_file NULL ist nicht dieses Überbleibsel.

Vertraulichkeit (im Lab nachgewiesen)

Methode + SinkPrivileg
RETR .private/secret mit dokumentiertem Brace deny_file={*.mp3,*.mov,.private}handle_retr str_open einer Datei, deren Verzeichnisname auf der Deny-Liste steht, als Session-UID. Lab: 150/226, 37 Bytes, Body VSFTPD-DENY-FILE-BRACE-CHILD-WITNESS
RETR dir/.privategleicher Sink. Eine Datei namens .private unter einem anderen Verzeichnis (must_match_at_current_pos lehnt einen Treffer bei Index > 0 ab). Lab: 150/226, Body DIRDOT-VSFTPD-DENY-FILE-BRACE-CHILD-WITNESS

Integrität (abgeleitet aus demselben vsf_access_check_file-Gate; Lab war schreibgeschützt)

Methode + SinkPrivileg
STOR / APPE desselben Pfads bei write_enable=YEShandle_upload_common Erstellen / Überschreiben als Session-UID
DELE / RNTO desselben Pfadsstr_unlink / Umbenennen eines Namens, den die Denylist stoppen sollte

Recon (abgeleitet)

Methode + SinkPrivileg
LIST .private/x (oder LIST innerhalb des verweigerten Baums)handle_dir_common prüft den vollständigen Parameter auf Zugriff (Fehlschlag), dann str_opendir des .private-Präfixes nach dem Slash-Split. Nur Namen. Unix-DAC gilt weiterhin

Im Lab nachgewiesene Negativfälle (gleicher Lauf)

Methode + SinkErgebnis
CWD .private550 Permission denied. Basename .private trifft das Brace
RETR song.mp3550. *.mp3 ist ein Last-Component-Muster und trifft zu

Was dieses Überbleibsel nicht gewährt

  • Dateien, die die Session-UID nicht per Unix öffnen kann
  • CWD .private selbst (Basename trifft)
  • hide_file LIST-Verbergen des Dirents (Basename aus readdir; RETR eines verborgenen Namens ist dokumentiert beabsichtigt)
  • Host-/etc aus einem Chroot
  • Unauthentifiziertes HTTP (http_enable standardmäßig aus; FTP-Mode GET beendet die Session)
  • Nicht-Brace deny_file=.private wird durch den Substring-Fallback gerettet (str_locate_str von .private in .private/secret)
  • Unauth-Login-Skip, PORT-Bounce, Root, Chroot-Ausbruch

Wie ich es gefunden habe

Ich habe offizielles vsftpd 3.0.5 (SHA-256 26b602ae...c91d3) gepinnt statt eines GitHub-Mirrors oder eines Debian/Fedora-Baums. Neunzehn Quellcode-Suchen. Der standardmäßig kompilierte Daemon hat kein unveröffentlichtes Critical/High-Überbleibsel. Dieses erfordert, dass der Betreiber das Brace-Beispiel aus der Manpage kopiert.

vsf_filename_passes_filter (ls.c) gleicht * / ? / nicht verschachtelte {,} ab und leistet nur bei einem Last-Component-Muster nützliche Arbeit. Für den Namen .private/secret gegen {*.mp3,*.mov,.private}:

  1. Brace-Alternativen *.mp3, *.mov, .private werden am Anfang von .private/secret abgeglichen. Das übrig bleibende /secret schlägt fehl, es sei denn, das Token war *.
  2. Der Substring-Fallback sucht nach dem Literal {*.mp3,*.mov,.private} und findet nichts.

Bereits öffentliche Fehlspur: CVE-2015-1419 ist ein reiner Distro-realpath. Das offizielle Changelog enthält keinen solchen Fix. Selbst Debian's Brace-Zweig kopiert den vollständigen normalisierten Pfad, sodass Kinder weiterhin durchlaufen.

Lab

cd lab
./run.sh

Loopback-Control 127.0.0.1:18710, PASV 18711-18718. Compose-Projekt vsftpd-deny-file-brace-child. Offizielles 3.0.5-Tarball, anonym schreibgeschützt, deny_file={*.mp3,*.mov,.private}. Witness VSFTPD-DENY-FILE-BRACE-CHILD-WITNESS. Letzte Zeile:

SUCCESS vsftpd-deny-file-brace-child cwd-dotprivate=550 retr-child=yes retr-dir-dotprivate=yes mp3=550 VSFTPD-DENY-FILE-BRACE-CHILD-WITNESS

Fix

Brace-Alternativen gegen jede Pfadkomponente abgleichen oder realpath / Basename vor dem Filter (mit den üblichen Symlink-Vorbehalten). Das dokumentierte Beispiel sollte Kinder tatsächlich verweigern.

Vendor-Intake ist [email protected] (vsftpd). Kein öffentliches GitHub-Issue auf irgendeinem vsftpd-Mirror öffnen.

Kontakt

Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]

Tool herunterladen