آخرین اخبار
همهٔ اخبار
اکسپلویت‌ها گزارش بحرانیت ۸/۱۰

تحلیل فنی حمله به SmartHire: بهره‌برداری از آسیب‌پذیری Deserialization در MLflow

تحلیل فنی حمله به SmartHire: بهره‌برداری از آسیب‌پذیری Deserialization در MLflow

در این تحلیل، فرآیند نفوذ به یک سیستم مبتنی بر هوش مصنوعی (AI) که برای امتیازدهی به رزومه‌ها طراحی شده است، بررسی می‌شود. این سیستم از پلتفرم MLflow برای مدیریت مدل‌های یادگیری ماشین استفاده می‌کند که منجر به بروز یک آسیب‌پذیری بحرانی در لایه پردازش داده‌ها شده است.

مرحله اول: شناسایی و نفوذ اولیه

در ابتدا با استفاده از nmap، پورت‌های SSH (22) و HTTP (80) شناسایی شدند. با بررسی زیردامنه (Subdomain) سایت، یک نمونه از MLflow پیدا شد که پشت یک لایه احراز هویت ساده (HTTP Basic Auth) قرار داشت. با استفاده از اعتبارنامه‌های پیش‌فرض موجود در مستندات MLflow (مانند admin/password)، دسترسی به پنل مدیریتی به دست آمد.

مرحله دوم: بهره‌برداری از آسیب‌پذیری Deserialization

نسخه مورد استفاده در سیستم، MLflow 2.14.1 بود. بررسی‌ها نشان داد که این نسخه در برابر آسیب‌پذیری Unsafe Deserialization (مرتبط با CVE-2024-37052 تا CVE-2024-37060) آسیب‌پذیر است. این نقص امنیتی زمانی رخ می‌دهد که مدل‌های PyFunc به صورت ناامن بارگذاری شوند.

  • مکانیزم حمله: مهاجم می‌تواند از طریق API مربوط به Artifacts، فایل مدل python_model.pkl را بازنویسی کند.
  • ساخت Payload: با استفاده از متد __reduce__ در کتابخانه pickle پایتون، یک شیء سریال‌شده ساخته شد که در هنگام بازخوانی (Unpickling) توسط سرور، دستورات سیستم‌عاملی (مانند Reverse Shell) را اجرا می‌کند.
  • اجرای کد: با آپلود یک رزومه در سایت اصلی، سیستم برای امتیازدهی اقدام به بارگذاری مدل آلوده کرد و در نتیجه، دسترسی Shell با دسترسی کاربر svcweb حاصل شد.

مرحله سوم: افزایش привиlege (Privilege Escalation)

پس از دسترسی اولیه، بررسی شد که کاربر svcweb اجازه اجرای اسکریپت mlflowctl.py را با دسترسی sudo دارد. تحلیل کد این اسکریپت نشان داد که از متد site.addsitedir برای افزودن مسیرهای پلاگین به Python Path استفاده می‌کند.

از آنجایی که دایرکتوری dev برای کاربر svcweb قابل نوشتن (Writable) بود، از قابلیت Path Configuration Files (.pth) در پایتون استفاده شد. فایل‌های .pth اگر با کلمه import شروع شوند، توسط مفسر پایتون به عنوان کد اجرا می‌گردند. با قرار دادن یک فایل .pth مخرب در این مسیر، کد مورد نظر با دسترسی root اجرا شد و دسترسی کامل به سرور به دست آمد.