WPBakery页面构建器是WordPress最受欢迎的页面构建器之一。这是一个非常易于使用的工具,它允许站点所有者使用拖放功能来创建自定义页面。
WPBakery低于6.4.1版本存在安全漏洞
不幸的是,该插件的低于6.4.1版本设计存在缺陷,可能使具有贡献者和作者级别角色的用户能够将恶意JavaScript注入页面和文章。该缺陷还使这些用户可以编辑其他用户的文章。该插件在saveAjaxFe
函数中使用kses_remove_filters()
对任何默认的文章HTML进行过滤检查。这意味着有权访问WPBakery构建器的任何用户都可以使用页面构建器将HTML和JavaScript注入文章中的任何位置。
public function saveAjaxFe() {
vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'edit_posts', 'edit_pages' )->validateDie();
$post_id = intval( vc_post_param( 'post_id' ) );
if ( $post_id > 0 ) {
ob_start();
// Update post_content, title and etc.
// post_title
// content
// post_status
if ( vc_post_param( 'content' ) ) {
$post = get_post( $post_id );
$post->post_content = stripslashes( vc_post_param( 'content' ) );
$post_status = vc_post_param( 'post_status' );
$post_title = vc_post_param( 'post_title' );
if ( null !== $post_title ) {
$post->post_title = $post_title;
}
kses_remove_filters();
remove_filter( 'content_save_pre', 'balanceTags', 50 );
此外,虽然WPBakery只希望使用WPBakery页面构建器构建的页面可以通过构建器进行编辑,但用户可以通过为任何文章提供正确的参数和值来访问编辑器。这可以被归类为一般错误以及安全问题,这使得贡献者和编辑者可以使用wp_ajax_vc_save
AJAX操作和相应的saveAjaxFe
功能在其自己的文章以及其他用户的文章上注入恶意JavaScript。
该插件还具有针对按钮的自定义onclick功能。这使得攻击者可以将恶意JavaScript注入按钮中,然后单击该按钮即可执行。此外,贡献者和作者用户都能够使用vc_raw_js
,vc_raw_html
使用和按钮custom_onclick
简码,以恶意的JavaScript添加到文章。
所有这些都意味着具有贡献者级别访问权限的用户可以将脚本注入帖子中,这些脚本随后将在有人访问页面或单击按钮时使用各种不同的方法执行。由于贡献者级别的用户需要在发布前获得批准,因此管理员很可能会查看包含由攻击者创建的,具有贡献者级别访问权限的恶意JavaScript的页面。通过在管理员的浏览器中执行恶意JavaScript,攻击者就有可能创建一个新的恶意管理用户或注入后门,等等。
在最新版本的WPBakery中,默认情况下,较低级别的用户不再具有此unfiltered_html
功能,但是,管理员可以根据需要授予该权限。此外,没有适当特权的用户无法再编辑其他用户的文章,除非得到允许,否则不能访问页面构建器,或者使用可能允许注入恶意JavaScript的短代码。
修补安全漏洞
WPBakery 6.4.1 已经修复了这方面的漏洞,请及时将您的WPBakery可视化编辑器插件升级到 6.4.1+。