در تاریخ ۲۳ اکتبر ۲۰۲۶، پروژه PHP از شناسایی یک مسیر آسیبپذیر جدید با شناسه CVE-2026-115560 خبر داد که در شرایط خاص میتواند به اجرای کد از راه دور (Remote Code Execution یا RCE) منجر شود.
این هشدار تنها دو روز پس از انتشار بهروزرسانیهای امنیتی برای دو آسیبپذیری مهم PHP با شناسههای CVE-2026-109618 و CVE-2026-109619 منتشر شد. با این حال، آسیبپذیری جدید را نباید با دو مورد قبلی یکسان دانست؛ شرایط فعالشدن آن متفاوت است و به ترکیبی غیرمعمول از تنظیمات PHP و رفتار کد برنامه نیاز دارد.
تیم امنیت PHP در اطلاعیه خود اعلام کرده است که تا انتشار نسخه اصلاحشده، مدیران سرورها باید قابلیت Session Upload Progress را غیرفعال کنند.
منابع:
۱. مشخصات آسیبپذیری CVE-2026-115560
| مشخصه | توضیحات |
|---|---|
| شناسه آسیبپذیری | CVE-2026-115560 |
| نرمافزار | PHP |
| نوع آسیبپذیری | مسیر بالقوه اجرای کد از راه دور (RCE) |
| مؤلفه مرتبط | Session و Session Upload Progress |
| شرایط بهرهبرداری | ترکیب مشخصی از تنظیمات و کد برنامه |
| نیاز به احراز هویت | در شرح مسیر گزارششده، شرط احراز هویت ذکر نشده است؛ با این حال، قابلیت بهرهبرداری باید با توجه به پیادهسازی واقعی بررسی شود. |
| وضعیت اصلاحیه در ۲۴ اکتبر ۲۰۲۶ | اصلاحیه اختصاصی هنوز در اطلاعیه اولیه اعلام نشده است. |
| راهکار موقت رسمی | غیرفعالکردن Session Upload Progress |
نکته مهم: در اطلاعیه اولیه PHP، نسخههای دقیق آسیبپذیر، نسخههای اصلاحشده و امتیاز شدت رسمی این CVE مشخص نشدهاند. بنابراین نباید بدون بررسی اطلاعیههای بعدی، نسخه خاصی را بهعنوان تنها نسخه آسیبپذیر یا اصلاحشده معرفی کرد.
۲. Session Upload Progress چیست؟
PHP قابلیتی با نام Session Upload Progress دارد که امکان ثبت و مشاهده اطلاعات مربوط به پیشرفت آپلود فایل را از طریق Session فراهم میکند.
برای مثال، یک سامانه تحت وب ممکن است هنگام دریافت فایل حجیم، میزان پیشرفت آپلود را نمایش دهد. برخی برنامهها برای پیادهسازی چنین قابلیتی از اطلاعاتی استفاده میکنند که PHP در Session ذخیره میکند.
این ویژگی بهصورت پیشفرض فعال است و تنظیم زیر برای کنترل آن استفاده میشود:
session.upload_progress.enabled = On
هنگامی که این قابلیت غیرفعال شود، PHP اطلاعات پیشرفت آپلود را از طریق این سازوکار ثبت نمیکند؛ اما اصل قابلیت آپلود فایل غیرفعال نمیشود و دریافت فایل همچنان میتواند انجام شود.
منبع: مستندات رسمی Session Upload Progress در PHP
۳. شرایط لازم برای فعالشدن مسیر آسیبپذیر
براساس توضیح منتشرشده توسط پروژه PHP، این آسیبپذیری به یک ترکیب خاص از تنظیمات و رفتار برنامه نیاز دارد. سه شرط اصلی عبارتاند از:
شرط اول: تنظیم اولیه Session Serialize Handler
برنامه یا پیکربندی PHP باید مقدار session.serialize_handler را روی یکی از مقادیر زیر تنظیم کرده باشد:
session.serialize_handler = php_binary
یا:
session.serialize_handler = php_serialize
این گزینه تعیین میکند اطلاعات Session با چه سازوکاری سریالسازی و ذخیره شوند.
شرط دوم: تغییر تنظیم هنگام اجرای برنامه
برنامه باید در زمان اجرا، با استفاده از تابع ini_set()، مقدار این گزینه را به php تغییر دهد:
ini_set('session.serialize_handler', 'php');
این تغییر باید پیش از فراخوانی session_start() انجام شود تا توالی موردنظر در مسیر آسیبپذیر شکل بگیرد.
شرط سوم: فعالبودن Session Upload Progress
قابلیت Session Upload Progress نیز باید فعال باقی مانده باشد.
بنابراین، فعالبودن این قابلیت بهتنهایی به معنی آسیبپذیر بودن یک سایت نیست. اگر برنامه در زمان اجرا Serialize Handler را به روش توصیفشده تغییر ندهد، این مسیر مشخص از آسیبپذیری فعال نمیشود.
پروژه PHP این ترکیب را غیرمعمول ارزیابی کرده است؛ با این حال، در سرورهای میزبانی مشترک و محیطهایی که چندین برنامه با تنظیمات متفاوت اجرا میشوند، بررسی تنظیمات واقعی همچنان ضروری است.
منبع: گزارش فنی The Hacker News
۴. پیامدهای امنیتی احتمالی
در صورت برقرار بودن شرایط لازم و موفقیت بهرهبرداری، این مسیر میتواند به اجرای کد در فرایند PHP منجر شود.
پیامدهای احتمالی اجرای کد به سطح دسترسی کاربر سرویس PHP، مجوزهای فایلها، محدودیتهای محیط اجرا و جداسازی برنامهها بستگی دارد. از جمله خطرات احتمالی میتوان به موارد زیر اشاره کرد:
- دسترسی غیرمجاز به اطلاعاتی که فرایند PHP اجازه خواندن آنها را دارد.
- تغییر فایلهای برنامه یا محتوای قابلنوشتن توسط سرویس وب.
- دسترسی به اطلاعات اتصال پایگاه داده و سایر اسرار در دسترس برنامه.
- استفاده از دسترسی فرایند آسیبدیده برای تلاش جهت نفوذ به بخشهای دیگر زیرساخت.
این موارد پیامدهای بالقوه یک اجرای کد موفق هستند و به معنی تأیید وقوع حمله یا نفوذ در تمام سامانههای دارای PHP نیستند.
تا زمان انتشار اطلاعیه اولیه، گزارشی مبنی بر بهرهبرداری تأییدشده از CVE-2026-115560 ارائه نشده بود. این موضوع نباید با نبود خطر فنی اشتباه گرفته شود.
۵. راهکار رسمی PHP برای کاهش ریسک
مهمترین اقدام توصیهشده توسط تیم امنیت PHP، غیرفعالکردن Session Upload Progress تا زمان انتشار نسخه اصلاحشده است.
در فایل پیکربندی مؤثر PHP، خط زیر را اضافه کنید یا مقدار موجود آن را تغییر دهید:
session.upload_progress.enabled = Off
در این حالت، قابلیت ثبت پیشرفت آپلود از طریق Session غیرفعال میشود و مسیر مشخصی که به این قابلیت وابسته است، قابل استفاده نخواهد بود.
نکات مهم در اعمال تنظیم
۱. تنظیم باید در محل صحیح اعمال شود.
در سرورهایی که چند نسخه PHP یا چند روش اجرای PHP دارند، ممکن است هر نسخه یا سرویس از فایل پیکربندی جداگانه استفاده کند. تغییر یک فایل php.ini لزوماً تمام نسخهها و وبسایتها را تحت پوشش قرار نمیدهد.
۲. تنظیم باید پیش از پردازش درخواست اعمال شود.
برای کاهش ریسک موردبحث، به تنظیمات معتبر در php.ini، تنظیمات مناسب PHP-FPM Pool یا پیکربندی سرور که پیش از پردازش درخواست مؤثر هستند، تکیه کنید. تغییر این گزینه با ini_set() در کد برنامه یا اتکا به .user.ini برای این راهکار، جایگزین مطمئنی برای اعمال تنظیم در سطح مناسب نیست.
۳. تمام Workerهای مرتبط باید تنظیم جدید را دریافت کنند.
پس از تغییر پیکربندی، سرویس یا Workerهای PHP مربوطه را مطابق روش مدیریت همان محیط Reload یا Restart کنید. در محیط PHP-FPM باید اطمینان حاصل شود که تمام Workerهای در حال سرویسدهی تنظیم جدید را دریافت کردهاند.
۴. پس از تغییر، عملکرد سایت بررسی شود.
صفحات اصلی، ورود کاربران، فرمهای دریافت فایل و سامانههایی که نوار پیشرفت آپلود دارند باید آزمایش شوند. در صورت وابستگی برنامه به Session Upload Progress، ممکن است نمایش درصد پیشرفت آپلود از کار بیفتد؛ این موضوع به معنی غیرفعالشدن خود آپلود نیست.
منبع: اطلاعیه رسمی PHP
۶. چگونه اعمال صحیح تنظیم را بررسی کنیم؟
صرف اضافهکردن خط به فایل پیکربندی کافی نیست. مدیر سرور باید تأیید کند که تنظیم در محیط واقعی اجرای سایت مؤثر شده است.
بررسی فایلهای پیکربندی
در ابتدا، فایل php.ini مربوط به هر نسخه PHP و تنظیمات مرتبط PHP-FPM بررسی شود. در صورت وجود چند نسخه PHP، این فرایند باید برای تمام نسخههایی که درخواست وب را پردازش میکنند انجام شود.
بررسی از طریق محیط وب
در صورت امکان، در یک محیط مدیریتی محدود و موقت، اطلاعات پیکربندی PHP را بررسی کنید و مقدار مؤثر session.upload_progress.enabled را مشاهده کنید. پس از بررسی، فایل موقت اطلاعات PHP را حذف کنید؛ انتشار عمومی چنین صفحهای میتواند اطلاعات حساس پیکربندی سرور را آشکار کند.
توجه به تفاوت PHP CLI و PHP وب
اجرای دستور زیر:
php -i
فقط تنظیمات محیط خط فرمان را نشان میدهد. این خروجی بهتنهایی اثبات نمیکند که PHP-FPM یا Apache نیز از همان تنظیم استفاده میکند.
برای تأیید نهایی، تنظیم مؤثر در همان SAPI و نسخه PHP که درخواستهای وب را پردازش میکند بررسی شود.
۷. آیا این تنظیم باعث اختلال در سایتها میشود؟
در اغلب سایتهای متداول، غیرفعالکردن Session Upload Progress اختلالی در عملکرد عادی ایجاد نمیکند؛ زیرا آپلود فایل برای کارکرد اصلی خود الزاماً به این قابلیت وابسته نیست.
با این حال، برنامههایی که بهطور مشخص از Session Upload Progress برای نمایش یا پردازش وضعیت آپلود استفاده میکنند، ممکن است بخشی از این قابلیت را از دست بدهند.
بنابراین، پس از اعمال تنظیم باید این موارد بررسی شوند:
- آپلود فایلهای معمولی و حجیم.
- فرمهای ارسال مدارک و فایلهای پیوست.
- سامانههایی که نوار درصد پیشرفت آپلود دارند.
- عملکرد بخشهای حساس سامانه پس از Reload یا Restart سرویس.
در محیطهای عملیاتی، بهتر است تغییر در یک بازه نگهداری مناسب انجام شود و نتیجه آن ثبت گردد.
۸. آیا بهروزرسانی PHP2Shell این آسیبپذیری را هم برطرف میکند؟
خیر؛ نباید چنین فرضی داشت.
در ۲۱ اکتبر ۲۰۲۶، نسخههای زیر برای رفع دو آسیبپذیری قبلی PHP2Shell منتشر شدند:
- PHP 8.2.35
- PHP 8.3.36
- PHP 8.4.27
- PHP 8.5.12
این نسخهها برای CVE-2026-109618 و CVE-2026-109619 منتشر شدند. با این حال، در اطلاعیه ۲۳ اکتبر پروژه PHP، اصلاحیه CVE-2026-115560 به انتشار عادی بعدی موکول شده بود.
بنابراین، نصب نسخههای فوق بهتنهایی نباید بهعنوان تأیید رفع CVE-2026-115560 تلقی شود. مدیران سرورها باید اطلاعیههای رسمی بعدی را بررسی کنند و پس از انتشار نسخه اصلاحشده، بهروزرسانی مناسب را نصب کنند.
منبع: وبسایت رسمی PHP
۹. چکلیست پیشنهادی برای مدیران سرور
برای مدیریت این آسیبپذیری، اقدامات زیر پیشنهاد میشود:
شناسایی تمام نسخههای PHP فعال در محیط وب.
بررسی تنظیمات session.serialize_handler در برنامهها و تنظیمات PHP.
شناسایی برنامههایی که در زمان اجرا از ini_set() برای تغییر Serialize Handler استفاده میکنند.
تنظیم session.upload_progress.enabled = Off در تمام محیطهای مرتبط.
Reload یا Restart سرویسها و اطمینان از اعمال تنظیم جدید روی Workerها.
آزمایش عملکرد آپلود فایل و سایر قابلیتهای حساس سامانه.
ثبت تغییرات در سوابق مدیریت تغییرات و مستندات امنیتی.
پیگیری انتشار اصلاحیه رسمی و نصب نسخه مناسب پس از انتشار.
بررسی جداگانه وصلههای CVE-2026-109618 و CVE-2026-109619.
جمعبندی
آسیبپذیری CVE-2026-115560 نمونهای از اهمیت بررسی تعامل میان تنظیمات داخلی PHP و کد برنامههای کاربردی است. برخلاف آسیبپذیریهایی که ممکن است دامنه وسیعی از نصبهای PHP را درگیر کنند، این مورد به ترکیب مشخصی از تنظیمات و رفتار برنامه نیاز دارد و پروژه PHP آن را کماحتمال ارزیابی کرده است.
با وجود این، در محیطهای عملیاتی نباید تنها بر کماحتمالبودن بهرهبرداری تکیه کرد. اقدام پیشنهادی فعلی، غیرفعالکردن Session Upload Progress، بررسی مؤثربودن تنظیم در تمام محیطهای اجرای PHP و پیگیری انتشار اصلاحیه رسمی است.
توصیه نهایی: مدیران سرورهای PHP بهتر است همین حالا تنظیم کاهنده ریسک را اعمال کنند و پس از انتشار اصلاحیه رسمی، بهروزرسانی امنیتی را نیز در اولویت قرار دهند.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.