
CVE-2026-23491 - InvoicePlane hat einen nicht authentifizierten Path-Traversal im Guest Controller.
| Feld | Details |
|---|
| CVE-ID | CVE-2026-23491 |
| Schweregrad | KRITISCH |
| Advisory | Advisory anzeigen |
| Entdeckt von | Lukasz Rybak |
Eine Path-Traversal-Schwachstelle existiert in der Methode get_file des Get-Controllers des Guest-Moduls in InvoicePlane v1.6.3. Die Schwachstelle ermöglicht es nicht authentifizierten Angreifern, beliebige Dateien auf dem Server zu lesen, indem sie den eingegebenen Dateinamen manipulieren. Dies führt zur Offenlegung sensibler Informationen, einschließlich Konfigurationsdateien mit Datenbank-Anmeldedaten.
Die Schwachstelle befindet sich in der Datei application/modules/guest/controllers/Get.php, insbesondere innerhalb der Funktion get_file.
Die Funktion übernimmt einen Parameter $filename direkt aus der URL. Sie führt urldecode($filename) aus, versäumt es jedoch, die Eingabe auf Directory-Traversal-Sequenzen (z. B. ../) zu überprüfen. Der bereinigte Dateiname wird anschließend mit einem Basisverzeichnis ($this->targetPath, das auf uploads/customer_files/ verweist) verkettet und an die Funktion readfile() übergeben.
Verwundbarer Code-Ausschnitt:
public function get_file($filename): void
{
$filename = urldecode($filename);
if ( ! file_exists($this->targetPath . $filename)) {
$ref = isset($_SERVER['HTTP_REFERER']) ? ', Referer:' . $_SERVER['HTTP_REFERER'] : '';
$this->respond_message(404, 'upload_error_file_not_found', $this->targetPath . $filename . $ref);
}
// ... headers setting content type and disposition ...
readfile($this->targetPath . $filename);
}
Da $filename vom Benutzer kontrolliert und ungeprüft ist, kann ein Angreifer eine Zeichenkette wie ../../ipconfig.php angeben, um aus dem vorgesehenen Verzeichnis auszubrechen.
Der folgende cURL-Befehl demonstriert das Lesen der Datei ipconfig.php (die zwei Verzeichnisebenen über dem Standardverzeichnis uploads/customer_files/ liegt):
curl http://localhost/index.php/guest/get/get_file/..%2f..%2fipconfig.php

Erwartete Ausgabe:
Der Server antwortet mit dem Inhalt von ipconfig.php, der sensible Umgebungsvariablen wie DB_PASSWORD und ENCRYPTION_KEY enthält.
Angreifer können die Anwendungskonfiguration, den Quellcode und möglicherweise andere Dateien auf dem System lesen, die für den Webserver-Benutzer lesbar sind.
Diese CVE wurde im Rahmen koordinierter Offenlegungspraktiken für Sicherheitslücken verantwortungsvoll gemeldet. Die hier bereitgestellten Informationen dienen ausschließlich Bildungs- und Verteidigungszwecken.