خانه » CVE-2025-47273

CVE-2025-47273

setuptools has a path traversal vulnerability in PackageIndex.download that leads to Arbitrary File Write

توسط Vulnerbyte Alerts
88 بازدید
هشدار سایبری CVE-2025-47273

چکیده

یک آسیب‌پذیری از نوع پیمایش مسیر (Path Traversal) در کتابخانه setuptools پایتون در متد PackageIndex.download شناسایی شده است. این ضعف به مهاجم اجازه می‌دهد با استفاده از URLهای دستکاری‌شده، فایل‌هایی را در مسیرهای دلخواه سیستم فایل بنویسد. در صورتی که این کد در محیطی اجرا شود که دسترسی نوشتن در مسیرهای حساس داشته باشد، مهاجم می‌تواند با نوشتن فایل‌های مخرب، شرایط لازم برای اجرای کد از راه دور (RCE) را فراهم کند.

توضیحات

آسیب‌پذیری CVE-2025-47273 در کتابخانه setuptools ناشی از محدودسازی نادرست مسیر فایل‌ به یک دایرکتوری محدود (Path Traversal) مطابق با CWE-22 است. کتابخانه‌ی setuptools یکی از کامپوننت‌های پایه و حیاتی سامانه‌ی مدیریت بسته در اکوسیستم پایتون (Python) محسوب می‌شود و عملیات مربوط به دانلود، ساخت، نصب، ارتقا و حذف بسته‌ها را بر عهده دارد. این کامپوننت به‌طور گسترده و پیش‌فرض توسط ابزارهایی مانند pip مورد استفاده قرار می‌گیرد و آسیب‌پذیری در آن می‌تواند تأثیر فراگیری بر پروژه‌های پایتونی فعال در محیط‌های مختلف داشته باشد.

این ضعف در تابع _download_url موجود در ماژول package_index از کلاس PackageIndex رخ می‌دهد؛ جایی که نام فایل دانلودی از URL استخراج شده و سپس با استفاده از تابع استاندارد os.path.join به مسیر موقت دانلود اضافه می‌شود. تابع os.path.join در زبان پایتون برای اتصال مسیرهای فایل (path concatenation) طراحی شده است، اما در صورتی‌که آرگومان دوم با اسلش ابتدایی (/) یا حرف درایو در ویندوز (C: و مشابه آن) آغاز شود، مسیر قبلی را نادیده می‌گیرد و یک مسیر مطلق (absolute path) ایجاد می‌کند. این عملکرد باعث می‌شود که پاک‌سازی ناکافی مسیر، مهاجم را قادر سازد تا از مسیرهای مطلق یا کاراکترهای کدگذاری‌شده در URL برای دور زدن محدودیت‌ها استفاده کند.

در پیاده‌سازی آسیب‌پذیری، متغیر name از URL استخراج می‌شود و تنها جایگزینی محدودی روی آن انجام می‌گیرد (به‌طور مثال جایگزینی رشته‌های “..” با “.”). با این حال این اقدام برای حذف کامل المنت‌های پیمایش مسیر کافی نیست و مهاجم می‌تواند مسیر مقصد فایل را به‌صورت دلخواه کنترل کند. در نتیجه، فایل دانلودشده می‌تواند خارج از دایرکتوری موقت تعریف‌شده ذخیره گردد و در هر مسیر دلخواه سیستم فایل قرار گیرد. این موضوع منجر به نوشتن فایل دلخواه (Arbitrary File Write) با سطح دسترسی پردازه ای می‌شود که کد پایتون را اجرا می‌کند. چنانچه این پردازه با دسترسی بالاتر (مانند کاربر سیستمی یا root) اجرا شود، امکان ایجاد یا بازنویسی فایل‌های حساس سیستم از جمله کلیدهای احراز هویت، اسکریپت‌های اجرایی یا فایل‌های پیکربندی حیاتی وجود دارد.

مهاجم می‌تواند تنها با قرار دادن URLهای مخرب در صفحات یک مخزن بسته (Package Index، سامانه‌ای برای میزبانی و توزیع بسته‌های نرم‌افزاری مانند PyPI) فرآیند دانلود را فریب داده و فایل مخرب را در مسیرهای دلخواه سیستم ذخیره کند.

این ضعف  قابل خودکارسازی است؛ مهاجم می‌تواند با اسکریپت‌ها یا ابزارهای خودکار، URLهایی ایجاد کند که مسیر فایل در آن‌ها به‌گونه‌ای طراحی شده باشد که محدودیت دایرکتوری موقت را دور بزند. در کد اثبات مفهومی (PoC) منتشرشده، یک اسکریپت پایتون فایل مخربی را از یک سرور HTTP لوکال دانلود می‌کند و با استفاده از مسیر کدگذاری‌شده مانند http://localhost:8000/%2Fhome%2Fuser%2F.ssh%2Fauthorized_keys

