Skip to content

ONHEXGROUP

اخبار دنیای امنیت سایبری

  • اخبار
    • آسیب پذیری امنیتی
    • آنالیز بدافزار
    • کنفرانس ،دوره ، وبینار ، لایو ، CTF
    • بازیگران تهدید
    • توسعه اکسپلویت
    • افشای اطلاعات
    • باگ بانتی
    • تیم آبی
    • تیم قرمز
    • امنیت وب
  • دوره های آموزشی
    • دوره رایگان مهندسی معکوس نرم افزار
  • لیست های ویژه
    • موتورهای جستجو برای امنیت سایبری
    • کاتالوگ KEV آژانس CISA
    • آسیب پذیری های وردپرس
      • آسیب پذیری پلاگین ها
      • آسیب پذیری های هسته
      • آسیب پذیری تم ها
    • محصولات خارج از پشتیبانی مایکروسافت
      • محصولات مایکروسافتی که در سال 2022 پشتیبانی نمیشن
      • محصولات مایکروسافتی که در سال 2023 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2024 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2025 پشتیبانی نمیشن
    • معرفی فیلم ها و سریالهای مرتبط با هک و امنیت
  • آموزش های ویدیویی
  • انتشارات
    • مجله
    • مقالات
    • پادکست
  • پروژه ها
    • ماشین آسیب پذیر
      • وردپرس آسیب پذیر
  • حمایت مالی ( Donate)
  • تماس با ما
 
  • Home
  • اخبار
  • یک تیر و میلیونها نشان !
  • آسیب پذیری امنیتی
  • اخبار
  • امنیت وب
  • توسعه اکسپلویت

یک تیر و میلیونها نشان !

On مرداد 15, 1402مرداد 16, 1402
seyyid
Share
زمان مطالعه: 5 دقیقه

این ماه که میخواستم نسخه وردپرس آسیب پذیر رو برای جولای آماده میکردم، متوجه شدم که برای جولای بیش از 1200 پلاگین باید جمع آوری و نصب کنم. خب عدد بزرگی بود. برام جالب بود که چرا با این تعداد پلاگین آسیب پذیر روبرو هستم. با بررسی که کردم متوجه شدم، علت اون کشف یه آسیب پذیری در کتابخونه Freemius WordPress SDK هستش.

این کتابخونه به دلیل اینکه در هزاران پلاگین و تم مورد استفاده قرار گرفته ، در نتیجه آسیب پذیر بودنش، کل اونارو تحت تاثیر قرار میده. لیستی از این پلاگینها رو میتونید اینجا مشاهده کنید.

کتابخونه ی Freemius WordPress SDK ، نسخه های 2.5.9 و قبلتر تر ، در بیش از هزاران افزونه و قالب استفاده شده و تخمین میزنن این پلاگین ها و تم ها ، در بیش از 7 میلیون سایت نصب شده . این کتابخونه بعنوان یه کتابخونه شناخته شده برای ادغام سرویس های Freemius با افزونه ها و قالب ها بکار میره.

خود Freemius هم محبوب ترین پلتفرم تجارت الکترونیک برای فروش افزونه ها و تم های وردپرس هستش که به توسعه دهندگان این امکان رو میده تا به سرعت شروع به فروش و صدور لایسنس برای محصولات خودشون بکنن.

آسیب پذیری CVE-2023-33999 ، از نوع reflected XSS هستش و مهاجم احرازهویت نشده امکان سرقت اطلاعات حساس رو داره . مهاجم میتونه با فریب دادن ادمین یا کاربر با امتیاز بالا برای مشاهده یه URL مخرب، امتیازش رو افزایش بده. این آسیب پذیری به دلیل عدم پاکسازی (sanitization and  escaping) هستش.

آسیب پذیری نسخه های 2.5.9 و پایین تر رو تحت تاثیر قرار میده و در نسخه 2.5.10 و بالاتر ، اصلاح شده. بنابراین اگه توسعه دهنده هستید، حتما نسخه بروز رو اعمال کنید.

 

 

