یک آسیبپذیری از نوع ناامن بودن Deserialization (CWE-502) در کتابخانه DataStax pulsar-jms (نسخههای تا 9.0.3) شناسایی شده است. این نقص امنیتی در تابع decode از کلاس PulsarObjectMessage.java قرار دارد و میتواند به مهاجم اجازه دهد تا در صورت وجود زنجیرههای گجت (Gadget Chains) مناسب در classpath برنامه، منجر به اجرای کد از راه دور (RCE) شود.
جزئیات فنی و سناریوی حمله
برای بهرهبرداری از این آسیبپذیری، مهاجم باید دارای دسترسی با سطح دسترسی پایین (Low-privilege) باشد تا بتواند پیامهای JMS را به یک مقصد در Pulsar ارسال کند. سناریوی حمله به شرح زیر است:
- مهاجم یک
JMS ObjectMessageحاوی یک شیء جاوا (Java Object) دستکاری شده را به یک موضوع (Topic) در Pulsar ارسال میکند. - برنامه مصرفکننده (Consumer) که از این پیام استفاده میکند، تابع
decodeرا فراخوانی میکند. - در حین فرآیند
deserialization، اگر کلاسهای آسیبپذیر درclasspathبرنامه موجود باشند، مهاجم میتواند کنترل برنامه را به دست گرفته یا باعث اختلال در دسترسپذیری شود.
اگرچه امتیاز CVSS 4.0 برای این آسیبپذیری 5.3 (Medium) ارزیابی شده است، اما ماهیت این نقص میتواند در محیطهای خاص با ریسک بالایی همراه باشد. در حال حاضر، یک کد اثبات مفهوم (PoC) به صورت عمومی در GitHub منتشر شده است، اما شواهدی مبنی بر بهرهبرداری گسترده یا فعال در محیطهای واقعی وجود ندارد.
اقدامات اصلاحی و راهکارهای مقابله
در حال حاضر نسخه اصلاحشدهای (Patch) توسط سازنده منتشر نشده است. تیمهای امنیتی و توسعهدهندگان توصیه میکنند اقدامات زیر را انجام دهند:
- تغییر پروتکل پیام: از ارسال
JMS ObjectMessageخودداری کرده و برنامهها را به استفاده ازTextMessageیاBytesMessageتغییر دهید. - استفاده از فیلترهای امنیتی: در صورت ضرورت استفاده از ObjectMessage، حتماً از
JVM ObjectInputFilterبا یک لیست سفید (Allow-list) سختگیرانه برای محدود کردن کلاسهای مجاز استفاده کنید. - محدودسازی دسترسیها: دسترسیهای انتشار (Publish) در موضوعات (Topics) Pulsar را تنها به کاربران و سرویسهای مورد اعتماد محدود کنید (استفاده از ACL).
- مانیتورینگ: وضعیت انتشار وصله امنیتی را در مخزن GitHub پروژه دنبال کنید.