漏洞介绍

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3.8'

services:

drupal:
image: drupal:10.1.8
restart: always
ports:
- 8080:80
volumes:
- /var/www/html/modules
- /vat/www/html/profiles
- /var/www/html/themes
- /var/www/html/sites
- ./settings.php:/opt/drupal/web/sites/default/settings.php


db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: drupal_db
MYSQL_USER: drupal
MYSQL_PASSWORD: drupalpass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db_data:/var/lib/mysql

volumes:
db_data:


当前目录的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

选择语言

image-20241226171834277

选择安装方式

image-20241226171854577

设置数据库

image-20241226172032897

其他选项默认

设置网站

image-20241226172625492

其他选项默认,进行安装

接下来模拟开发人员更改/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 函数将文件用于此目的:

img

sites/default/settings.php#L268

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

img

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

img

漏洞复现

访问http://127.0.0.1:8080/core/authorize.php

image-20241226170825303

暴露出配置文件的完整路径

poc使用

1
python CVE-2024-45440.py

image-20241226214243724

复现成功

参考

CVE-2024-45440 解释 – SensCyberSecurity

阿里云漏洞库 (aliyun.com)

Drupal.org