خانه » CVE-2025-4517

CVE-2025-4517

Arbitrary Writes Via Tarfile Realpath Overflow

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

چکیده

آسیب‌پذیری بحرانی در ماژول 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، دسترسی غیرمجاز و احتمال کنترل کامل سرویس یا ماشین است—به‌ویژه زمانی که فرآیند استخراج با سطح دسترسی بالا در حال اجرا باشد.

منابع

  1. https://www.cve.org/CVERecord?id=CVE-2025-4517
  2. https://www.cvedetails.com/cve/CVE-2025-4517/
  3. https://mail.python.org/archives/list/security-announce@python.org/thread/MAXIJJCUUMCL7ATZNDVEGGHUMQMUUKLG/
  4. https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-4517
  5. https://vuldb.com/?id.310971
  6. https://github.com/python/cpython/issues/135034
  7. https://github.com/python/cpython/pull/135037
  8. https://github.com/python/cpython/commit/3612d8f51741b11f36f8fb0494d79086bac9390a
  9. https://github.com/python/cpython/commit/9e0ac76d96cf80b49055f6d6b9a6763fb9215c2a
  10. https://gist.github.com/sethmlarson/52398e33eff261329a0180ac1d54f42f
  11. https://github.com/python/cpython/commit/19de092debb3d7e832e5672cc2f7b788d35951da
  12. https://github.com/python/cpython/commit/aa9eb5f757ceff461e6e996f12c89e5d9b583b01
  13. https://github.com/python/cpython/commit/28463dba112af719df1e8b0391c46787ad756dd9
  14. https://github.com/python/cpython/commit/4633f3f497b1ff70e4a35b6fe2c907cbe2d4cb2e
  15. https://github.com/python/cpython/commit/9c1110ef6652687d7c55f590f909720eddde965a
  16. https://github.com/python/cpython/commit/dd8f187d0746da151e0025c51680979ac5b4cfb1
  17. https://nvd.nist.gov/vuln/detail/CVE-2025-4517
  18. https://cwe.mitre.org/data/definitions/22.html

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

پیام بگذارید