بررسی علت آسیب پذیری :

آسیب پذیری در تابع fs_request_get هستش :

 

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
includes/fs-core-functions.php, function fs_request_get()
function fs_request_get( $key, $def = false, $type = false ) {
    if ( is_string( $type ) ) {
        $type = strtolower( $type );
    }
 
    /**
     * Note to WordPress.org Reviewers:
     *  This is a helper method to fetch GET/POST user input with an optional default value when the input is not set. The actual sanitization is done in the scope of the function's usage.
     */
    switch ( $type ) {
        case 'post':
            $value = isset( $_POST[ $key ] ) ? $_POST[ $key ] : $def;
            break;
        case 'get':
            $value = isset( $_GET[ $key ] ) ? $_GET[ $key ] : $def;
            break;
        default:
            $value = isset( $_REQUEST[ $key ] ) ? $_REQUEST[ $key ] : $def;
            break;
    }
 
    return $value;
}

 

اگه به کد بالا دقت کنید، این تابع صرفا یه تابع برای گرفتن پارامترهای درخواست هستش. اما نکته ای که هست این تابع در کل کتابخونه بارها مورد استفاده قرار گرفته. یکی از جاهایی که از اون استفاده شده ، تابع dynamic_init هستش :

 

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
includes/class-freemius.php, function dynamic_init()
-------------------------- CUT HERE --------------------------
if ( $this->is_user_in_admin() ) {
    if ( $this->is_registered() && fs_request_has( 'purchase_completed' ) ) {
        $this->_admin_notices->add_sticky(
            sprintf(
            /* translators: %s: License type (e.g. you have a professional license) */
                $this->get_text_inline( 'You have purchased a %s license.', 'you-have-x-license' ),
                fs_request_get( 'purchased_plan' )
            ) .
            sprintf(
                $this->get_text_inline(" The %s's %sdownload link%s, license key, and installation instructions have been sent to %s. If you can't find the email after 5 min, please check your spam box.", 'post-purchase-email-sent-message' ),
                $this->get_module_label( true ),
                ( FS_Plugin::is_valid_id( $this->get_bundle_id() ) ? "products' " : '' ),
                ( FS_Plugin::is_valid_id( $this->get_bundle_id() ) ? 's' : '' ),
                sprintf(
                    '<strong>%s</strong>',
                    fs_request_get( 'purchase_email' )
                )
            ),
            'plan_purchased',
            $this->get_text_x_inline( 'Yee-haw', 'interjection expressing joy or exuberance', 'yee-haw' ) . '!'
        );
    }
-------------------------- CUT HERE --------------------------

 

در این تابع، fs_request_get( 'purchased_plan' )  و fs_request_get( 'purchase_email' ) ، مستقیما بعنوان ورودی تابع this->_admin_notices->add_sticky ارائه میشن. خود تابع add_sticky هم برای نمایش پیامهای ورودی به عنوان admin notices ، استفاده میشه. اما این کار رو بدون پاکسازی (escaping or sanitization) انجام میده. این اخطارها در پنل ادمین نمایش داده میشه تا زمانیکه کاربر اونو ببنده.

اکثر افزونه ها و قالب هایی که از Freemius استفاده میکنن، بعد از فعالسازی، یه پیامی رو بصورت modal دریافت میکنن برای اینکه میخوان بروزرسانی های امنیتی یا ویژگی های جدید رو دریافت کنن یا نه :

 

پیام Freemius

 

اگه کاربر این ویژگی رو تایید کنه، یه ایمیل براش ارسال میشه تا فرایند تایید کنه. در این ایمیل یه لینکی هستش که میشه از طریق تابع dynamic_init حمله XSS انجام داد.

اگه کاربر این ویژگی رو نخواد، باز میشه حمله XSS رو از طریق تابع _install_with_new_user انجام داد.

 

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
includes/class-freemius.php, function _install_with_new_user()
-------------------------- CUTTED HERE --------------------------
} else if ( $has_pending_activation_confirmation_param ) {
    $this->set_pending_confirmation(
        fs_request_get( 'user_email' ),
        true,
        false,
        false,
        fs_request_get_bool( 'is_suspicious_email' ),
        fs_request_get_bool( 'has_upgrade_context' ),
        fs_request_get( 'support_email_address' )
    );
}
-------------------------- CUTTED HERE --------------------------

 

