آسیبپذیری از نوع Path Traversal (معروف به Zip Slip) در کتابخانه kiwilan/php-archive (نسخههای تا 2.3.02) شناسایی شده است. این نقص امنیتی به مهاجم اجازه میدهد تا با استفاده از فایلهای ZIP دستکاری شده، فایلهایی را در مسیرهای غیرمجاز سیستم هدف بنویسد.
جزئیات فنی و نحوه عملکرد
مشکل اصلی در تابع ArchiveZip::extract() در فایل src/Readers/ArchiveZip.php نهفته است. این کتابخانه هنگام استخراج محتویات یک فایل ZIP، نام فایلهای موجود در آرشیو را بدون اعتبارسنجی کافی بررسی نمیکند. مهاجم میتواند با استفاده از توالیهای ../ در نام فایلها، از پوشه هدف خارج شده و به مسیرهای حساستر در سیستم فایل (Filesystem) دسترسی پیدا کند.
تحلیل شدت و قابلیت اکسپلویت
با وجود انتشار یک کد اثبات مفهوم (PoC) عمومی، امتیاز CVSS 4.0 برای این آسیبپذیری تنها 2.1 (Low) ارزیابی شده است. دلیل این شدت پایین، نیاز به تعامل کاربر یا اپلیکیشن (User Interaction) است؛ به این معنا که مهاجم نمیتواند به تنهایی و بدون اینکه اپلیکیشن فایل مخرب را پردازش کند، حمله را انجام دهد. همچنین، میزان آسیبپذیری به سطح دسترسی (Permissions) فرآیند PHP بستگی دارد.
راهکارهای مقابله و رفع مشکل
- اعتبارسنجی ورودیها: قبل از فراخوانی تابع استخراج، نام تمامی فایلهای داخل آرشیو را بررسی کنید تا حاوی کاراکترهای
..یا مسیرهای مطلق نباشند. - استفاده از Sandbox: فایلها را در یک دایرکتوری موقت و با سطح دسترسی محدود استخراج کنید.
- جایگزینی کتابخانه: در صورت عدم امکان اعمال کنترلهای امنیتی، از کتابخانههای معتبرتری که بررسی مسیر (Path Canonicalization) را انجام میدهند استفاده کنید.