PHP2Shell: وقتی هوش مصنوعی باگ ۲۰ ساله را به اکسپلویت تبدیل میکند
نویسنده: آرش لطیفی
در اکتبر ۲۰۲۶ دو آسیبپذیری بحرانی RCE در PHP (CVE-2026-109618 و CVE-2026-109619) وصله شدند؛ محققان با کمک AI مسیر اجرای کد را پیدا کردند. درسهای عملی برای هر کسی که سرور PHP/وردپرس دارد.
TL;DR — یک باگ بیخطرِ out-of-memory در PHP که از ۲۰۲۴ گزارش شده بود، وقتی محققانِ کمکگرفته از AI مسیر اجرای کد از راه دور (RCE) روی آن پیدا کردند، به فاجعه نزدیک شد؛ PHP 8.5.12/8.4.27/8.3.36/8.2.35 در ۲۱ اکتبر ۲۰۲۶ وصله شدند و درس اصلی ساده است: آپدیت را عقب ننداز.
اوایل سال وقتی یک محقق با ابزارهای AI در دو هفته تبدیل یک کرش ساده به RCE کرد، همه فهمیدیم که معادلهی امنیت عوض شده. ماجرای PHP2Shell — که IEEE Spectrum آن را «شروع جهنم سایبری» نامید — دقیقاً نشان میدهد چرا «فقط یه کرشه، بعداً فیکس میکنیم» دیگر جواب نمیدهد.
باگ چی بود؟
بنیاد PHP در پست رسمی خودش دو آسیبپذیری بحرانی را توضیح داده:
CVE-2026-109618 — RCE از طریق خرابی OOM: اگر یک درخواست دقیقاً در لحظهی بد به memory_limit بخورد، PHP میتواند دادههای داخلی نیمه-مقداردهی شده را جا بگذارد و بعداً معتبر فرض کند؛ حافظه خراب میشود. روی Apache با mod_php، یک درخواست بدون احراز هویت قبل از اجرای هر کد اپلیکیشنی میتواند این را تریگر کند و RCE کامل با تنظیمات پیشفرض نمایش داده شد. روی PHP-FPM هم از مسیرهای کد اپلیکیشن تأیید شد.
CVE-2026-109619 — RCE از طریق state سراسری کهنه: یک خطای fatal در لحظهی نامناسب میتواند state داخلی را به حافظهی درخواست قبلی اشاره بدهد؛ درخواست بعدی روی همان worker از آن حافظهی آزادشده استفاده میکند. use-after-free و کرش worker تأیید شد و RCE علیه یک اپلیکیشن واقعی روی Apache+mod_php نمایش داده شد.
نکتهی مهم: هر دو در بخشهایی از PHP رخ میدهند که تقریباً هر درخواستی لمسشان میکند — مدیریت حافظه و مدیریت خطا. و ریشهشان به گزارش ۲۰۲۴ برمیگشت که آن موقع «فقط کرش» به نظر میرسید.
کجا شیکار شد؟
داستان بر اساس خود پست بنیاد PHP:
- ۲۰۲۴: اولین ممیزی امنیتی خارجی PHP (با بودجهی Sovereign Tech Agency از طریق OSTIF، توسط Quarkslab). حین فیکس یکی از یافتهها، اولین نشانههای مشکل OOM پیدا شد ولی مسیر اکسپلویت مشخص نبود.
- تیم امنیتی چند رویکرد رقیب برای فیکس داشت که هر کدام تریدآف داشتند (شکستن سازگاری، DoS جدید، تغییر اکستنشنهای جانبی) و تصمیمگیری ماهها گیر کرد — خود بنیاد صادقانه نوشت «این یک شکست ساختاری بود».
- ۳۰ جولای ۲۰۲۶: PHP وارد برنامهی Patch the Planet شد و شرکت Calif ممیزی را شروع کرد.
- ۱۱ آگوست: محقق Ryan A در Calif یک RCE بدون قید و شرط با همان ریشهی OOM گزارش کرد؛ OpenAI مستقلاً همین ریشه را گزارش داد و بعدش Wiz بردارهای حملهی بیشتر را فرستاد.
- ۲۱ اکتبر: نسخههای وصله یک روز زودتر از موعد منتشر شدند چون شناسههای CVE دو روز قبل لو رفته بود.
| مرحله | تاریخ | اتفاق | | --- | --- | --- | | گزارش اولیه OOM | ۲۰۲۴ | «فقط کرش» — بلاموضوع | | ممیزی Calif (Patch the Planet) | ۳۰ جولای ۲۰۲۶ | شروع audit با کمک AI | | گزارش RCE کامل | ۱۱ آگوست ۲۰۲۶ | Calif + OpenAI + Wiz | | انتشار وصله | ۲۱ اکتبر ۲۰۲۶ | 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 |
چرا AI اینجا تعیینکننده بود؟
Suman Jana (استاد دانشگاه Columbia) در مقالهی IEEE Spectrum نکتهی کلیدی را گفته: اکسپلویت کردن این باگ «علم موشکی نیست، فقط کلی استدلال خیلی دقیق و دردناک است. و AI خیلی خوب انجامش داده.» یعنی گپ بین «محقق ردهبالای ۰.۱٪» و بقیه بسته شد.
بنیاد PHP هم تأیید میکند که بعد از اسکن با مدلهای AI، تعداد گزارشهای دریافتی بهشدت بالا رفته: از اول جولای ۱۵ CVE منتشر کرده و بیش از ۱۰۰ گزارش نامعتبر/تکراری/غیرقابل بازتولید را هم بررسی کرده. توازن قدرت دارد به نفع مهاجم حرکت میکند — هر باگ قدیمی، خوراک بالقوهی مدلهای آینده است.
چکلیست: چیکار کنیم؟
- [ ] نسخهی PHP سرورت را چک کن (
php -v) — باید حداقل 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 باشد - [ ] اگر وردپرس یا دروپال داری، عجله کن؛ سایتهای وردپرسی و دروپالی اصلیترین قربانیان بالقوه بودند (وردپرس همان PHP است)
- [ ]
memory_limitرا معقول تنظیم کن و مطمئن شو هاستت خودش وصله را اعمال کرده - [ ] روی Apache+mod_php حساسترین حالت است؛ اگر میتوانی به PHP-FPM مهاجرت کنی (بعد از آپدیت)
- [ ] آپدیتهای امنیتی را نینداز فردا؛ این ماجرا دقیقاً مثال Matthew Green از Johns Hopkins است: «اگه گوشیت میگه آپدیت امنیتی هست، تا هفتهی بعد صبر نکن»
- [ ] برای اپ خودت گزارشهای «فقط کرش» را زباله ندان — الگوی PHP2Shell ممکن است برای هر زبانی تکرار شود
درس بزرگتر
تیم PHP دو ماه با چهار مهندس روی وصله کار کرد، چون «فیکس کردن» باید همهی مسیرهای حمله را ببندد و هیچ قابلیت موجودی را نشکند، در حالی که «پیدا کردن باگ» فقط یک مسیر لازم دارد. این عدم تقارن با AI تشدید میشود: یافتن سریعتر و ارزانتر میشود، فیکس نه. برای پروژههای متن-باز که منبع درآمد مشخصی ندارند (و PHP یکی از بزرگترینشان است)، این یعنی سازمان امنیتی حرفهای و بودجه پایدار — چیزهایی که بنیاد PHP همین امسال با تیم Ecosystem Security و مهندس AI Security در Residence شروع به ساختنشان کرده.
FAQ
Q: سایت من روی هاست اشتراکیه؛ باید چیکار کنم؟
به هاستینگت تیکت بزن و بپرس نسخهی PHP دقیقاً چنده و آیا به 8.5.12/8.4.27/8.3.36/8.2.35 یا بالاتر رسیده. اگر جواب مبهم بود، جدی بگیر — روی هاست اشتراکی تو کنترلی روی آپدیت نداری.
Q: این باگ فقط مال وردپرسه؟
نه. آسیبپذیری در هستهی خود PHP بود؛ هر سایتی که PHP اجرا میکند (وردپرس، دروپال، لاراول، حتی یک اسکریپت ساده) در معرض بود. IEEE Spectrum سایت NASA و ویکیپدیا و کاخ سفید را هم جزو در معرض خطرها نام برد.
Q: تا حالا اکسپلویت واقعی در wild دیده شده؟
طبق بنیاد PHP تا زمان انتشار، PoCهایی بعد از لو رفتن CVEها دستبهدست شد ولی اکسپلویت عملکردی شناسایی نشد. این شانس بود، نه تضمین — همین الگو دفعهی بعد ممکن است شانس نباشد.