محتوای فایل مستقیماً در مسیر حساس /home/user/.ssh/authorized_keys نوشته می‌شود. در سیستم‌های مبتنی بر Linux، این فایل برای احراز هویت از طریق SSH (Secure Shell) استفاده می‌شود و بازنویسی آن می‌تواند به مهاجم امکان دسترسی غیرمجاز از راه دور به سامانه را بدهد. چنین بهره‌برداری نه‌تنها نقض یکپارچگی داده‌هاست، بلکه می‌تواند در سناریوهای خاص، زمینه را برای اجرای کد از راه دور (RCE) نیز فراهم کند؛ به‌عنوان مثال زمانی که فایل نوشته‌شده یک اسکریپت اجرایی یا پیکربندی حساس باشد که توسط پردازه های سیستمی خوانده می‌شود.

پیامد اصلی این آسیب‌پذیری، نقض یکپارچگی (Integrity) سیستم فایل است. مهاجم می‌تواند فایل‌های موجود را تغییر داده یا فایل‌های جدید با محتوای دلخواه ایجاد کند، در نتیجه کنترل بخشی از عملکرد نرم‌افزار یا سیستم عامل را به‌دست آورد. البته دامنه‌ی سوءاستفاده در عمل محدودتر است، چراکه ماژول‌های easy_install و package_index در نسخه‌های جدید setuptools منسوخ (Deprecated) شده‌اند و در فرآیندهای مدرن نصب بسته‌ها کمتر مورد استفاده قرار می‌گیرند. این آسیب‌پذیری در نسخه 78.1.1 از setuptools با اصلاح نحوه پردازش مسیر فایل و جلوگیری از استفاده از مسیرهای غیرمجاز پچ شده است.

CVSS

Score Severity Version Vector String
7.7 HIGH 4.0 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:P

لیست محصولات آسیب پذیر

Versions Product
affected at < 78.1.1 setuptools

لیست محصولات بروز شده

Versions Product
>=78.1.1 setuptools

استفاده محصول در ایران

در این جدول، تعداد صفحات ایندکس‌شده در گوگل با دامنه .ir که setuptools را ذکر کرده اند، ثبت شده است. این داده صرفاً برای برآورد تقریبی حضور محصولات در وب ایران استفاده شده و نمایانگر میزان نصب دقیق و استفاده واقعی نیست.

Approx. Usage in .ir Domain via Google (Total Pages) Search Query (Dork) Product
9.000 site:.ir “setuptools” setuptools

نتیجه گیری

این آسیب‌پذیری با شدت بالا در کتابخانه setuptools با سوءاستفاده از تکنیک پیمایش مسیر (Path Traversal) امکان نوشتن فایل در مسیرهای دلخواه سیستم را فراهم می‌کند و در سناریوهای خاص می‌تواند منجر به اجرای کد از راه دور یا دسترسی غیرمجاز به سیستم شود. با توجه به انتشار PoC، اجرای اقدامات زیر برای کاهش ریسک این آسیب‌پذیری و جلوگیری از سوءاستفاده احتمالی ضروری است:

  • به‌روزرسانی فوری نرم‌افزار: تمامی محیط‌هایی که از setuptools استفاده می‌کنند باید فوراً به نسخه 1.1 یا نسخه‌های جدیدتر ارتقا داده شوند. این اقدام مؤثرترین و قطعی‌ترین راهکار برای رفع آسیب‌پذیری است و باید در اولویت قرار گیرد. سایر اقدامات نقش مکمل را دارند و می‌توانند به کاهش ریسک این آسیب پذیری و مقابله با حملات مشابه کمک کنند.
  • محدودسازی دسترسی فایل سیستم: اجرای پردازه های پایتون با حداقل سطح دسترسی باعث می‌شود حتی در صورت سوءاستفاده از آسیب‌پذیری، مهاجم قادر به نوشتن فایل در مسیرهای حساس سیستم نباشد.
  • ایزوله‌سازی محیط اجرا: اجرای سرویس‌ها در محیط‌های ایزوله مانند کانتینرهای Docker می‌تواند دامنه اثرگذاری نوشتن فایل در مسیرهای حساس را کاهش دهد.
  • استفاده از مکانیزم‌های امنیتی در سطح سیستم: استفاده از مکانیزم‌هایی مانند SELinux یا AppArmor برای محدودسازی دسترسی فرآیندها به مسیرهای سیستم فایل می‌تواند از ایجاد یا تغییر فایل‌های حساس جلوگیری کند.
  • مانیتورینگ و ثبت لاگ: فعال‌سازی ثبت لاگ برای عملیات دانلود بسته‌ها و بررسی تغییرات غیرمنتظره در مسیرهای حساس سیستم فایل می‌تواند به شناسایی سریع فعالیت‌های مخرب کمک کند.
  • بررسی و اعتبارسنجی منابع بسته‌ها: استفاده از مخازن بسته معتبر و بررسی URLهای دانلود در مخازن خصوصی یا داخلی می‌تواند احتمال تزریق لینک‌های مخرب در صفحات Package Index را کاهش دهد.
  • انجام تست‌های امنیتی: استفاده از ابزارهای تحلیل امنیتی مانند OWASP Dependency‑Check یا Snyk برای شناسایی آسیب‌پذیری‌های موجود در وابستگی‌های نرم‌افزاری می‌تواند به کاهش ریسک زنجیره تأمین نرم‌افزار کمک کند.

