پژوهشگران امنیت سایبری سه آسیبپذیری در رابط وبسرور Rack Ruby و یک آسیبپذیری در Infodraw شناسایی کردهاند که در صورت اکسپلویت موفق، به مهاجمان امکان میدهند به فایلهای حساس دسترسی غیرمجاز پیدا کنند، دادههای مخرب تزریق کنند و در شرایط خاص، لاگهای سیستم را دستکاری کنند.
آسیبپذیری مربوط به Infodraw
یک نقص امنیتی بحرانی در سرویس Infodraw Media Relay Service (MRS) شناسایی شده است. این نقص، با شناسه CVE-2025-43928 و امتیاز CVSS 9.8، از طریق آسیبپذیری پیمایش مسیر (Path Traversal) در پارامتر نام کاربری صفحه ورود سیستم، امکان خواندن یا حذف فایلهای دلخواه را برای مهاجمان فراهم میکند. این آسیبپذیری، که امکان ورود با نامهای کاربری نظیر “../../../../” را فراهم میسازد، نسخههای ویندوز و لینوکس سرویس MRS را تحت تأثیر قرار میدهد.
آشنایی با Rack
Rack یک رابط کاربری ماژولار است که سرورهای وب را به برنامههای وب مبتنی بر Ruby متصل میکند. این رابط با استانداردسازی تعامل بین این اجزا، درخواستها و پاسخهای HTTP را در قالب یک فراخوانی ساده ترکیب میکند. این کار فرآیند توسعه را سادهتر کرده و سازگاری بین فریمورکها و سرورهای مختلف را تقویت میکند.
Rack در بسیاری از فریمورکها و کتابخانههای وب Ruby، مانند Ruby on Rails و Sinatra، استفاده میشود. با بیش از یک میلیارد دانلود در سراسر جهان، Rack نقش کلیدی در اکوسیستم توسعه Ruby ایفا میکند. اجزای میانافزار (Middleware) مانند Rack::Static و Rack::Sendfile با مدیریت ارائه محتوای ایستا و بهینهسازی انتقال فایلها، کارایی برنامهها را افزایش میدهند. با این حال، به دلیل استفاده گسترده از Rack، هرگونه آسیبپذیری در این فریمورک میتواند پیامدهای امنیتی جدی برای برنامهها و سیستمهای متعدد در سراسر جهان داشته باشد.
Rack::Static چیست؟
Rack::Static یک میانافزار مهم در برنامههای Rack است که برای ارائه فایلهای ایستا مانند JavaScript، CSS و تصاویر بهصورت کارآمد طراحی شده است. با استفاده از Rack::Static، توسعهدهندگان میتوانند بدون نیاز به پیکربندی اضافی سرور وب، محتوای ایستا را بهراحتی در برنامههای Ruby ادغام کنند.
در پیکربندی Rack::Static، دو گزینه کلیدی که نقش مهمی در ارائه فایلهای ایستا ایفا میکنند، گزینه :urls و گزینه :root هستند. درک صحیح و استفاده درست از این گزینهها، فرآیند ارائه فایلهای ایستا را ساده و امن میکند.
گزینه :urls
گزینه :urls مشخص میکند که کدام مسیرهای URL توسط برنامه Rack بهعنوان داراییهای ایستا مدیریت شوند. این گزینه بهصورت آرایهای از رشتهها تعریف میشود که هر رشته یک پیشوند مسیر را نشان میدهد و فعال شدن فرآیند ارائه فایلهای ایستا را آغاز میکند. برای مثال، در پیکربندی زیر:
use Rack::Static, urls: ["/images", "/css", "/js"], root: "public"
درخواستهایی که به مسیرهای /images، /css یا /js ارسال میشوند، توسط Rack::Static پردازش شده و فایلهای مربوطه مستقیما از سیستم فایل ارائه میشوند.
گزینه :root
گزینه :root دایرکتوری پایهای را تعیین میکند که فایلهای ایستا از آن ارائه میشوند. این دایرکتوری نسبت به دایرکتوری کاری جاری برنامه Rack تعریف میشود. با توجه به مثال قبلی:
use Rack::Static, urls: ["/images", "/css", "/js"], root: "public"
وقتی درخواستی برای /assets/logo.png ارسال میشود، Rack::Static تلاش میکند فایلی را که در مسیر public/assets/logo.png قرار دارد ارائه دهد.
جزئیات آسیبپذیریهای مربوط به Rack
شرکت امنیت سایبری OPSWAT این آسیبپذیریها را گزارش کرده است.
- آسیبپذیری، با شناسه CVE-2025-27610 و امتیازCVSS: 7.5 ، یک نقص در پیمایش مسیر (Path Traversal) است که به مهاجم اجازه میدهد در صورتی که مسیر فایلها را شناسایی کند، به تمام فایلهای موجود در زیر دایرکتوری root: مشخصشده دسترسی یابد.
- آسیبپذیری، با شناسه CVE-2025-27111 و امتیاز CVSS: 6.9، امکان تزریق کاراکترهای CRLF در هدرهای تنظیمات سرور را در میانافزار Rack::Sendfile فراهم میکند و با دستکاری لاگها، ردیابی فعالیتهای مخرب را دشوار میسازد.
- آسیبپذیری، با شناسه CVE-2025-25184 و امتیاز CVSS: 5.7، به مهاجم اجازه میدهد با تزریق کاراکترهای CRLF در ورودیهایی مانند نام کاربری، لاگهای Rack::CommonLogger را دستکاری کرده و تحلیل امنیتی را مختل کند.
سوءاستفاده از این نقصها میتواند به مهاجم امکان مخفی کردن ردپاهای حمله، خواندن فایلهای دلخواه و تزریق کد مخرب را بدهد.
جزئیات فنی آسیبپذیری CVE-2025-27610
برای درک عمیقتر نحوه پردازش درخواستها توسط میانافزار Rack::Static، یک محقق شرکت OPSWAT تحلیل جامعی از کد منبع Rack انجام داد. او مشاهده کرد که در زمان مقداردهی اولیه کلاس Rack::Static، اگر گزینه :root بهصورت صریح تعریف نشود، Rack::Static بهطور پیشفرض فایلها را از دایرکتوری کاری جاری (Dir.pwd) ارائه میدهد. در نتیجه، عدم تعریف این گزینه باعث میشود میانافزار بهصورت ضمنی از دایرکتوریای که برنامه از آن اجرا میشود، بهعنوان ریشه استفاده کند.


