آسیب پذیری اجرای کد در Apache Tomcat

آسیب پذیری با شناسه ی CVE-2025-24813 در Apache Tomcat گزارش و اصلاح شده که امکان اجرای کد، افشای اطلاعات حساس و دستکاری داده ها رو به مهاجم بدون احراز هویت شده، میده. امتیاز 8.7 و شدت بالا داره.

Apache Tomcat یک سرور وب متن باز و Servlet Container هستش که بطور گسترده برای اجرای برنامه‌ های جاوا استفاده میشه.

این آسیب‌ پذیری بدلیل نقص در مدیریت درخواستهای Partial PUT در Apache Tomcat بوجود میاد. بطور خاص، پیاده‌سازی اولیه درخواستهای Partial PUT از یک فایل موقت استفاده میکنه که نام و مسیر اون بر اساس ورودی کاربر ساخته میشه. در این فرآیند، جداکننده‌های مسیر (مثل /) با نقطه (.) جایگزین میشن. این رفتار، تحت شرایط خاصی، یک حفره امنیتی ایجاد میکنه که مهاجم میتونه ازش سوء استفاده کنه.

Partial PUT چیه؟

وقتی از PUT استفاده میکنیم، کل محتوای یک فایل یا منبع رو با داده‌ های جدیدی که میفرستیم جایگزین میکنیم. در Partial PUT، فقط بخشی از محتوا رو آپدیت میکنیم، بدون اینکه کل فایل رو عوض کنیم. این کار معمولاً با استفاده از هدرهای خاص HTTP مثل Content-Range انجام میشه که مشخص میکنه کدوم بخش از فایل (مثلاً بایت‌های 0 تا 10) باید تغییر بکنه.

مثلا فرض کنید فایلی با محتوای زیر رو داریم:

Hello, this is a test file.

اگه با PUT درخواستی رو بفرستیم:

PUT /file.txt
Content: onhexgroup.ir

فایل به کل تغییر کرده و محتواش میشه onhexgroup.ir .

اما اگه درخواست Partial PUT بفرستیم:

PUT /file.txt
Content-Range: bytes 7-11/25
Content: onhex

محتوای فایل تبدیل میشه به:

Hello, onhex is a test file.

سناریوهای اکسپلویت:

این آسیب‌ پذیری در دو سناریوی اصلی میتونه مورد اکسپلویت قرار بگیره:

  • نشت اطلاعات یا دستکاری داده‌ها: اگر شرایط زیر همزمان برقرار باشن، مهاجم میتونه به فایلهای حساس امنیتی دسترسی پیدا کنه یا محتوای اونارو تغییر بده:
    • قابلیت نوشتن برای Default Servlet فعال باشه (بصورت پیش‌فرض غیرفعاله).
    • پشتیبانی از Partial PUT فعال باشه (بصورت پیش‌فرض فعاله).
    • URL هدف برای آپلود فایلهای حساس، یک زیر-دایرکتوری از یک URL عمومی برای آپلود باشه.
    • مهاجم نام فایلهای حساس در حال آپلود رو بدونه.
    • فایلهای حساس از طریق Partial PUT آپلود شده باشن.

در این حالت، مهاجم میتونه فایلهای حساس رو ببینه یا محتوای مخرب به اونا تزریق کنه.

  • اجرای کد از راه دور: اگه شرایط زیر همزمان برقرار باشن، مهاجم میتونه کد دلخواه رو روی سرور اجرا کنه:
    • قابلیت نوشتن برای Default Servlet فعال باشه (بصورت پیش‌فرض غیرفعاله).
    • پشتیبانی از Partial PUT فعال باشه (بصورت پیش‌فرض فعاله).
    • برنامه از مکانیزم ذخیره‌سازی Session Persistence مبتنی بر فایل Tomcat استفاده کنه و از مکان ذخیره‌ سازی پیش‌فرض استفاده کنه.
    • برنامه شامل یک کتابخونه آسیب‌ پذیر در برابر حملات Deserialization باشه (مثلاً کتابخانه‌ای که داده‌های کاربر رو بدون اعتبارسنجی به اشیاء جاوا تبدیل میکنه).

در این حالت، مهاجم میتونه با ارسال درخواستهای مخرب، کد دلخواه رو اجرا کنه و کنترل سرور رو بدست بگیره.

نسخه های تحت تاثیر:

11.0.0-M1 <= Apache Tomcat <= 11.0.2
10.1.0-M1 <= Apache Tomcat <= 10.1.34
9.0.0.M1 <= Apache Tomcat <= 9.0.98

نسخه های اصلاح شده:

Apache Tomcat 11.0.3 or later
Apache Tomcat 10.1.35 or later
Apache Tomcat 9.0.99 or later

چطور نسخه فعلی رو چک کنیم؟

  • اگه نام دایرکتوری Tomcat بعد از نصب تغییر نکرده، میتونید نسخه رو از نام دایرکتوری ببینید.
  • به دایرکتوری bin در محل نصب Tomcat برید و دستور version.bat (در ویندوز) یا version.sh (در لینوکس) رو اجرا کنید تا نسخه فعلی رو ببینید.

بررسی نسخه ی apache-tomcat

از کجا فعال بودن PUT رو ببینیم:

  • فایل confweb.xml رو باز کنید.
  • در بخش org.apache.catalina.servlets.DefaultServlet اگه پارامتر readonly روی false باشه، یعنی فعاله.

بررسی فعال بودن put در apache-tomcat

نوشته های مشابه