- شناسه CVE-2025-47273 :CVE
- CWE-22 :CWE
- yes :Advisory
- منتشر شده: می 17, 2025
- به روز شده: می 17, 2025
- امتیاز: 7.7
- نوع حمله: Path Traversal
- اثر گذاری: Arbitrary File write
- حوزه: برنامه نویسی
- برند: pypa
- محصول: setuptools
- وضعیتPublished :CVE
- Yes :POC
- وضعیت آسیب پذیری: patch شده
چکیده
یک آسیبپذیری از نوع پیمایش مسیر (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) سرویس (با خراب کردن فایلهای اجرایی) نیز گردد.
منابع
- https://www.cve.org/CVERecord?id=CVE-2025-47273
- https://www.cvedetails.com/cve/CVE-2025-47273/
- https://github.com/pypa/setuptools/security/advisories/GHSA-5rjg-fvgr-3xxf
- https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-47273
- https://vuldb.com/?id.309476
- https://github.com/pypa/setuptools/issues/4946
- https://github.com/pypa/setuptools/commit/250a6d17978f9f6ac3ac887091f2d32886fbbb0b
- https://github.com/pypa/setuptools/blob/6ead555c5fb29bc57fe6105b1bffc163f56fd558/setuptools/package_index.py#L810C1-L825C88
- https://lists.debian.org/debian-lts-announce/2025/05/msg00035.html
- https://nvd.nist.gov/vuln/detail/CVE-2025-47273
- https://cwe.mitre.org/data/definitions/22.html
گزارش اثبات آسیبپذیری CVE-2025-47273
اطلاعات آسیبپذیری
عنوان: آسیبپذیریPath Traversal در کامپوننت PackageIndex کتابخانه Setuptools پایتون منجر به نوشتن دلخواه فایل در سیستم
شناسه: CVE-2025-47273
وضعیت مشاوره: Advisory / Patch Available
نمره CVSS تقریبی: CVSS v3.1: 8.8 (High)
محصول / نسخههای آسیبپذیر: Python Setuptools
- در نسخههای زیر (پیش از اعمال وصله امنیتی):
- تمامی نسخههای setuptools قبل از 1.1
- محیطهای درگیر:
- تمامی برنامهها و سرویسهای پایتونی که از setuptools برای دانلود، ساخت، نصب، ارتقاء یا حذف بستههای پایتون استفاده میکنند.
- سیستمهای مدیریت بسته و مخازن خصوصی پایتون که فرآیند دریافت بستهها را خودکارسازی کردهاند.
- محیطهای توسعه نرمافزار و یکپارچهسازی مداوم (CI/CD) که در آنها بستهها از ایندکسهای آسیبپذیر دریافت میشوند.
- محصولات تجاری که از نسخههای آسیبپذیر setuptools به عنوان وابستگی (Dependency) استفاده میکنند؛ از جمله IBM watsonx Orchestrate (نسخههای 4.0 تا 1.12.0)، IBM Fusion (نسخههای 2.5.0 تا 2.10.0)، IBM AIX و VIOS .
- پلتفرمهای ابری و کانتینری که فرآیند ساخت ایمیج در آنها به طور خودکار بستهها را نصب میکنند.
- سرورهای لینوکسی توزیعشده با مدیریت بسته مبتنی بر پایتون.
کامپوننتهای آسیبپذیر:
- ماژول PackageIndex در کتابخانه setuptools که مسئول تعامل با ایندکس بستههای پایتون (مانند PyPI) است.
- متد _download_url که وظیفه دانلود فایلها از URLهای مشخصشده را بر عهده دارد.
- فرآیند تولید نام فایل مقصد برای ذخیرهسازی، که از بخشهایی از URL ورودی استخراج میشود.
- تابع path.join در زمان ساخت مسیر نهایی فایل، که بدون اعتبارسنجی کافی، نام فایل کنترلشده توسط مهاجم را با مسیر موقت ترکیب میکند .
ریشه مشکل (Root Cause Analysis)
آسیبپذیری CVE-2025-47273 از یک نقص در اعتبارسنجی ورودی و پالایش ناکافی نام فایل در ماژول PackageIndex کتابخانه setuptools نشأت میگیرد. در متد _download_url، نام فایل نهایی برای ذخیرهسازی بر اساس محتوای URL مقصد و با استفاده از تابع egg_info_for_url تعیین میشود. اگرچه تلاش ابتدایی برای پالایش این نام با حذف رشتههای “..” انجام میشود، اما این رویکرد در برابر حملات Path Traversal کارآمد نیست و میتوان با استفاده از تکنیکهای مختلف آن را دور زد. برای مثال، استفاده از کاراکتر شروعکننده مسیر مانند “/” (در سیستمعاملهای شبهیونیکس) یا “C:” (در ویندوز) در ابتدای نام فایل، هنگام الحاق به مسیر موقت توسط تابع os.path.join(tmpdir, name)، منجر به نادیده گرفته شدن کامل tmpdir و نوشتن فایل در مسیر مطلق مشخصشده توسط مهاجم میشود .
این مشکل در هسته خود، یک ضعف در جداسازی داده از دستور (Code/Data Separation) محسوب میشود. ورودیای که از یک منبع خارجی (URL) دریافت میشود، مستقیماً و بدون طی فرآیندهای سختگیرانهتر اعتبارسنجی، به عنوان بخشی از دستور (مسیر فایل) تفسیر میگردد. مهاجم با کنترل URL میتواند به شکلی مؤثر به سیستم فایل میزبان دسترسی یافته و فایلهایی را در مسیرهای دلخواه ایجاد یا بازنویسی کند. این نقص به دلیل استفاده از عملکرد ناامن os.path.join که به خوبی با ورودیهای کنترلشده توسط کاربر آزمایش نشده، بوجود آمده است.
بخش آسیبپذیر
رفتار ناامن سیستم:
- سیستم نام فایل را از URL ورودی استخراج کرده و تنها با یک جایگزینی ساده (“..” به “.”) آن را پالایش میکند که به راحتی قابل دور زدن است.
- سپس از تابع path.join برای ترکیب این نام پالایشنشده با یک دایرکتوری موقت استفاده میکند. اگر رشته نام فایل با یک کاراکتر جداکننده مسیر (مانند /) شروع شود، os.path.join مسیر قبلی را نادیده گرفته و نام را به عنوان یک مسیر مطلق در نظر میگیرد.
- هیچ بررسیای برای اطمینان از قرارگیری مسیر نهایی در داخل دایرکتوری موقت (Sandbox) انجام نمیشود.
نحوه سوءاستفاده مهاجم:
- مهاجم یک مخزن (Repository) یا ایندکس بسته مخرب را راهاندازی میکند که شامل بسته فایل هایی با URLهای دستکاریشده است.
- قربانی (برنامه یا توسعهدهنده) با استفاده از نسخه آسیبپذیر setuptools اقدام به دریافت بسته از این منبع میکند.
- setuptools در حین دانلود، نام فایل را از URL مخرب استخراج کرده و بدون پالایش کافی، آن را به path.join ارسال میکند.
- در نتیجه، فایل دانلودی در مسیری خارج از دایرکتوری موقت و در محلی دلخواه توسط مهاجم (مانند /etc/cron.d/ یا C:\Windows\System32\) با سطح دسترسی پردازه پایتون ذخیره میشود.
نقش این آسیبپذیری در زنجیره حمله:
- این آسیبپذیری میتواند به عنوان گام نخست برای استقرار (Deployment) در زنجیره حمله به کار گرفته شود. مهاجم با نوشتن یک فایل در مسیری بحرانی، میتواند گامهای بعدی حمله را برنامهریزی کند.
- بسته به محتوای فایل نوشتهشده و محل ذخیرهسازی آن، این آسیبپذیری میتواند مستقیماً به اجرای کد از راه دور (Remote Code Execution) منجر شود. برای مثال، نوشتن یک کرونجاب (Cron Job) مخرب یا جایگزینی یک فایل کتابخانهای سیستمی .
- در سناریوهای زنجیره تأمین نرمافزار، مهاجم میتواند از این طریق کد مخرب خود را در فرآیند ساخت (Build) یا استقرار (Deployment) محصول نهایی تزریق کند.
پیشنیازهای بهرهبرداری (Prerequisites)
- استفاده از نسخه آسیبپذیر کتابخانه setuptools (پیش از 1.1) در هر برنامه یا پروسسی که با ایندکس بستهها تعامل دارد.
- وادار کردن فرآیند قربانی به دریافت یک بسته از یک سرور تحت کنترل مهاجم. این امر میتواند از طریق تبانی با مهاجم داخلی، یا تغییر تنظیمات مخازن (مانند pip install –index-url) توسط مهاجم (در صورت دسترسی) صورت گیرد.
- در سناریوهای مخازن عمومی مانند PyPI، مهاجم میتواند یک بسته بهظاهر بیضرر اما حاوی لینکهای مخرب در صفحه فراداده (Metadata) آن منتشر کند که توسط setuptools در زمان واکشی وابستگیها دنبال شود.
- سطح دسترسی پردازه پایتون برای نوشتن در مسیر هدف. هرچه دسترسی فرآیند بالاتر باشد (مثلاً با دسترسی ریشه اجرا شود)، خسارت بالقوه بیشتر است.
رفتار مورد انتظار در حالت امن (Expected Secure Behavior)
- پالایش دقیق و چندلایه نام فایل استخراجشده از URL. صرفاً حذف “..” کافی نیست و باید کاراکترهای جداکننده مسیر (مانند / و \) نیز خنثی یا حذف شوند.
- پس از ساخت مسیر نهایی، ضروری است که به صورت برنامهنویسی بررسی شود که مسیر ساختهشده همچنان درون دایرکتوری پایه (مثلاً دایرکتوری موقت) قرار دارد.
- استفاده از توابع ایمنتر برای مدیریت مسیر که به طور خودکار از خروج از محدوده مجاز جلوگیری کنند، یا پیادهسازی یک سندباکس (Sandbox) مؤثر.
- در صورت تشخیص هرگونه تلاش برای Path Traversal، پردازه باید متوقف شده و خطا ثبت گردد (Fail-Closed).
راهکارها و کاهش ریسک (Mitigation / Patch Guidance)
اقدامات فوری برای کاهش ریسک:
- بهروزرسانی فوری کتابخانه setuptools به نسخه 1.1 یا بالاتر. این وصله با اصلاح مکانیزم استخراج نام فایل و اعتبارسنجی دقیقتر مسیر، مشکل را برطرف میکند .
- شناسایی تمامی برنامهها و سرویسهایی که از setuptools استفاده میکنند و اطمینان از بهروزرسانی آنها. این شامل بررسی وابستگیهای پروژه و ایمیجهای کانتینری میشود.
- تا زمان اعمال وصله، از نصب بستهها از مخازن غیرمعتبر یا ناشناخته خودداری کرده و از مخازن خصوصی و مطمئن داخلی استفاده شود.
اقدامات کوتاهمدت / میانمدت برای کاهش ریسک:
- محدود کردن دسترسیهای پردازه های پایتون به سیستم فایل. اجرای پردازه ها با حداقل سطح دسترسی ممکن (Principle of Least Privilege) میتواند از نوشتن فایل در مسیرهای حیاتی جلوگیری کند .
- پیادهسازی قوانین سختگیرانه در سطح سیستمعامل یا کانتینر برای جلوگیری از نوشتن در دایرکتوریهای حساس توسط پردازه های پایتون.
- فعالسازی و پایش دقیق رویدادهای مربوط به نوشتن فایل در مسیرهای غیرمعمول توسط پردازه های پایتون.
اقدامات بلندمدت برای کاهش ریسک:
- بازبینی و بهروزرسانی خطمشیهای امنیتی در چرخه توسعه نرمافزار (SDLC) برای گنجاندن بررسی امنیتی وابستگیها (Dependency Scanning).
- استفاده از ابزارهای تحلیل ترکیب نرمافزار (SCA) برای شناسایی خودکار و هشدار نسبت به وجود وابستگیهای آسیبپذیر در پروژهها.
- آموزش تیمهای توسعه در مورد خطرات امنیتی ناشی از پردازش ناایمن ورودیها و حملات Path Traversal.
تشخیص و مانیتورینگ (Detection & Monitoring)
نشانههای تلاش برای سوءاستفاده:
- ایجاد یا تغییر فایلهای غیرمنتظره در مسیرهای حساس سیستم مانند /etc/، /usr/bin/، /var/spool/cron/ یا پوشههای راهاندازی ویندوز.
- ثبت خطاها یا هشدارهایی در لاگهای برنامه یا سیستم که به تلاش برای نوشتن در مسیرهای غیرمجاز اشاره دارند (مثلاً خطاهای مجوز).
- مشاهده درخواستهای شبکه خروجی از سرور به سمت دامنهها یا آدرسهای IP ناشناخته و مشکوک که میتواند نشاندهنده تلاش برای دریافت بسته از مخازن مخرب باشد .
منابع پیشنهادی برای مانیتورینگ و پایش:
- راهکارهای یکپارچگی فایل (File Integrity Monitoring – FIM) برای پایش تغییرات در دایرکتوریهای حساس سیستم.
- سیستمهای تشخیص نفوذ مبتنی بر میزبان (HIDS) که میتوانند رفتارهای غیرعادی فرآیندها را شناسایی کنند.
- لاگهای فایروال و پروکسی برای ردیابی ارتباطات خروجی به مخازن ناشناخته.
- پایش فراداده بستههای دریافتی برای شناسایی URLهای حاوی الگوهای Path Traversal.
واکنش به حادثه (Incident Response)
- ایزولهسازی سیستم درگیر برای جلوگیری از گسترش آلودگی یا تغییرات بیشتر در فایلسیستم.
- جمعآوری و تحلیل لاگهای سیستم برای شناسایی دقیق زمان وقوع و دامنه نفوذ.
- بررسی و شناسایی تمام فایلهایی که به طور غیرمجاز ایجاد یا تغییر یافتهاند. این فایلها باید برای تحلیل بیشتر ایزوله و سپس پاکسازی شوند.
- ارزیابی میزان خسارت: آیا دسترسی غیرمجاز به دادهها رخ داده است؟ آیا کد مخربی اجرا شده است؟
- اعمال وصله امنیتی و بهروزرسانی setuptools در تمام سیستمهای آسیبپذیر.
- مستندسازی کامل رخداد و بهروزرسانی رویههای امنیتی برای پیشگیری از حوادث مشابه در آینده.
جریان حمله (Attack Flow)
در سناریوی بهرهبرداری از این آسیبپذیری، مهاجم با راهاندازی یک مخزن مخرب، بستهای را منتشر میکند که حاوی لینکهای دانلودی با مسیرهای دستکاریشده است. هنگامی که یک سیستم قربانی با استفاده از نسخه آسیبپذیر setuptools اقدام به دریافت وابستگیهای خود از این مخزن (یا مخزنی که به آن هدایت شده) میکند، فرآیند دانلود آغاز میشود. متد _download_url نام فایل را از URL مخرب استخراج کرده و پس از پالایش ناقص، آن را به os.path.join میسپارد. از آنجا که نام فایل با یک کاراکتر جداکننده مسیر (مانند /) شروع میشود، os.path.join آن را به عنوان یک مسیر مطلق تلقی کرده و فایل نهایی مستقیماً در محل تعیینشده توسط مهاجم (برای مثال /etc/cron.d/malicious) ذخیره میگردد. این امر میتواند زمینهساز اجرای کد مخرب در مراحل بعدی باشد شکل ۱.

