漏洞介绍
Drupal 是一个开源内容管理系统(CMS),它由数以千计的模块和主题组成,这些模块和主题可以被用来创建复杂的网站和在线应用程序。Drupal 以其灵活性、安全性和社区支持而闻名,适用于从个人博客到大型企业网站的各种项目。
CVE-2024-45440漏洞中,如果开发人员将 sites/default/settings.php 文件中的 hash_salt 变量设置为不存在的文件时,则 Drupal 11.x-dev 中的 core/authorize.php 允许完整路径泄漏(即使错误日志记录为 None)。
漏洞范围
CVE 目前仅提及 11.x 开发分支,进一步测试后得出结论,所有分支 Drupal 8 及更高版本都受到影响。
漏洞靶场
使用Drupal 10.1.8版本
docker-compose.yml
1 | version: '3.8' |
当前目录的settings.php将通过挂载的方式替换掉容器中的settings.php
替换settings.php后无法进行安装,但直接访问http://127.0.0.1:8080/core/authorize.php也能暴露出配置文件的完整路径
正常安装过程如下:
先将docker-ccompose.yml第15行的- ./settings.php:/opt/drupal/web/sites/default/settings.php注释掉,才能正常进行安装
启动docker容器
1 | docker-compose up -d |
选择语言

选择安装方式

设置数据库

其他选项默认
设置网站

其他选项默认,进行安装
接下来模拟开发人员更改/sites/default/settings.php 文件中第 268 行的 hash_salt 变量,我们关闭docker容器
1 | docker-compose down |
然后取消docker-ccompose.yml第15行的- ./settings.php:/opt/drupal/web/sites/default/settings.php注释,再次启动容器
1 | docker-compose up -d |
靶场设置完成
漏洞原理
安装完drupal后,开发人员可以更改 sites/default/settings.php 文件中第 268 行的 hash_salt 变量。如示例中所建议的那样,开发人员可以通过 file_get_contents 函数将文件用于此目的:

sites/default/settings.php#L268
如果将其设置为包含 salt 字符串的文件,则应用程序将按预期工作。但是,如果此项设置为空文件或不存在的文件。它设置的这个文件可能会在一段时间后被删除、移除或重命名。这将破坏网站。例如,可以按照注释中的建议使用以下代码:

现在,如果此文件被删除,应用程序将中断,并通过导航到 /core/authorize.php 来显示完整路径遍历,如下图所示。

漏洞复现
访问http://127.0.0.1:8080/core/authorize.php

暴露出配置文件的完整路径
poc使用
1 | python CVE-2024-45440.py |

复现成功