如果你正在使用Advanced Custom Fields(ACF )高级自定义字段插件的免费版和专业版,请将该插件至少更新到6.1.6版本。
高级自定义中的安全漏洞
此插件该版本中存在反射式 XSS 漏洞。
此漏洞允许任何未经身份验证的用户窃取敏感信息,在本例中,通过诱骗特权用户访问构建的 URL 路径,在 WordPress 网站上提升权限。
所描述的漏洞已在版本 6.1.6 中修复,也在版本 5.12.6 中修复,请尽快更新
关于更新
2023年5 月更新时,注意到媒体上流传着声称本文中的示例 PoC URL 能被大规模的利用网站。我们认为这不太可能,因为XSS只能由有访问权高级自定义字段功能的登录用户(主要是管理员)触发。假如攻击者确实直接利用了示例 PoC URL,但这并不能表示该操作使网站被黑客利用。这种情况主要适用于需要用户交互的漏洞,例如CSRF和Reflect XSS。在此更新发布之前,我们的监控系统没有收到任何针对客户的网站被入侵和黑客利用的情况。
关于WordPress高级自定义字段插件(ACF)
高级自定义字段插件和高级自定义字段插件专业版(版本 6.1.5 及更低版本,免费版和专业版)拥有超过 2 万个激活安装。ACF被称为WordPress中最受欢迎的自定义字段插件。这个插件是一个WordPress插件,我们可以在WordPress编辑器中添加自定义的内容字段。这些自定义的内容字段通常称为自定义字段,可以让网站使用更多可用字段更快地构建网站。
底层漏洞位于函数处理程序上:admin_body_class
public function admin_body_class( $classes ) { $classes .= " acf-admin-page acf-internal-post-type {$this->admin_body_class}"; if ( $this->view ) { $classes .= " view-{$this->view}"; } return $classes; }
配置为WordPress自己的钩子的额外处理程序,该钩子也被命名为。此钩子控制和过滤管理区域中主体标签的 CSS 类。admin_body_class
admin_body_class
// Add hooks. add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); add_action( 'admin_body_class', array( $this, 'admin_body_class' ) );
如果我们更深入地查看 WordPress 核心的实现过程,我们可以看到钩子的输出值没有经过适当的清理并直接在 HTML 页面上构造:admin_body_class
$admin_body_classes = apply_filters( 'admin_body_class', '' ); $admin_body_classes = ltrim( $admin_body_classes . ' ' . $admin_body_class ); ?> <body class="wp-admin wp-core-ui no-js <?php echo $admin_body_classes; ?>"> <script type="text/javascript"> document.body.className = document.body.className.replace('no-js','js'); </script>
由于这种情况,如果挂钩函数处理程序未正确清理返回的类字符串,则存在潜在的 XSS 漏洞。admin_body_class
让我们回到钩子函数处理程序,代码将直接将变量连接到将作为类字符串返回的变量。我们实际上可以从函数中完全控制变量:$this->view
$classes
$this->view
current_screen
public function current_screen() { // Bail early if not the list admin page. if ( ! acf_is_screen( "edit-{$this->post_type}" ) ) { return; } // Get the current view. $this->view = isset( $_GET['post_status'] ) ? sanitize_text_field( $_GET['post_status'] ) : ''; // -------------------------------------
使用函数进行清理不足以防止 XSS,因为我们仍然可以使用 DOM XSS 有效负载。结合所有这些,可以使用以下示例有效负载实现XSS:sanitize_text_field
http://<WORDPRESS_SITE>/wp-admin/edit.php?post_type=acf-field-group&post_status=xxxxxxx" onload=alert(document.domain) xxx="
前端显示的反射HTML结构可能是这样的:
<body class="wp-admin wp-core-ui no-js acf-admin-5-3 acf-browser-chrome acf-admin-page acf-internal-post-type acf-admin-field-groups view-xxxxxxx\" onload=alert(document.domain) xxx=\" edit-php auto-fold admin-bar post-type-acf-field-group branch-6-2 version-6-2 admin-color-fresh locale-en-us no-customize-support no-svg">
请注意,此漏洞可能在高级自定义字段插件的默认安装或配置上触发。XSS 也只能由有权访问高级自定义字段插件的登录用户触发。
高级自定义字段中的修补程序
由于此问题主要是因为代码在没有适当清理的情况下,直接构造了 HTML 的变量,因此实现函数应该足以修补该问题。补丁可以在下面找到:esc_attr
有许多WordPress钩子函数用于插件和主题代码。其中之一是钩子。确保清理使用钩子时输出的类字符串,例如 清理函数。admin_body_class
esc_attr
帮助我们让互联网更安全
原文链接:https://www.itaoda.cn/blog/12486.html,转载请注明出处。
评论0