شکل 1: نمودار جریان حمله
اثبات مفهوم (PoC) — کاملاً غیرمخرب
آزمایشگاه تخصصی Vulnerbyte این آسیبپذیری را در محیط ایزوله بررسی کرده است شکل ۲. اثبات مفهوم این آسیبپذیری شامل موارد زیر است:
- این گزارش صرفاً جنبه توصیفی و آموزشی دارد و به منظور درک مکانیزم آسیبپذیری و روشهای مقابله با آن تهیه شده است.
- هیچ کد اجرایی یا بهرهبرداری عملی (Exploit) در این گزارش ارائه نمیشود.
- منطق آسیبپذیری به این صورت قابل شبیهسازی است که با فراخوانی متد _download_url با یک URL مانند http://attacker.com/../../../../etc/passwd یا /etc/cron.d/malicious_job، مشاهده میشود که کتابخانه setuptools نسخه آسیبپذیر تلاش میکند فایل را در مسیر /etc/passwd یا /etc/cron.d/malicious_job بنویسد. این آزمایش صرفاً برای تأیید وجود مشکل و با هدف آگاهیبخشی و در محیطی کاملاً کنترلشده و ایزوله انجام شده است.

شکل 2: اثبات اجرای آسیب پذیری
رفع مسئولیت
این گزارش صرفاً با هدف آموزش، تحلیل فنی و ارتقای امنیت سازمانی تهیه شده است. هرگونه استفاده مخرب یا خارج از چارچوبهای قانونی از محتوای آن ممنوع است. مسئولیت هرگونه اقدام بر اساس اطلاعات ارائهشده بر عهده بهرهبردار میباشد.
منابع (References)
- https://nvd.nist.gov/vuln/detail/CVE-2025-47273
- https://docs.spectrocloud.com/security-bulletins/reports/vc-cve-2025-47273/
- https://avd.aquasec.com/nvd/2025/cve-2025-47273/
- https://github.com/advisories/GHSA-5rjg-fvgr-3xxf
- https://www.ibm.com/support/pages/node/7248744
Python setuptools
CVE-2025-47273 – Path Traversal in PackageIndex Leading to Arbitrary File Write
Affects
- Python setuptools
- Versions prior to 78.1.1
- Systems where:
- The vulnerable
setuptoolspackage is installed - An attacker can influence a Python process to download a malicious package
- The Python process has filesystem write permissions
- The application uses the
PackageIndexAPI to fetch and install packages
- The vulnerable
Description
CVE-2025-47273 is a High severity path traversal vulnerability in Python setuptools caused by insufficient sanitization of file paths in the PackageIndex._download_url method .
Setuptools is a package that facilitates downloading, building, installing, upgrading, and uninstalling Python packages . The vulnerability resides in the PackageIndex component, specifically in how it handles file paths when downloading packages . An attacker can craft a malicious package with a specially designed filename containing path traversal sequences (e.g., ../../../). When a vulnerable Python application uses PackageIndex to download this package, the insufficient path sanitization allows the attacker to write files to arbitrary locations on the filesystem with the permissions of the running Python process .
This path traversal vulnerability is:
- Triggered remotely through the package download mechanism
- Achievable with low privileges requiring only the ability to influence a package download
- Context-dependent in its ultimate impact
- Capable of bypassing filesystem access controls
- Exploitable without user interaction in automated package management scenarios
Because the vulnerable code fails to validate and sanitize file paths extracted from package metadata, an attacker can write files outside the intended download directory. Successful exploitation may result in arbitrary file write, which can lead to remote code execution depending on the context of the Python application .
Attack Vector
Primary Attack Vector:
Network-based – An attacker hosts a malicious Python package on a reachable server (e.g., a custom PyPI repository or a compromised mirror) and tricks a vulnerable application or user into downloading it via the PackageIndex API.
Attack Scenario:
- Attacker crafts a malicious Python package with a filename containing path traversal sequences (e.g.,
../../../../etc/cron.d/malicious) - Attacker hosts the package on a server they control or compromises a trusted package repository
- Victim’s application, using a vulnerable version of setuptools (prior to 78.1.1), attempts to download and install a package from the attacker-controlled source via
PackageIndex - The
PackageIndex._download_urlmethod processes the malicious filename without adequate sanitization - The package contents are written to the attacker-specified filesystem location (e.g., a system directory or sensitive configuration path)
- Depending on the written file’s location and content, the attacker may achieve persistence, privilege escalation, or remote code execution
Key Characteristics:
- Remotely exploitable over the network
- Requires the attacker to control a package source
- Low complexity to execute
- No user interaction required in automated scenarios
- Leverages a trusted development tool against itself
Conditions Increasing Risk:
- Applications that automatically download and install Python packages from untrusted sources
- Systems where Python processes run with elevated privileges (root/administrator)
- Environments using custom or unverified PyPI mirrors
- CI/CD pipelines that fetch dependencies without integrity verification
- Container build processes that use vulnerable setuptools versions
Impact
An attacker successfully exploiting CVE-2025-47273 may be able to:
- Write arbitrary files to any location on the filesystem accessible by the Python process
- Achieve remote code execution if the written file is executed by the system (e.g., cron jobs, startup scripts, library hijacking)
- Compromise system integrity by overwriting critical configuration files
- Cause denial of service by corrupting essential system files
- Escalate privileges if the Python process runs with elevated privileges
- Establish persistence by writing to system startup directories or cron jobs
Because Python setuptools is a foundational tool in the Python ecosystem, the blast radius may include any system or application that uses Python and relies on setuptools for package management, including development environments, production servers, CI/CD pipelines, and containerized applications .
Observed Exploitation & Threat Activity
- At the time of disclosure, there are publicly available proof-of-concept exploits on GitHub, but no confirmed reports of active exploitation in the wild .
- The vulnerability is considered High risk due to:
- The availability of PoC code lowering the barrier to exploitation
- The widespread use of setuptools in Python environments
- The potential for arbitrary file write to lead directly to RCE
- The low complexity of the attack
- Similar path traversal vulnerabilities in package managers have historically been exploited rapidly once discovered, as they provide a reliable method for system compromise.
Severity & Metrics
- CVSS v3.1: High (8.8)
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: Low
- User Interaction: None
- Impact:
- Confidentiality: High
- Integrity: High
- Availability: High
- Scope: Unchanged
Relevant CWE:
- CWE-22 – Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’)
- CWE-20 – Improper Input Validation
- CWE-59 – Improper Link Resolution Before File Access (‘Link Following’)
Patch & Vendor Status
- The issue is fixed in Python setuptools version 78.1.1 .
- The fix [description of fix]:
- Implements proper sanitization of file paths in the
PackageIndex._download_urlmethod - Validates and restricts file paths to the intended download directory
- Rejects path traversal sequences in package filenames
- Adds additional security checks during package download operations
- Implements proper sanitization of file paths in the
All users are strongly advised to upgrade immediately to setuptools version 78.1.1 or later.
Mitigation & Remediation
Immediate Actions
- Upgrade setuptools to version [78.1.1] or later.
- Update Python installations to versions that include the patched setuptools (Python 3.9.24+, 3.10.19+, 3.11.14+, 3.12.12+)
- Audit all systems for vulnerable setuptools versions (prior to 78.1.1)
- Review and restrict file write permissions for Python processes
- Validate the integrity of packages from third-party repositories before installation
Temporary Compensating Controls (If Upgrade Is Delayed)
- Restrict network access to only trusted package repositories
- Implement filesystem controls to prevent Python processes from writing to sensitive directories
- Use application whitelisting to block unauthorized file writes
- Monitor for suspicious file write operations originating from Python processes
- Employ runtime security tools that detect path traversal attempts
These mitigations reduce exposure but do not eliminate the vulnerability without upgrading.
Defense-in-Depth Measures
- Implement package signing and verification for all Python dependencies
- Use private, curated package repositories instead of public PyPI for production systems
- Run Python applications with the principle of least privilege
- Regularly update all Python packages and dependencies
- Employ sandboxing or containerization to isolate Python applications
Detection & Hunting
Indicators of Potential Abuse:
- Unexpected file writes to system directories (e.g.,
/etc/,/usr/bin/,C:\Windows\) by Python processes - Python processes attempting to write files with path traversal patterns in their names
- Network connections to suspicious or untrusted package repositories
- Unauthorized modifications to cron jobs, startup scripts, or system configuration files
- Creation of unexpected files in temporary directories that later appear in system locations
- Anomalous Python process behavior during package installation routines
Recommended Monitoring:
- Monitor filesystem events for writes outside expected application directories
- Audit Python process execution and file access patterns
- Track network connections to external package repositories
- Monitor for known exploitation patterns and PoC signatures
- Implement integrity monitoring for critical system files
- Review logs for Python package installation activities from untrusted sources
Post-Incident Response
If exploitation is suspected:
- Immediately isolate affected systems from the network
- Conduct a forensic analysis to identify the scope of compromise
- Identify and remove any malicious files written by the attacker
- Review and restore any modified system configurations from known good backups
- Analyze Python process logs to determine the source of the malicious package
- Rotate all credentials that may have been exposed on the compromised system
- Apply the official patch (upgrade to setuptools 78.1.1) before returning the system to production
Summary Table
| Category | Details |
|---|---|
| Vulnerability | Path Traversal leading to Arbitrary File Write |
| Component | PackageIndex._download_url method in setuptools |
| Attack Vector | Network – Malicious package download via PackageIndex |
| Impact | Arbitrary file write, potential Remote Code Execution |
| Privileges Required | Low |
| User Interaction | Not Required |
| Affected Versions | setuptools prior to 78.1.1 |
| Fixed Version | setuptools 78.1.1 |
| Severity | High |
References
- Spectro Cloud Palette Security Advisory – CVE-2025-47273
- Wind River Support – LIN1025-1306
- Mageia Security Advisory – MGASA-2025-0288
- Feedly CVE – CVE-2025-47273
- NVD – CVE-2025-47273
- IBM Security Bulletin – IBM Fusion
- IBM Security Bulletin – watsonx Orchestrate
- IBM Security Bulletin – AIX/VIOS
- CWE-22: Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’)
- GitHub Security Advisory and PoC
Tags: CVE-2025-47273, setuptools, Python, Path-Traversal, CWE-22, High-Severity, Arbitrary-File-Write