در این مورد هم ، fs_request_get( 'user_email' ) و fs_request_get( 'support_email_address' ) بدون پاکسازی (escaped or sanitized) مستقیما به تابع $this->set_pending_confirmation ارسال میشن :

 

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
includes/class-freemius.php, function set_pending_confirmation()
-------------------------- CUTTED HERE --------------------------
private function set_pending_confirmation(
            $email = false,
            $redirect = true,
            $license_key = false,
            $is_pending_trial = false,
            $is_suspicious_email = false,
            $has_upgrade_context = false,
            $support_email_address = false
        ) {
            $is_network_admin = fs_is_network_admin();
 
            if ( $this->_ignore_pending_mode && ! $has_upgrade_context ) {
                /**
                 * If explicitly asked to ignore pending mode, set to anonymous mode
                 * if require confirmation before finalizing the opt-in except after completing a purchase (otherwise, in this case, they wouldn't see any notice telling them that they should receive their license key via email).
                 *
                 * @author Vova Feldman
                 * @since  1.2.1.6
                 */
                $this->skip_connection( $is_network_admin );
            } else {
                // Install must be activated via email since
                // user with the same email already exist.
                $this->_storage->is_pending_activation = true;
                $this->_add_pending_activation_notice(
                    $email,
                    $is_pending_trial,
                    $is_suspicious_email,
                    $has_upgrade_context,
                    $support_email_address
                );
            }
-------------------------- CUTTED HERE --------------------------

 

تابع بالا، تابع _add_pending_activation_notice رو با پارامترهای $email و $support_email_address فراخوانی میکنه. در ادامه به نحوه پردازش این دو پارامتر نگاهی میندازیم :

 

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
includes/class-freemius.php, function _add_pending_activation_notice(), line 6978-6981 & line 7024-7030
-------------------------- CUTTED HERE --------------------------
$formatted_message_args = array(
    "<b>{$this->get_plugin_name()}</b>",
    "<b>{$email_address}</b>",
);
 
-------------------------- CUTTED HERE --------------------------
$formatted_message_args[] = ( ! empty( $support_email_address ) ) ?
    ( "<b>{$support_email_address}</b>" ) :
    $this->get_text_x_inline(
        "the product's support email address",
        'Part of the message that tells the user to check their spam folder for a specific email.',
        'product-support-email-address-phrase'
    );
-------------------------- CUTTED HERE --------------------------

 

این دو پارامتر بدون پاکسازی ، در متغیر $formatted_message_args قرار میگیرن. formatted_message_args هم همانند مورد اول، برای نمایش admin notices استفاده میشه:

 

PHP
1
2
3
4
5
$this->_admin_notices->add_sticky(
    vsprintf( $formatted_message, $formatted_message_args ),
    'activation_pending',
    $notice_title
);

 

محققا اعلام کردن که موارد دیگه ای از تابع fs_request_get رو در بخشهای دیگه ای از کد کتابخونه کشف کردن که بطور بالقوه میتونه XSS رو اجرا کنه. یه نکته دیگه اینکه، توابع dynamic_init و _install_with_new_user میتونن از هر یک از نقاط پایانی WP Admin فعال بشن، بنابراین این یه reflected XSS هستش.

 

اصلاحیه:

همونطور که بالا گفته شد، این آسیب پذیری در نسخه ی 2.5.10 اصلاح شده. نحوه اصلاح هم اینجوری بوده که از sanitize_text_field برای پاکسازی ورودی استفاده کردن.

 

اصلاحیه

 

اصلاحیه

 

 

منبع

 

 

اشتراک در شبکه های اجتماعی :

Facebook
Twitter
Pinterest
LinkedIn
In آسیب پذیری امنیتی اخبار امنیت وب توسعه اکسپلویتIn Reflected XSS , wordpress , پلاگین , هک وردپرس , وردپرس

راهبری نوشته

رونمایی از استراتژی ملی نیروی کار و آموزش سایبری آمریکا (NCWES)
نسخه وردپرس آسیب پذیر برای جولای 2023 منتشر شد

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دسته‌ها

  • Osint
  • آسیب پذیری امنیتی
  • آموزش های ویدیویی
  • آنالیز بدافزار
  • اخبار
  • افشای اطلاعات
  • امنیت وب
  • انتشارات
  • اینترنت اشیاء
  • بازیگران تهدید
  • باگ بانتی
  • پادکست
  • پروژه ها
  • توسعه اکسپلویت
  • تیم آبی
  • تیم قرمز
  • دوره های آموزشی
  • فازینگ
  • کنفرانس ،دوره ، وبینار ، لایو ، CTF
  • لیست های ویژه
  • ماشین آسیب پذیر
  • مجله
  • مقالات
  • مهندسی معکوس نرم افزار

پست های مرتبط

  • اخبار
  • کنفرانس ،دوره ، وبینار ، لایو ، CTF
seyyid
On بهمن 7, 1401فروردین 28, 1402

بهترین محققهای مایکروسافت در سه ماهه چهارم 2022

  • Osint
  • آسیب پذیری امنیتی
  • آنالیز بدافزار
  • اخبار
  • بازیگران تهدید
  • توسعه اکسپلویت
  • مقالات
seyyid
On بهمن 25, 1402بهمن 25, 1402

نگاهی به عرضه کنندگان جاسوس افزار تجاری – قسمت چهارم : اقدامات امنیتی

  • آسیب پذیری امنیتی
  • اخبار
  • بازیگران تهدید
  • توسعه اکسپلویت
  • تیم آبی
  • تیم قرمز
  • مقالات
seyyid
On دی 2, 1401دی 19, 1401

بررسی CVEهای پر سر و صدای این هفته (21 تا 27 آبان 1401)

  • اخبار
  • بازیگران تهدید
seyyid
On فروردین 20, 1402فروردین 28, 1402

سرقت ماشین با تکنیک CAN injection

درباره ما

بعد از چندین سال فعالیت تو حوزه امنیت سایبری و تولید محتوا در شبکه های اجتماعی ، بالاخره تصمیم گرفتیم تا یه سایت راه اندازی کنیم و مطالب رو ساده تر ، در یک محیط منسجم و طبقه بندی شده به دست مخاطب برسونیم. امیدوارم که قدمی در راستای رشد امنیت سایبری کشورمون برداشته باشیم.

تگ ها

0day APT command injection Deserialization of Untrusted Data Directory Traversal FBI Fortinet Heap buffer overflow integer overflow kali LockBit Memory Corruption nuclei Off By One Security out-of-bounds write Out of bounds read Patch Tuesday PWN2OWN Stack Buffer overflow type confusion use after free vulnerable wordpress XSS ZDI vulnerability آموزش اکسپلویت نویسی ارز دیجیتال اندروید اپل اکسپلویت باج افزار تلگرام زیرودی سیسکو فارنزیک فورتی نت فیشینگ لاک بیت مایکروسافت هوش مصنوعی وردپرس وردپرس آسیب پذیر ویندوز پلاگین کروم گوگل

شبکه های اجتماعی

    • Instagram
    • Telegram
    • Twitter
    • GitHub
    • YouTube
    • LinkedIn
      کپی مطالب با ذکر منبع بلامانع است | 1401-1404