اجرای این اقدامات، به‌ویژه به‌روزرسانی فوری setuptools و اعمال محدودیت‌های مناسب در سطح سیستم فایل، می‌تواند احتمال سوءاستفاده از این آسیب‌پذیری را به‌طور قابل توجهی کاهش دهد و امنیت محیط‌های توسعه و استقرار نرم‌افزار را افزایش دهد.

امکان استفاده در تاکتیک‌های Mitre Attack (در زمان اجرای حمله)

Initial Access (TA0001)
مهاجم از طریق ارسال درخواست به سرویس یا برنامه‌ای که از کتابخانه Setuptools آسیب‌پذیر استفاده می‌کند، دسترسی اولیه را کسب می‌کند. این دسترسی ممکن است از طریق اینترنت یا شبکه داخلی صورت گیرد .

Execution (TA0002)
در صورت موفقیت در نوشتن فایل در مسیر اجرایی (مانند دایرکتوری کرون‌جاب یا اسکریپت‌های startup)، مهاجم می‌تواند در تعامل بعدی، کد مخرب خود را اجرا کند. همچنین در صورت بازنویسی فایل‌های کتابخانه‌ای، می‌تواند در زمان بارگذاری آن‌ها، کد دلخواه اجرا نماید.

Persistence (TA0003)
با نوشتن یک اسکریپت در مسیرهای راه‌اندازی خودکار سیستم (مانند cron، systemd، Startup)، مهاجم می‌تواند دسترسی پایدار خود را حتی پس از راه‌اندازی مجدد سیستم حفظ کند.

Privilege Escalation (TA0004)
اگر پردازه پایتون با دسترسی‌های محدود اجرا شود، مهاجم می‌تواند با نوشتن فایل در مسیرهای مورد استفاده توسط پردازه های با دسترسی بالاتر (مثلاً فایل‌های پیکربندی سرویس‌های ریشه)، منتظر اجرای آن سرویس‌ها بماند و سطح دسترسی خود را افزایش دهد.

Impact (TA0040)
بهره‌برداری موفق از این آسیب‌پذیری منجر به نقض یکپارچگی (Integrity) سیستم از طریق تغییر فایل‌های مهم می‌شود. در صورت نوشتن فایل در مکان‌های حساس، می‌تواند منجر به نابودی کامل محرمانگی (Confidentiality) داده‌ها (با انتقال آن‌ها) یا در دسترس نبودن (Availability) سرویس (با خراب کردن فایل‌های اجرایی) نیز گردد.

منابع

  1. https://www.cve.org/CVERecord?id=CVE-2025-47273
  2. https://www.cvedetails.com/cve/CVE-2025-47273/
  3. https://github.com/pypa/setuptools/security/advisories/GHSA-5rjg-fvgr-3xxf
  4. https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-47273
  5. https://vuldb.com/?id.309476
  6. https://github.com/pypa/setuptools/issues/4946
  7. https://github.com/pypa/setuptools/commit/250a6d17978f9f6ac3ac887091f2d32886fbbb0b
  8. https://github.com/pypa/setuptools/blob/6ead555c5fb29bc57fe6105b1bffc163f56fd558/setuptools/package_index.py#L810C1-L825C88
  9. https://lists.debian.org/debian-lts-announce/2025/05/msg00035.html
  10. https://nvd.nist.gov/vuln/detail/CVE-2025-47273
  11. https://cwe.mitre.org/data/definitions/22.html

همچنین ممکن است دوست داشته باشید

پیام بگذارید