
CVE-2026-23491 - InvoicePlane presenta un Path Traversal non autenticato nel Guest Controller
| Campo | Dettagli |
|---|---|
| CVE ID | CVE-2026-23491 |
| Gravità | CRITICA |
| Avviso | Visualizza l'avviso |
| Scoperta da | Lukasz Rybak |
Una vulnerabilità di path traversal è presente nel metodo get_file del controller Get del modulo Guest in InvoicePlane v1.6.3. La vulnerabilità consente ad attaccanti non autenticati di leggere file arbitrari sul server manipolando il nome del file di input. Ciò porta alla divulgazione di informazioni sensibili, inclusi i file di configurazione con le credenziali del database.
La vulnerabilità si trova nel file application/modules/guest/controllers/Get.php, in particolare all'interno della funzione get_file.
La funzione accetta un parametro $filename direttamente dall'URL. Esegue urldecode($filename) ma non sanifica l'input per le sequenze di directory traversal (ad es. ../). Il nome del file viene poi concatenato con una directory di base ($this->targetPath, che corrisponde a uploads/customer_files/) e passato alla funzione readfile().
Estratto di codice vulnerabile:
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);
}
Poiché $filename è controllato dall'utente e privo di controlli, un attaccante può fornire una stringa come ../../ipconfig.php per uscire dalla directory prevista.
Il seguente comando cURL dimostra la lettura del file ipconfig.php (che si trova due directory sopra la directory predefinita uploads/customer_files/):
curl http://localhost/index.php/guest/get/get_file/..%2f..%2fipconfig.php
Output previsto:
Il server risponde con il contenuto di ipconfig.php, che include variabili d'ambiente sensibili come DB_PASSWORD e ENCRYPTION_KEY.
Gli attaccanti possono leggere la configurazione dell'applicazione, il codice sorgente e potenzialmente altri file sul sistema leggibili dall'utente del server web.
Questa CVE è stata divulgata in modo responsabile seguendo le pratiche di divulgazione coordinata delle vulnerabilità. Le informazioni fornite qui hanno esclusivamente scopo educativo e difensivo.