| 字段 | 详情 |
|---|---|
| CVE ID | CVE-2026-23491 |
| 严重性 | 严重 |
| 公告 | 查看公告 |
| 发现者 | Lukasz Rybak |
InvoicePlane v1.6.3 的 Guest 模块的 Get 控制器中的 get_file 方法存在路径遍历漏洞。该漏洞允许未认证的攻击者通过操纵输入的文件名来读取服务器上的任意文件,从而导致敏感信息泄露,包括包含数据库凭据的配置文件。
漏洞位于 application/modules/guest/controllers/Get.php 文件中的 get_file 函数内。
该函数直接接受来自 URL 的 $filename 参数。它对输入执行 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);
}
// ... 设置内容类型和内容处置的头部 ...
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。
攻击者可以读取应用程序配置、源代码以及 Web 服务器用户可读取的系统上的其他文件。
此 CVE 遵循协调漏洞披露实践进行负责任地披露。此处提供的信息仅供教育和防御目的使用。