ما می دانیم که بسیاری از شما سخت در حال رفع آسیب پذیری جدید و جدی Log4j 2 CVE-2021-44228 هستید که دارای امتیاز CVSS 10.0 است. ما #هووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووون این آسیب‌پذیری در Log4j 2، یک کتابخانه ثبت جاوا بسیار رایج، امکان اجرای کد از راه دور را می‌دهد، اغلب از زمینه‌ای که به راحتی در دسترس مهاجم است. به عنوان مثال، در سرورهای Minecraft یافت شد که اجازه می داد دستورات در سیاهههای چت تایپ شوند، زیرا آنها سپس به لاگر ارسال می شدند. این آن را به آسیب‌پذیری بسیار جدی تبدیل می‌کند، زیرا کتابخانه ورود به سیستم بسیار مورد استفاده قرار می‌گیرد و ممکن است بهره‌برداری از آن ساده باشد. بسیاری از نگهبانان منبع باز به سختی با اصلاحات و به‌روزرسانی‌های اکوسیستم نرم‌افزار کار می‌کنند.

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

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

آیا من آسیب پذیر هستم؟

نسخه های آسیب پذیر Log4j 2 شامل نسخه های 2.0 تا نسخه 2.14.1 هستند. اولین نسخه ثابت 2.15.0 است. ما قویاً شما را تشویق می کنیم که در صورت امکان به آخرین نسخه به روز رسانی کنید. اگر از نسخه‌ای قبل از 2.0 استفاده می‌کنید، آسیب‌پذیر نیستید.

اگر از این نسخه‌ها استفاده می‌کنید، ممکن است آسیب‌پذیر نباشید، زیرا ممکن است پیکربندی شما قبلاً این موضوع را کاهش دهد (به بخش کاهش‌دهنده‌ها در زیر مراجعه کنید)، یا مواردی را که ثبت می‌کنید ممکن است شامل هیچ ورودی کاربر نباشد. اما بدون درک همه مسیرهای کد که ممکن است با جزئیات وارد شوند و از کجا ممکن است ورودی دریافت کنند، اعتبارسنجی این ممکن است دشوار باشد. بنابراین احتمالاً می‌خواهید همه کدها را با استفاده از نسخه‌های آسیب‌پذیر ارتقا دهید.

پیکربندی فرمان docker scan که قبلاً در نسخه‌های Docker Desktop 4.3.0 و قبل از آن ارسال شده بود، متأسفانه این قابلیت انتخاب نمی‌شود. در اسکن ها لطفاً با Docker Desktop 4.3.1+ با docker scan 0.11.0+، که امروز، 11 دسامبر 2021 منتشر کردیم، به‌روزرسانی کنید.. ]docker scan از لینوکس می‌توانید باینری‌ها را از GitHub دانلود کرده و در فهرست پلاگین‌ها نصب کنید، همانطور که در دستورالعمل‌های اینجا توضیح داده شده است. ما به‌زودی نسخه CLI لینوکس را به‌روزرسانی می‌کنیم تا اسکن docker به‌روزرسانی شده را نیز در بر بگیرد.

