کشف آسیبپذیری مشابه Log4Shell در پایگاهداده H2
خلاصه: H2 سیستم مدیریت پایگاهداده رابطهای متن باز است که به زبان جاوا نوشته شده است. این پایگاهداده با ارائه راهکار حافظهای سبک در میان برنامهنویسان بسیار محبوب است. آسیبپذیری کشفشده، به مهاجمان اجازه میدهد با تزریق کد به سوءاستفاده از سیستمهای آسیب پذیری اقدام کنند.
محققان شرکت امنیتی JFrog، آسیبپذیری جدیدِ اجرای کد از راه دور (remote code execution) را در پایگاهداده H2 کشف کردهاند. H2 سیستم مدیریت پایگاهداده رابطهای متن باز است که با زبان جاوا نوشته شده است. آسیبپذیری کشفشده، به مهاجمان اجازه میدهد از طریق تزریق کد (code injection) از آسیبپذیریهای برنامهها و نرمافزارها سوءاستفاده کند. پایگاهداده H2 برای برنامهنویسان جذاب به نظر میرسد زیرا راهکار حافظهای سبکی را ارائه میدهد. با وجود این پایگاه داده نیازی به ذخیرهسازی دادهها در حافظه وجود ندارد. آسیبپذیری CVE-2021-42392 مشابه Log4Shell است ولی به نظر نمیرسد که بتواند به وسعت خسارات Log4Shell دردسرآفرین باشد. در اوایل دسامبر، Log4Shell به کتابخانه Apache Log4j logging متصل شد و بلافاصله مورد سوءاستفاده مهاجمان قرار گرفت. برای آسیبپذیری Log4j، 60 نوع اکسپلویت مختلف در طول 24 ساعت ایجاد شد و حتی وصلهای که در ابتدا برای آن منتشر شد حمله DoS را ممکن میکرد.
چرایی شباهت آسیبپذیری H2 به Log4j
علت اصلی آسیبپذیری H2، در بارگذاری کلاس از راه دور JNDI است (JNDI remote class loading). این آسیبپذیری، شبیه به Log4Shell است زیرا از چندین مسیر کد در پایگاهداده H2 میتواند URLهای فیلترنشدهای را که در کنترل مهاجم هستند به تابع javax.naming.Context.lookup ارسال کند. به گفته محققان، این کار امکان بارگذاری پایگاهداده از راه دور را فراهم میکند که به عنوان Java code injection یا remote code execution(RCE) شناخته میشود.
متد org.h2.util.JdbcUtils.getConnection، نام کلاس driver و URL پایگاهداده را به عنوان پارامترهاش میگیرد. اگر کلاس driver قابل انتساب به کلاس javax.naming.Context باشد، متد شی را از آن نمونهسازی میکند و متد Lookup آن را فراخوانی میکند.
مقایسه گستردگی H2 نسبت به Log4Shell
گرچه آسیبپذیری H2 مشکل حیاتیای است اما به دلایل زیر به اندازه Log4Shell گسترده نیست.
- برخلاف Log4Shell آسیبپذیری H2، تاثیرش به صورت مستقیم است؛ به این معنی که معمولاً سروری که درخواست اولیه را پردازش میکند (همان کنسول H2)، مستقیماً از خطای اجرای کد از راه دور (RCE) تأثیر میپذیرد. خسارت آسیبپذیری H2 در مقایسه با Log4Shell کمتر است زیرا سرورهای آسیبپذیر راحتتر پیدا میشوند.
- به طور پیشفرض، در توزیعهای vanilla پایگاهداده H2، کنسول H2 فقط به اتصالات Local Host گوش میدهد؛ بدین ترتیب تنظیمات پیشفرض را امن میکند. این اتفاق برخلاف، Log4Shell است که در پیکربندی پیشفرض Log4j قابل بهرهبرداری بود. به گفته متیو وارنر، Log4j منحصر به فرد بود زیرا هر تعداد رشته دستکاری شده در حمله از هدر تا مسیرهای URL، بسته به نحوه تنظیم برنامه برای استفاده از ورود به سیستم با Log4j، میتواند منجر به سوءاستفاده از قربانی شود. با این حال، میتوان کنسول H2 را به راحتی برای گوشدادن به اتصالات از راه دور تغییر داد که خطر را افزایش میدهد.
- بسیاری از افراد پایگاهداده H2 را اجرا میکنند اما کنسول H2 را اجرا نمیکنند. اگرچه بردارهای دیگری غیر از کنسول برای سوءاستفاده از این موضوع وجود دارد اما اینها بردارهای وابسته به context هستند و کمتر در معرض مهاجمان از راه دور قرار میگیرند.
شکل 1- روند حمله احتمالی به پایگاه داده H2 (منبع jfrog.com)
افرادِ در معرض خطر
سؤالی که پیش میآید این است که اگر آسیبپذیری H2 به خطرناکی Log4Shell نیست، پس چرا نیازمند توجه است. تیم JFrog اشاره میکند که این آسیبپذیری میتواند بسیار حیاتی باشد و به کسانی که کنسول H2 را در شبکه محلی مثل LAN و یا حتی بدتر از آن، در شبکه گستردهتری مثل WAN اجرا میکنند، اجازه RCE احراز اصالت نشده را بدهد. به گفته محققان، حمله مستقیم به کنسول H2 شدیدترین عامل حمله است. وارنر اشاره میکند که طبق اطلاعات به دستآمده از OSINT احتمالاً کمتر از 100 سرور در اینترنت تحت تاثیر آسیبپذیری H2 قرار دارند؛ بنابراین فقط تعداد بسیار محدودی از سازمانها مستقیماً تحت تاثیر قرار میگیرند. این آسیبپذیری به افراد یادآور میشود که سرویسهای حساس را باید فقط در فضای داخلی باشند تا خطرات احتمالی آینده کاهش یابد.
محققان JFrog توضیح میدهند که بسیاری از ابزارهای برنامهنویسان به پایگاهداده H2 متکی است و به ویژه، کنسول H2 را برای نمایش استفاده میکنند. این روند اخیر حملات زنجیره تأمین که برنامهنویسان را هدف قرار میدهد مانند بستههای مخرب در repositoryهای محبوب نگرانکننده است.
نتیجهگیری
کارشناسان امنیتی تأکید میکنند که امنشدن ابزار برنامهنویسان برای استفاده صحیح بسیار اهمیت دارد. از این رو، امیدوارند بسیاری از ابزارهای وابسته به H2 پس از اعمال اصلاحاتی که توصیه شده، امنتر شوند. تیم JFrog به همه کاربران پایگاهداده H2 توصیه میکند که نسخه فعلی خود را به نسخه 2.0.206 ارتقا دهند. در این نسخه CVE-2021-42392، با محدود کردن URLهای JNDI برای استفاده از پروتکل محلی جاوا، رد کردن هرگونه درخواست LDAP/RMI از راه دور را رفع میکند. این رفع آسیبپذیری، شبیه به فرآیند اصلاح در Log4j 2.17.0 است. محققان افزودند، حتی آنهایی که مستقیماً از کنسول H2 استفاده نمیکنند، باید به دلیل وجود سایر بردارهای حمله بهروزرسانی شوند تا امکان استفاده از این آسیبپذیری دشوار باشد.