- شناسه CVE-2025-4517 :CVE
- CWE-22 :CWE
- yes :Advisory
- منتشر شده: ژوئن 3, 2025
- به روز شده: جولای 7, 2025
- امتیاز: 9.4
- نوع حمله: Path Traversal
- اثر گذاری: Arbitrary File write
- حوزه: برنامه نویسی
- برند: Python Software Foundation
- محصول: CPython
- وضعیتPublished :CVE
- No :POC
- وضعیت آسیب پذیری: patch شده
چکیده
آسیبپذیری بحرانی در ماژول tarfile کتابخانه استاندارد پایتون امکان نوشتن فایل در مسیرهایی خارج از دایرکتوری هدف را هنگام استخراج آرشیوهای tar نامطمئن فراهم میکند. این ضعف که ناشی از سرریز در مکانیزم realpath هنگام استفاده از فیلترهای استخراج است، نسخههای 3.12 تا 3.14 (شامل نسخههای آلفا و بتا) را تحت تأثیر قرار میدهد. در پایتون 3.14 و بالاتر، استفاده پیشفرض از فیلتر “data” این ریسک را افزایش می دهد. مهاجم میتواند با سوءاستفاده از این ضعف و با بهرهگیری از تکنیک پیمایش مسیر (Path Traversal)، فایلهای حساس را در سیستم هدف بازنویسی یا دستکاری کند.
توضیحات
آسیبپذیری CVE-2025-4517 یک ضعف از نوع محدودسازی نادرست مسیر فایل در یک دایرکتوری محدود مطابق با CWE-22 (Path Traversal) در ماژول tarfile پایتون است که در هنگام استخراج آرشیوهای tar نامطمئن اجازه میدهد عملیات نوشتن فایل در مسیرهایی خارج از دایرکتوری هدف انجام شود. این عملکرد هنگامی رخ میدهد که توابع TarFile.extractall() یا TarFile.extract() با پارامتر filter= “data” یا filter= “tar” مورد استفاده قرار گیرند. ماژول tarfile که برای مدیریت و استخراج آرشیوهای tar در سیستمهای مبتنی بر یونیکس استفاده میشود، از نسخه 3.12 به بعد، فیلترهای استخراج را برای محدود کردن مسیرهای غیرمجاز و جلوگیری از نوشتن فایلها در مکانهای مخرب اعمال میکند. با این حال، ضعف موجود در مکانیزم realpath (تابعی که مسیرهای فایل را نرمالسازی و مسیر واقعی آنها را در سیستمعامل تعیین میکند) باعث میشود این فیلترها بهطور کامل مؤثر نباشند و مهاجم بتواند مسیرهای مخرب را از فرآیند اعتبارسنجی عبور داده و آنها را اعمال کند.
در چنین شرایطی، مهاجم میتواند یک آرشیو tar مخرب تولید کند که شامل لینکهای نمادین (symlink) یا مسیرهایی با المنت “../” باشد؛ المنتی که برای حرکت به سطح بالاتر دایرکتوری استفاده میشوند. این ساختار به مهاجم اجازه میدهد فایلهایی را در مسیرهای دلخواه سیستم مانند /etc/passwd، /etc/shadow یا سایر دایرکتوریهای حساس بازنویسی کند. این ضعف نسخههای 3.9 تا 3.14 (اعم از نسخههای آلفا و بتا) را تحت تأثیر قرار میدهد و در پایتون 3.14 به بعد، تغییر مقدار پیشفرض پارامتر filter به “data” تعداد بیشتری از کاربران را بهطور ناخواسته در معرض این حمله قرار میدهد.
در سناریوی Source Distribution، شدت ریسک تا حدی کمتر است، زیرا فرآیند build بهطور ذاتی امکان اجرای کد (Code Execution) را برای اسکریپتهای setup یا hookها فراهم میکند. با این حال، آسیبپذیری Path Traversal همچنان میتواند باعث نوشتن فایل خارج از مسیر هدف شود و بررسی دستی اعضای آرشیو برای شناسایی symlinkهای مشکوک یا مسیرهای حاوی ../ ضروری است. این ضعف به دلیل امکانپذیری خودکارسازی، بهراحتی توسط مهاجم قابل سوءاستفاده است؛ مهاجم میتواند با یک اسکریپت ساده در Python یا Bash آرشیو tar مخربی بسازد و با تکیه بر یک فرآیند استخراج خودکار یا کمتعامل، فایلهای خارج از دایرکتوری مقصد را بازنویسی کند. برای مثال، یک symlink هدایتشده به مسیر حساسی مانند /etc/shadow در صورتی که استخراجکننده با سطح دسترسی کافی اجرا شود میتواند منجر به از بینرفتن محرمانگی، تغییر پیکربندی سیستم یا ایجاد مسیر دسترسی غیرمجاز شود.
پیامدهای این ضعف شامل تأثیر بالا بر محرمانگی بهدلیل افشای فایلهای حساس، یکپارچگی بهواسطه قابلیت بازنویسی فایلهای حیاتی سیستم و تأثیر محدود بر دسترسپذیری است، چراکه هدف اصلی حمله تخریب مستقیم سرویسها نیست. این آسیبپذیری در نسخههای جدید پایتون پچ شده و ارتقای محیط به نسخههای پچشده تنها راه مؤثر برای جلوگیری از آسیب پذیری است.
CVSS
| Score | Severity | Version | Vector String |
| 9.4 | CRITICAL | 3.1 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L |
لیست محصولات آسیب پذیر
| Versions | Product |
| affected from 0 before 3.9.23
affected from 3.10.0 before 3.10.18 affected from 3.11.0 before 3.11.13 affected from 3.12.0 before 3.12.11 affected from 3.13.0 before 3.13.4 affected from 3.14.0a1 before 3.14.0b3 |
CPython |
لیست محصولات بروز شده
| Versions | Product |
| 3.9.23
3.10.18 3.11.13 3.12.11 3.13.4 3.14.0b3 |
CPython |
استفاده محصول در ایران
در این جدول، تعداد صفحات ایندکسشده در گوگل با دامنه .ir که CPython را ذکر کرده اند، ثبت شده است. این داده صرفاً برای برآورد تقریبی حضور محصولات در وب ایران استفاده شده و نمایانگر میزان نصب دقیق و استفاده واقعی نیست.
| Approx. Usage in .ir Domain via Google
(Total Pages) |
Search Query (Dork) | Product |
| 19,500 | site:.ir “CPython” | CPython |
نتیجه گیری
آسیبپذیری بحرانی در ماژول tarfile پایتون، از طریق تکنیک پیمایش مسیر امکان نوشتن فایلهای دلخواه خارج از دایرکتوری استخراج را فراهم می کند و در سناریوهایی مانند پردازش آرشیوهای نامطمئن در سرورها میتواند منجر به افشای اطلاعات حساس یا تغییر پیکربندی سیستم شود. با توجه به انتشار پچهای امنیتی، اجرای اقدامات زیر برای جلوگیری از بهرهبرداری و کاهش سطح ریسک ضروری است:
- بهروزرسانی فوری: تمام نصبهای CPython را به نسخههای پچ شده مانند 3.12.11، 3.13.4 یا 14.0b3 و بالاتر به روزرسانی کنید. بهروزرسانی، مؤثرترین و قطعیترین راهکار برای مقابله با آسیبپذیری است و باید در اولویت قرار گیرد. سایر اقدامات صرفاً میتوانند به کاهش ریسک و مقابله با حملات مشابه کمک کنند.
- اعمال کاهش ریسک (Mitigation)موقت با بررسی لینکهای ناامن: قبل از استخراج، تمام اعضای آرشیو (tar members) بررسی شوند و اگر linkname شامل “..” (Parent directory) باشد، استخراج متوقف شود. این اقدام مسیرهای مخرب را شناسایی کرده و از نوشتن فایلهای دلخواه خارج از دایرکتوری هدف جلوگیری میکند.
- استخراج ایمن با فیلتر داده: استفاده از filter= “data” یا filter= “tar” و تنظیم errorlevel ≥ 1، باعث میشود اعضای نامعتبر نادیده گرفته شوند و مسیرهای مخرب امکان عبور نداشته باشند.
- نظارت و اعتبارسنجی: آرشیوهای ورودی را با ابزارهایی مانند tar –list یا Python’s tarfile.is_tarfile اسکن کنید و از محیط ایزوله، مانند Docker برای استخراج استفاده نمایید.
- ایزولهسازی فرآیند: استخراج tar را در محیطهای محدود (مانند chroot یا AppArmor/SELinux) انجام دهید و دسترسی فایلسیستم را با اصل حداقل دسترسی محدود سازید.
- آموزش توسعهدهندگان: تیمهای توسعه باید با ریسکهای استخراج آرشیوهای نامطمئن و اهمیت استفاده از فیلترهای استخراج (Extraction Filters) آشنا باشند؛ به ویژه در پایتون 3.14 و بالاتر که فیلتر پیشفرض به “data” تغییر کرده است.
اجرای این اقدامات، به ویژه بهروزرسانی سریع و اعمال mitigation کد، ریسک بهرهبرداری از این ضعف را به طور چشمگیری کاهش داده و امنیت پردازش فایل در اپلیکیشنهای پایتون را افزایش میدهد.
امکان استفاده در تاکتیک های Mitre Attack
Initial Access (TA0001)
ورودی از طریق آرشیو tar مخرب صورت میگیرد؛ مهاجم با ارائه یک فایل فشرده حاوی symlink یا مسیرهای فرار (../) کاربر یا سرویس خودکار را فریب میدهد تا آن را استخراج کند. تعامل بسیار کم است و کافی است فرآیند build، CI/CD pipeline یا یک اسکریپت سیستم، آرشیو را بهصورت خودکار unpack کند.
Credential Access (TA0006)
بازنویسی یا جایگزینی فایلهایی مانند /etc/shadow در صورتی که extractor با دسترسی بالا اجرا شود، میتواند امکان افشای هشهای رمز عبور یا دستکاری آنها را فراهم کند و به مهاجم اجازه دهد حسابهای جدید بسازد یا رمزها را تغییر دهد.
Privilege Escalation (TA0004)
اگر فرآیند استخراج با سطح دسترسی بالا اجرا شود، مهاجم میتواند با جایگزینی فایلهای سیستمی مکانیزمهایی برای افزایش دسترسی ایجاد کند—برای مثال تغییر فایلهای پیکربندی، اسکریپتهای startup یا فایلهای حساس که توسط root خوانده میشوند.
Collection (TA0009)
نوشتن symlink به مسیرهای حساس و سپس خواندن خروجی استخراجشده میتواند منجر به دسترسی به دادههای حیاتی مانند فایلهای پیکربندی، توکنها، کلیدهای SSH یا فایلهای اعتبارنامه شود.
Defense Evasion (TA0005)
مهاجم با استفاده از symlinkهای طبیعی یا نامهای فایل شبیهسازیشده، عملیات خروج از مسیر (Path Traversal) را در میان فایلهای معمولی tar پنهان میکند تا بررسیهای سطحی یا اسکنهای ابتدایی CI/CD را دور بزند.
Impact (TA0040)
پیامد اصلی شامل بازنویسی فایلهای سیستمی، تخریب دادهها، تزریق پیکربندی مخرب، ایجاد backdoor، دسترسی غیرمجاز و احتمال کنترل کامل سرویس یا ماشین است—بهویژه زمانی که فرآیند استخراج با سطح دسترسی بالا در حال اجرا باشد.
منابع
- https://www.cve.org/CVERecord?id=CVE-2025-4517
- https://www.cvedetails.com/cve/CVE-2025-4517/
- https://mail.python.org/archives/list/security-announce@python.org/thread/MAXIJJCUUMCL7ATZNDVEGGHUMQMUUKLG/
- https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-4517
- https://vuldb.com/?id.310971
- https://github.com/python/cpython/issues/135034
- https://github.com/python/cpython/pull/135037
- https://github.com/python/cpython/commit/3612d8f51741b11f36f8fb0494d79086bac9390a
- https://github.com/python/cpython/commit/9e0ac76d96cf80b49055f6d6b9a6763fb9215c2a
- https://gist.github.com/sethmlarson/52398e33eff261329a0180ac1d54f42f
- https://github.com/python/cpython/commit/19de092debb3d7e832e5672cc2f7b788d35951da
- https://github.com/python/cpython/commit/aa9eb5f757ceff461e6e996f12c89e5d9b583b01
- https://github.com/python/cpython/commit/28463dba112af719df1e8b0391c46787ad756dd9
- https://github.com/python/cpython/commit/4633f3f497b1ff70e4a35b6fe2c907cbe2d4cb2e
- https://github.com/python/cpython/commit/9c1110ef6652687d7c55f590f909720eddde965a
- https://github.com/python/cpython/commit/dd8f187d0746da151e0025c51680979ac5b4cfb1
- https://nvd.nist.gov/vuln/detail/CVE-2025-4517
- https://cwe.mitre.org/data/definitions/22.html