یک آسیبپذیری از نوع تزریق کد (Code Injection) در کتابخانه npcpy (نسخههای تا 2.1.27) شناسایی شده است که میتواند به مهاجم اجازه دهد تا در طول فرآیند بارگذاری مدلهای Supervised Fine-Tuning (SFT)، کدهای مخرب خود را اجرا کند.
جزئیات فنی آسیبپذیری
این نقص امنیتی در تابع load_sft_model در فایل npcpy/ft/sft.py قرار دارد. زمانی که یک برنامه یا گردش کار (Workflow) از این کتابخانه استفاده میکند، اگر ورودیهای تحت کنترل مهاجم به آرگومان base_model_name_or_path منتقل شوند، منجر به اجرای کد (RCE) در فرآیند میزبان میشود (CWE-94).
نکات کلیدی در مورد این آسیبپذیری عبارتند از:
- شرط اجرا: این آسیبپذیری مستلزم تعامل کاربر (User Interaction) یا پیکربندی نادرست اپلیکیشن است، به طوری که ورودیهای غیرقابل اعتماد مستقیماً به پارامتر مذکور ارسال شوند.
- سطح شدت: اگرچه امتیاز CVSS 4.0 برای این مورد 2.1 (Low) گزارش شده است، اما تأثیر آن بر محرمانگی (Confidentiality)، یکپارچگی (Integrity) و در دسترس بودن (Availability) در صورت موفقیت، بسیار بالا ارزیابی میشود.
- وضعیت اکسپلویت: یک نمونه اثبات مفهوم (PoC) در GitHub منتشر شده است، اما هنوز تأیید نشده که به عنوان یک اکسپلویت فعال و کارآمد عمل کند.
راهکارهای مقابله و کاهش ریسک
از آنجایی که در زمان تحلیل، وصله (Patch) رسمی برای این نسخه مشخص نشده است، اقدامات زیر توصیه میشود:
- اعمال لیست سفید (Allowlist): استفاده از یک لیست سفید سختگیرانه برای شناسهها یا مسیرهای مدلهای مجاز، پیش از رسیدن دادهها به تابع
load_sft_model. - کنترل ورودی: رد کردن هرگونه ورودی که حاوی جداکنندههای غیرمنتظره، پیشوندهای پروتکل (Scheme Prefixes) یا بخشهای مشکوک در مسیر فایل باشد.
- اصل حداقل دسترسی (Least Privilege): اجرای فرآیندهای Fine-tuning در محیطهای ایزوله مانند کانتینرها (Containers) با کمترین سطح دسترسی ممکن برای محدود کردن دامنه آسیب (Blast Radius).
- محدودسازی دسترسی: محدود کردن افرادی که اجازه شروع فرآیند بارگذاری مدلهای SFT را دارند به اپراتورهای مورد اعتماد.