
CVE-2026-23491 - InvoicePlane подвержен неаутентифицированному обходу пути (Path Traversal) в Guest Controller
| Поле | Сведения |
|---|---|
| CVE ID | CVE-2026-23491 |
| Критичность | КРИТИЧЕСКАЯ |
| Бюллетень безопасности | Просмотреть бюллетень |
| Обнаружил | Lukasz Rybak |
В InvoicePlane v1.6.3 в методе get_file контроллера Get модуля Guest существует уязвимость обхода каталога. Уязвимость позволяет неаутентифицированным злоумышленникам читать произвольные файлы на сервере путём манипуляции именем входного файла. Это приводит к раскрытию конфиденциальной информации, включая конфигурационные файлы с учётными данными базы данных.
Уязвимость расположена в файле application/modules/guest/controllers/Get.php, а именно в функции get_file.
Функция принимает параметр $filename напрямую из URL. Она выполняет urldecode($filename), но не выполняет санитизацию входных данных на предмет последовательностей обхода каталога (например, ../). Затем полученное имя файла конкатенируется с базовым каталогом ($this->targetPath, который соответствует uploads/customer_files/) и передаётся в функцию readfile().
Уязвимый фрагмент кода:
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);
}
Поскольку $filename контролируется пользователем и не проверяется, злоумышленник может указать строку вида ../../ipconfig.php, чтобы выйти за пределы предназначенного каталога.
Следующая команда cURL демонстрирует чтение файла ipconfig.php (который находится на два каталога выше стандартного каталога uploads/customer_files/):
curl http://localhost/index.php/guest/get/get_file/..%2f..%2fipconfig.php
Ожидаемый результат:
Сервер отвечает содержимым файла ipconfig.php, в котором содержатся конфиденциальные переменные окружения, такие как DB_PASSWORD и ENCRYPTION_KEY.
Злоумышленники могут прочитать конфигурацию приложения, исходный код и, возможно, другие файлы в системе, доступные для чтения пользователю веб-сервера.
Данный CVE был ответственно раскрыт в соответствии с практиками координированного раскрытия уязвимостей. Приведённая здесь информация предназначена только для образовательных и защитных целей.