پس از مقداردهی اولیه، مشخص شد که وقتی Rack::Static یک درخواست HTTP دریافت میکند، متد call فراخوانی میشود.

در ادامه، Rack::Static عملیات ارائه فایل را به Rack::Files واگذار میکند، که تلاش میکند فایل را بر اساس مسیر فایل ساختهشده از دایرکتوری :root پیکربندیشده و PATH_INFO ارائهشده توسط کاربر پیدا کرده و ارائه دهد.

ابتدا، با فراخوانی متدهای can_serve(path) و overwrite_file_path(path)، میانافزارenv[“PATH_INFO”] را بررسی میکند تا مشخص کند آیا درخواست ورودی با یکی از پیشوندهای URL پیکربندیشده (مثل /static یا /public) مطابقت دارد یا خیر.

اگر این شرط برقرار باشد، Rack::Static مسیر فایل را با ترکیب دایرکتوری روت پیکربندیشده (:root) و PATH_INFO ارائهشده توسط کاربر میسازد. این ساخت مسیر بدون نرمالسازی(normalization) یا پاکسازی(sanitization) کافی مسیر ورودی انجام میشود. بهطور خاص، میانافزار PATH_INFO را از درخواست ورودی مستقیما با دایرکتوری مشخصشده توسط گزینه :root ترکیب میکند، که به دلیل اعتبارسنجی ناکافی مسیر ارائهشده، آسیبپذیری ایجاد میکند.

محقق این شرکت، کشف کرد که به دلیل نبود پاکسازی یا اعتبارسنجی مناسب در این فرآیند، اگر PATH_INFO ارائهشده توسط کاربر شامل پیمایش دایرکتوری (directory traversal) باشد و گزینه :root بهصورت صریح تعریف نشده باشد، مسیر فایل ساختهشده میتواند به مکانی خارج از دایرکتوری روت موردنظر اشاره کند و در نتیجه فایلهای حساس را در معرض دسترسی قرار دهد.
توصیههای امنیتی
برای کاهش خطر این آسیبپذیریها، OPSWAT توصیه کرده که سرورهای Rack Ruby به آخرین نسخه بهروزرسانی شوند. در صورتی که اعمال پچ فوری ممکن نباشد، پیشنهاد شده که از استفاده از Rack::Static اجتناب شود یا اطمینان حاصل گردد که گزینه :root به دایرکتوریای محدود شود که فقط شامل فایلهای عمومی قابل دسترسی است. این اقدامات میتوانند از دسترسی غیرمجاز به دادههای حساس و دستکاری لاگها جلوگیری کنند.
همچنین، به سازمانهای متأثر اکیدا توصیه میشود سرویس Infodraw Media Relay Service (MRS) را فورا از دسترس خارج کنند، زیرا تاکنون اصلاحی برای رفع آسیبپذیری CVE-2025-43928 ارائه نشده و احتمال سوءاستفاده از این نقص در آینده نزدیک وجود دارد. در صورتی که غیرفعالسازی سرویس امکانپذیر نباشد، سیستمها باید با اقدامات حفاظتی مضاعف، از جمله استفاده از شبکه خصوصی مجازی (VPN) یا محدودسازی دسترسی به آدرسهای IP مشخص، ایمن شوند.