اگر از نسخه به‌روزرسانی شده استفاده می‌کنید ، باید پیامی را در گزارش خروجی مشاهده کنید:

 org.apache را ارتقا دهید. .logging.log4j:[email protected] به org.apache.logging.log4j:[email protected] برای رفع مشکل
  ✗ اجرای کد دلخواه (جدید) [Critical Severity][https://snyk.io/vuln/SNYK-JAVA-ORGAPACHELOGGINGLOG4J-2314720] در org.apache.logging.log4j:[email protected]
    معرفی شده توسط org.apache.logging.log4j:[email protected]

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

docker scan elastic/ logstash:7.13.3

یا برای حذف تمام آسیب پذیری های دیگر

docker scan elastic/logstash:7.13.3 | grep 'اجرای کد دلخواه'

برای اطلاعات بیشتر در مورد اسکن docker، به مستندات مراجعه کنید. ما در تلاش هستیم تا در اسرع وقت این مشکل را برطرف کنیم و تصاویر موجود را دوباره اسکن کنیم تا بتوانید ببینید کدام یک آسیب پذیر هستند. از این بابت پوزش می‌خواهیم و به محض اینکه این مشکل را برطرف کردیم، اینجا را به‌روزرسانی خواهیم کرد. لطفاً از اسکن داکر از نسخه به‌روزرسانی‌شده بالا استفاده کنید تا زمانی که این مشکل برطرف شود.

اقدامات کاهشی

ممکن است بخواهید از فایروال برنامه وب (WAF) به عنوان بخش اولیه فرآیند کاهش و اصلاح خود استفاده کنید.

اگر نسخه Log4j 2 مورد استفاده شما 2.10.0 یا جدیدتر باشد، یک متغیر محیطی یا گزینه خط فرمان جاوا وجود دارد که می توانید از آن برای غیرفعال کردن رفتار جایگزینی ناامن استفاده کنید. می‌توانید خط:

ENV LOG4J_FORMAT_MSG_NO_LOOKUPS=true

را به Dockerfile خود اضافه کنید، یا می‌توانید پرچم معادل "-Dlog4j.formatMsgNorue901 را در دستورات خود [4=trueLookup1]، اجرا کنید. برای مثال:

CMD ["java", "-Dlog4j.formatMsgNoLookups=true", "-jar", "..."]

هر دوی اینها معادل هستند. شما می‌توانید با مثالی از اثبات مفهوم مخزن کار این کار را ببینید.

همچنین می‌توانید متغیر محیطی را در زمان اجرا پیکربندی کنید، که می‌تواند آسان‌تر باشد، برای مثال برای Kubernetes می‌توانید این خطوط را به پیکربندی خود اضافه کنید.

 مشخصات:
  ظروف:
  - نام: ...
    تصویر: ...
    env:
    - نام: LOG4J_FORMAT_MSG_NO_LOOKUPS
      مقدار: "true"

برای Docker Compose می توانید از چیزی مانند:

web استفاده کنید:
  محیط:
    - LOG4J_FORMAT_MSG_NO_LOOKUPS=true

تصاویر رسمی Docker

تعدادی از تصاویر رسمی Docker حاوی نسخه‌های آسیب‌پذیر Log4j 2 هستند. مواردی که ما معتقدیم ممکن است حاوی نسخه‌های آسیب‌پذیر Log4 در این زمان باشند:

couchbase

elasticsearch

flink

geonetwork

lightstreamer

logstash

neo4j

nuxeo

solr

sonarqube

طوفان

اکسویکی [19659002]ما در حال به روز رسانی Log4j 2 در این تصاویر به آخرین نسخه موجود هستیم. ممکن است این تصاویر به دلایل دیگر آسیب‌پذیر نباشند، و می‌توانید آن را در وب‌سایت‌های بالادست بررسی کنید.

در عین حال، برای برنامه‌های در حال اجرا خود که از این تصاویر استفاده می‌کنند، برای اطلاعاتی در مورد نحوه تنظیم متغیر محیطی در بالا به موارد کاهش‌دهنده مراجعه کنید. زمان اجرا برای کاهش CVE. لطفاً توجه داشته باشید: geonetwork و logstash هر دو از نسخه‌های قبلی Log4j 2 استفاده می‌کنند که کاهش متغیر محیطی برای آن‌ها کار نمی‌کند، بنابراین نمی‌توانید این دو را به این روش کاهش دهید.

اگر از موارد دیگر استفاده می‌کنید. تصاویر به عنوان یک پایه (مانند openjdk) که نسخه های Log4j 2 را تحت تأثیر قرار نمی دهند، ممکن است Log4j 2 را به عنوان بخشی از ساخت خود در بالای یک تصویر بدون تأثیر اضافه کنید و باید وابستگی Log4j 2 خود را به روز کنید. آخرین نسخه ثابت.

تصاویر دیگر در Docker Hub

ما در حال کار با ناشران تأییدشده Docker برای شناسایی و به‌روزرسانی تصاویر آسیب‌دیده آنها هستیم. ما به دنبال راه‌هایی برای نشان دادن تصاویری هستیم که تحت تأثیر قرار گرفته‌اند و با داشتن اطلاعات بیشتر به به‌روزرسانی این پست ادامه می‌دهیم.

آیا زیرساخت Docker تحت تأثیر قرار گرفته است؟ . داکر تا حد زیادی از کد Go برای ساخت برنامه های ما استفاده می کند، نه جاوا. اگرچه ما از برخی برنامه‌های جاوا به صورت داخلی استفاده می‌کنیم، اما تأیید کرده‌ایم که در برابر CVE-2021-44228 آسیب‌پذیر نیستیم.