افزونه لایتاسپید کش (LiteSpeed Cache) یک افزونه رایگان و اپنسورس وردپرس است که از طریق مخزن وردپرس قابل دریافت و نصب می باشد و طبق آمارهای دانلود وردپرس، بیش از 5 میلیون نصب موفق داشته است. (صفحه افزونه در مخزن وردپرس)
این افزونه، برای بهبود سرعت وبسایتهای وردپرسی با ایجاد کشهای سمت سرور و مجموعه ای از بهینهسازیها برای فایلهای ضروری وبسایت مورد استفاده قرار می گیرد. با این آمار نصب موفق، تعداد زیادی از وبسایتهای وردپرسی در معرض خطر قرار گرفتهاند.
باگ امنیتی کشف شده در افزونه کش لایتاسپید، باعث ایجاد آسیب پذیری میشود که وبسایتهای وردپرسی را در خطر میاندازد و امکان در دست گرفتن مدیریت وردپرس توسط نفوذگر وجود دارد.
نفوذگرها از طریق این حفره امنیتی خطرناک میتوانند بر روی تمام وبسایتهای وردپرسی که افزونه کش لایتاسپید نصب شده است، به صورت غیر مجاز یک حساب ادمین با دسترسی مدیر ایجاد کنند و مدیریت وبسایت را در دست بگیرند.
این باگ امنیتی، در نسخههای 1.9 تا نسخه 6.3.0.1 گزارش شده است و باید هر چه سریع تر به ورژن 6.4 آپدیت شود.
این آسیب پذیری در افزونه کش لایتاسپید با کد CVE-2024-28000 ثبت شده است و در ورژن 6.4 افزونه کش لایتاسپید نیز برطرف شده است.
برای رفع این مشکل آسیبپذیری اکیدا توصیه میشود که هر چه سریعتر ، افزونه را به ورژن 6.4 بروز کنید.
در این آسیب پذیری، مهاجم میتوانست یک کاربر با سطح دسترسی مدیر کل برای وبسایت وردپرسی ایجاد کند. همچنین مهاجم میتوانست افزونه های آلوده دلخواه را بدون اطلاع و اجازه مدیر اصلی وبسایت، نصب کند و یا تنظیمات اصلی و حیاتی وبسایت را تغییر دهد.
همینطور شخص مهاجم میتوانست تمام ترافیک را به وبسایتهای اسپم دلخواه خود ریدایرکت کند. و یا برای تمام کاربران وبسایت هرزنامههای تبلیغاتی ارسال کند و تمام اطلاعات حساس کاربران را دانلود و برای فروش قرار دهد.
با توجه به اینکه این افزونه 5 میلیون نصب موفق داشته است از زمان اعلام این آسیب پذیری 2.8 میلیون کاربر اقدام به دریافت و بروزرسانی ورژن جدید کرده اند و این بدان معنی هست که هنوز حدود 2.2 میلیون وبسایت مستعد این آسیب پذیری هستند.
آسیب پذیری افزونه کش لایتاسپید
این آسیب پذیری در افزونه کش به دلیل سطح پایین امنیت مقدار هش شده یکی از مقادیر مربوط به این افزونه، در دیتابیس به وجود آمده است.
افزونه کش لایتاسپید، برای بهبود سرعت وبسایت، یک کراولر (crawler) یا خزشگر داخلی دارد که به صورت زمان بندی شده صفحات وبسایت را باز و کش میکند.
برای انجام این کار، این کراولر باید مشابه یه کاربر وردپرس لاگین شده که یک ID خاصی دارد، در سایت اقدام به باز کردن صفحات کند.
برای انجام این کار، افزونه دو مقدار litespeed_role,litespeed_hash را به عنوان مقادیر کوکی برای یوزر که خودش تعریف کرده است، در دیتابیس وبسایت اضافه میکند.
در ادامه افزونه لایتاسپید یوزر وردپرسی که وظیفه کراول وبسایت را دارد، توسط تابع wp_set_current_user به عنوان کاربر جاری به وردپرس معرفی میکند.
مشکل از جایی شروع میشود که کد هش litespeed_hash که توسط افزونه و به کمک تابع ()Str::rrand ایجاد میشود، امنیت لازم را ندارد و به راحتی شکسته میشود.
از جمله مشکلاتی که این کد هش شده دارد میتوان به موارد زیر اشاره کرد :
1- کد هش ایجاد شده در این روش بر اساس میکروثانیه (microsecond) زمان فعلی ایجاد میشود. این مفهوم یعنی اینکه مقدار هش شده فقط میتواند 999,999 حالت مختلف داشته باشد.
میتوان نتیجه گرفت که عدد تولید شده به روش بالا به اندازه کافی غیر قابل پیش بینی و غیر قابل حدس نیست و به بیان دیگر به قدر کافی قوی نیست.
2- کلید هش ایجاد شده فقط یک بار تولید میشود و با عنوان litespeed.router.hash در دیتابیس ذخیره میشود. این مقدار بدون هیچ تبدیل و یا رمزنگاری دیگری در دیتابیس ذخیره میشد.
یکی از مشکلات و ضعفها این بود که این کلید امنیتی هش شده فقط کافی بود یک بار تولید شود و دیگر هرگز تغییر نمیکرد.
3- با تمام تفاسیر و توضیحات بالا، برای نفوذ به یک وبسایت وردپرسی که کش لایتاسپید نصب بود و کراولر آن فعال شده بود، فقط 1 میلیون مقدار ممکن برای کلید امنیتی وجود داشت و در نتیجه قابل شکستن می باشد.
با توجه به اینکه کلید امنیتی بعد از ایجاد هرگز تغییر نمیکرد، فقط نیاز است که این 1 میلیون کد هش امنیتی ساخته و با هش موجود در دیتابیس مطابقت داده شود. لذا در زمانی بین چند ساعت الی یک هفته، کلید امنیتی litespeed_hash توسط فرد مهاجم پیدا میشود.
درخواستها به اندپوینت /wp/v2/users که بخش از REST API وردپرس است ارسال میشود.
با توجه به اینکه در اکثر وبسایتهای وردپرسی، آی دی ادمین اصلی وردپرس 1 است و با کشف کلید امنیتی لایتاسپید، فرد مهاجم میتواند با این سطح از دسترسیها، با استفاده از REST API ، درخواست ایجاد یک کاربر جدید با سطح دسترسی ادمین به وردپرس ارسال کند و بعد از ایجاد شدن این کاربری، با دسترسیهای ساخته شده به وبسایت لاگین کند.
علاوه بر این ضعف دیگری هم که در این افزونه وجود داشت این بود که اگر تنظیمات Debug Log افزونه فعال بود، تمام هشهای امنیتی تست شده غیرقابل استفاده در لاگ debug.log در فولدر /wp-content/ ذخیره میشد که میتوانست به پیدا کردن سریع تر کد هش شده به فرد مهاجم کمک کند.
بروز رسانیهای لایتاسپید کش برای رفع این باگ امنیتی:
این ضعف امنیتی به دلیل کلید هش با امنیت بسیار پایین بود. برای همین تیم توسعه افزونه، تغییرات زیر را برای رفع این مشکل در نسخه 6.4 اضافه کردند:
1- اضافه کردن آپشن جدیدی به نام async_call-hash در تابع ()Router::async_litespeed_handler
2- اضافه کردن مقدار litespeed_flash_hash یک بار مصرف که بعد از اعتبار سنجی حذف میشود و بعد از ایجاد فقط 120 ثانیه اعتبار دارد.
3- استفاده از طول رشته 32 کاراکتری و تصادفی برای مقادیر litespeed_hash,litespeed_flash_hash,async_call-hash تا حدس زدن و پیدا کردن آنها سخت تر و غیر ممکن شود.
4- با هر بار کراول صفحات، کلید هش مجددا ساخته میشود.
لیست کامل تغییرات در ورژن جدید لایتاسپید در این صفحه قابل مشاهده است.
با توجه به این آسیب پذیری پیشنهاد می شود در اسرع وقت این افزونه بروزرسانی شود.
یا در صورت نیاز این افزونه از روی وبسایت حذف و مجدد نسخه جدید آن بر روی وبسایت نصب و کانفیگ شود.
برای پیشگیری از مشکلات احتمالی، حتما قبل از بروزرسانی و یا نصب مجدد، فول بک آپ تهیه و دانلود کنید.