CVE-2026-9834CVE-2026-9834是WordPress插件"WP Database Backup"(由Backup for WP开发)中存在的一个高危操作系统命令注入漏洞。该插件提供WordPress站点的数据库和文件备份功能,在所有7.11及以下版本中均受影响。漏洞存在于插件的`includes/admin/class-wpdb-admin.php`文件中的`mysqldump()`函数中,具体涉及`wp_db_exclude_table`参数的处理逻辑。该参数接收用户通过POST提交的备份排除表列表,在拼接到`mysqldump` shell命令字符串时未使用`escapeshellarg()`进行转义,而同一命令中的其他参数(如DB_USER、DB_PASSWORD、主机名、文件名、DB_NAME)均已正确转义,使得`wp_db_exclude_table`成为唯一的安全缺口。此外,插件仅对输入调用了`sanitize_text_field()`(通过`recursive_sanitize_text_field()`),该函数仅剥离HTML标签,但保留了shell元字符如`;`、`|`、反引号和`$()`等,从而允许攻击者注入任意操作系统命令。该漏洞的CVSS评分为7.2,属于高危级别,要求攻击者拥有管理员级别及以上的认证权限(PR:H),通过网络(AV:N)即可利用,无需用户交互(UI:N)。一旦成功利用,攻击者可在服务器上执行任意操作系统命令,实现完整的远程代码执行(RCE),对机密性、完整性和可用性均产生高影响(C:H/I:H/A:H)。该漏洞属于存储型注入,恶意值通过插件设置表单提交后会通过`update_option('wp_db_exclude_table')`持久化到WordPress选项表,之后每次备份运行时通过`get_option()`取出并未经处理地传递给`shell_exec()`执行。
该漏洞的根本原因在于`mysqldump()`函数中shell命令的构造方式存在缺陷。在调用`mysqldump`进行数据库备份时,函数将多个参数拼接为完整的shell命令字符串。其中,数据库用户名、密码、主机名、输出文件名和数据库名称均使用`escapeshellarg()`进行了正确的转义处理,但`wp_db_exclude_table`参数的值却直接拼接到命令中,未经过任何shell转义。攻击者通过POST请求提交`wp_db_exclude_table`参数时,插件使用`sanitize_text_field()`(递归版本)进行过滤,该函数主要用于去除HTML标签和多余空白,但对shell元字符(`;`、`|`、`&&`、`||`、反引号`` ` ``、`$()`等)不做任何处理。恶意输入首先通过`update_option()`存储到WordPress数据库的wp_options表中,之后在每次执行备份操作时通过`get_option('wp_db_exclude_table')`读取并拼接到mysqldump命令中,最终通过`shell_exec()`执行。由于攻击者需要管理员权限才能访问插件设置页面和提交该参数,因此认证要求为高权限(PR:H)。利用方式为:攻击者以管理员身份登录WordPress后台,导航到WP Database Backup插件的设置页面,在排除表输入框中注入包含shell元字符的payload,例如`table1; id; #`,当备份任务触发时,该payload会作为shell命令的一部分被执行,从而实现远程代码执行。