
CVE-2026-23491 - InvoicePlane présente une traversée de chemin non authentifiée dans le Guest Controller.
| Champ | Détails |
|---|
| Identifiant CVE | CVE-2026-23491 |
| Gravité | CRITIQUE |
| Avis | Voir l'avis |
| Découvert par | Lukasz Rybak |
Une vulnérabilité de traversée de chemin existe dans la méthode get_file du contrôleur Get du module Guest dans InvoicePlane v1.6.3. Cette vulnérabilité permet à des attaquants non authentifiés de lire des fichiers arbitraires sur le serveur en manipulant le nom de fichier fourni. Cela conduit à la divulgation d'informations sensibles, notamment des fichiers de configuration contenant des identifiants de base de données.
La vulnérabilité se situe dans le fichier application/modules/guest/controllers/Get.php, plus précisément dans la fonction get_file.
La fonction accepte un paramètre $filename directement depuis l'URL. Elle effectue urldecode($filename) mais ne parvient pas à nettoyer l'entrée pour les séquences de traversée de répertoire (par exemple ../). Le nom de fichier nettoyé est ensuite concaténé avec un répertoire de base ($this->targetPath, qui correspond à uploads/customer_files/) et transmis à la fonction readfile().
Extrait de code vulnérable :
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);
}
Étant donné que $filename est contrôlé par l'utilisateur et n'est pas vérifié, un attaquant peut fournir une chaîne telle que ../../ipconfig.php pour sortir du répertoire prévu.
La commande cURL suivante démontre la lecture du fichier ipconfig.php (qui se trouve deux répertoires au-dessus du répertoire par défaut uploads/customer_files/) :
curl http://localhost/index.php/guest/get/get_file/..%2f..%2fipconfig.php

Sortie attendue :
Le serveur répond avec le contenu de ipconfig.php, qui inclut des variables d'environnement sensibles telles que DB_PASSWORD et ENCRYPTION_KEY.
Les attaquants peuvent lire la configuration de l'application, le code source et potentiellement d'autres fichiers du système lisibles par l'utilisateur du serveur web.
Cette CVE a été divulguée de manière responsable dans le cadre de pratiques de divulgation coordonnée des vulnérabilités. Les informations fournies ici le sont uniquement à des fins éducatives et défensives.