CVE-2021-44228 چگونه عمل میکند؟
این آسیبپذیری بسیار شدید است و در عین حال عملکردی بسیار ساده دارد. مهاجم تنها لازم است یک فایل مخرب جاوا آماده کند و آن را روی سروری که کنترل میکند نصب کند. سپس رشته زیر را در دادهای که توسّط سرور برنامه ثبت میشود قرار دهد:

وقتی سرور آسیبپذیر این رشته را ثبت میکند، Log4j کد جاوا را از یک سرور تحت کنترل مهاجم بازیابی و اجرا میکند. و امکان اجرای کد دلخواه را فراهم میسازد. اگر کد یک RemoteShell (پوسته از راه دور) باشد، مهاجم یک LocalShell (پوسته محلی) با امتیازات کاربر سیستمی که برنامه آسیبپذیر را اجرا میکند، به دست میآورد.
چه کسانی تحت تاثیر CVE-2021-44228 هستند؟
با توجّه به اینکه سرورها حجم زیادی از داده را در خود ثبت میکنند، سطح حمله بسیار وسیع است. و شامل هدرها و همچنین ورودیهای قابل مشاهده تری هم میشود. Log4j توسط بسیاری از فریمورکها و بستههای برنامه کاربردی جاوا مانند Hadoop، Struts، ElasticSearch، Grails، Kafka و … استفاده میشود. این بدان معناست که این آسیبپذیری نه تنها در برنامههای وب مبتنی بر جاوا، بلکه در لایههای عمیق صدها هزار برنامه سازمانی نیز تعبیه شده است.
برخلاف هک Solarwinds که سازمانهای نسبتاً کمی (در سطح جهانی) را تحت تأثیر قرار داد. و به تلاش دستی برای بهرهبرداری از سیستمهای خاص نیاز داشت، بهره برداری از Log4Shell به طرز مضحکی آسان است.
به بیان سادهتر، اگر نسخهای از آسیبپذیری Log4Shell را در هرجایی از محیط لایو جاوای خود دیدید، در معرض خطر اجرای کد از راه دور (RCE) هستید.
Log4Shell چه ویژگیهایی دارد؟
CVE نمونه بارز این است که چگونه چندین ویژگی ظاهرا بیخطر یا کمخطر، میتوانند منجر به یک آسیبپذیری ویرانگر شوند:
- جدا از متن سادهی Log4Shell، این آسیبپذیری از متغیرهایی نیز برای درج آسان دادههای اضافی در گزارشهایی مانند رکوردهای زمانی یا ورژنهای مختلف یک نرمافزار، استفاده میکند.
- این متغیرها میتوانند شامل تماسهایی از طریق JNDI (نامگذاری جاوا و رابط دایرکتوری) باشند، بهعنوان مثال برای بازیابی نام کاربری از یک فهرست مرکزی برای درج آن در یک گزارش، LDAP یکی از پروتکلهای دایرکتوری پشتیبانی شده است. (در حالی که دیگر متغیرها نیز برای حمله قابل استفاده هستند.)
- تنها در صورتی که این داده هدف برای یک پاسخ LDAP بیش از حد بزرگ باشد، میتوانید یک URL خارجی را نیز بهعنوان منبع داده ارائه دهید.
- با این وجود که این کار ربطی به لاگ کردن ندارد، اتفاقا میتوان از JNDI برای بازیابی داده، اعم از متنی و سایر دادهها نیز استفاده کرد؛ مانند آبجکتهای اپلیکیشنهای ذخیرهشده برای بارگیری و تولید مجدد.
با نگاهی دوباره به رشته بهرهبرداری (اکسپلویت) نمونه، میتوانید ببینید که چگونه ترکیب این چهار ویژگی میتواند منجر به اجرای کد از راه دور از طریق تزریق JNDI شود:

مهاجم این رشته را در جایی قرار میدهد که توسط سرور ثبت شود. مانند: هدر درخواست، نام هاست، نام دستگاه یا هر تعداد از مکانهای دیگر. سرور از Log4j میخواهد که این رشته را وارد کند. Log4j متغیّری را با فراخوانی JNDI میبیند که به یک منبع LDAP اشاره میکند. که در این مورد این منبع یک فایل کلاس جاوا است. سپس فایل را از سرور مهاجم بازیابی کرده و آن را از سریال جدا میکند تا کلاس جاوای موجود در آن دوباره ایجاد شود. و اگر آن کلاس یک RemoteShell (پوسته از راه دور) بود، متأسفانه باید بگویم که شما به تازگی هک شدهاید.
چگونه آسیب پذیری Log4Shell را شناسایی کنیم؟
اگر هر برنامه جاوایی دارید که از Log4j قدیمیتر از 2.15.0 استفاده میکند، از طریق CVE-2021-44228، در برابر RCE آسیبپذیر هستید. (و نسخههای پچ شدهی قدیمیتر از 2.17.0، اکنون آسیبهای جدی دیگری هم دارند.) توجه داشته باشید که Log4j ممکن است بهطور پیشفرض با نرم افزارهای جاوا مانند سرورهای برنامه و فریمورکهای توسعهدهنده ،و بهطور بالقوه در مکانهای مختلف نصب شود. بنابراین، حتی اگر فکر میکنید آنرا در جایی نصب نکردهاید، دوباره بررسی کنید. برای جزئیات بیشتر در مورد آسیبپذیریها و کاهش آنها، به سایت پروژه Log4j مراجعه کنید.
به روز رسانی شده: شما میتوانید از NetSparker (استاندارد یا شخصی سازی شده بر اساس تقاضا) برای آزمایش اینکه آیا برنامههای تحت وب شما در برابر حملات Log4Shell آسیبپذیر هستند یا خیر استفاده کنید. بررسی امنیتی Log4Shell را به فیلترهای موجود در اسکن خود اضافه کنید. یا به منظور بررسی این آسیبپذیری در چند دقیقه، یک فیلتر اسکن جداگانه ایجاد کنید.
نحوه تعدیل CVE-2021-44228
راه حل توصیه شده این است که سریعاً Log4Shell خود را به نسخه 2.17.0 (یا جدیدتر) بهروزرسانی کنید. توجه داشته باشید که پچ اولیه در نسخه 2.15.0 در برابر آسیبپذیریهای جداگانه DOS و RCE آسیبپذیر است. (CVE-2021-45105)
همچنین پچ 2.16.0 در برابر DOS (CVE2021-4505) و حملات نامطمئن سریالزدایی در خطر آسیب قرار دارد. (CVE-2021-4104)
علاوه بر این، تعدیل کنندههای موقتی که پیشتر منتشر شده بودند نیز دیگر چندان کارامد نیستند. و ممکن است حتی در برخی موارد بی اثر باشند.
اگر نمیتوانید در حال حاضر به نسخه 2.17.0 (یا جدیدتر) به روزرسانی کنید، گزینههای زیر را برای تعدیل موقتی روی میز دارید. (برای دریافت اطلاعات دقیق به راهنمای تعدیل lunasec مراجعه کنید) :
- میتوانید بهطور دستی JNDI را تغییر دهید تا بتوانید موقتا حملات مبتنی بر JNDI را تا زمان به روز رسانی بعدی، مسدود کنید. ابزار Log4jHotpatch برای انجام این کار حتی زمانی که سرور در حال اجرا است در دسترس است. پچ کردن به صورت آنلاین و از راه دور، از طریق خودآسیبپذیری نیز بهعنوان آخرین راه حل توصیه میشود.
- تعدیل موقت قبلی ممکن است در برخی موارد همچنان در برابر CVE-2021-44228 محافظت کند. اما به یاد داشته باشید که اکنون ممکن است در برابر یک یا چند آسیب پذیری جدید کشف شده (که در بالا عنوان شده بود) آسیب پذیر باشید. برای نسخه 10 یا بالاتر، میتوانید با تنظیم ویژگی سیستمی log4j2.formatMsgNoLookups یا قرار دادن متغیر LOG4J_FORMAT_MSG_NO_LOOKUPS بر روی گزینه true و ریاستارت برنامه، خطر را کاهش دهید. این کار ممکن است تأثیرگذار باشد یا نباشد، بنابراین به روز رسانی به 2.17.0 تنها اقدام مطمئن توصیه شده است.
این کار در توسعه برنامههای کابربردی وب در آینده چه تأثیری دارد؟
با نگاهی به عزم فراگیر و جهانی موجود برای اصلاح آسیبپذیری Log4Shell، داشتن یک رویکرد قوی و چند لایه امنیتی همچنان بهترین استراتژی برا ی محافظت از شرکت شما در برابر تهدیدات آینده است..
Leave feedback about this