آموزش تکنولوژی، علوم دیجیتال و نجوم به زبان ساده

هشدار PHP۲Shell: دو آسیب‌پذیری بحرانی PHP که میلیون‌ها سایت را تهدید می‌کند

در ۲۱ اکتبر ۲۰۲۶ پروژه PHP یک به‌روزرسانی امنیتی اضطراری منتشر کرد که شاید مهم‌ترین خبر امنیتی سال برای صاحبان سایت باشد: دو آسیب‌پذیری بحرانی PHP با نام مشترک PHP2Shell که به مهاجم اجازه می‌دهد بدون هیچ نام کاربری و رمزی، روی سرور کد دلخواه اجرا کند. این آسیب‌پذیری بحرانی PHP در قلب خود زبان PHP نهفته است، نه در یک افزونه وردپرس یا یک قالب؛ پس هر سایتی که با PHP کار می‌کند — از وردپرس و دروپال تا فروشگاه‌های اینترنتی — در معرض آن قرار دارد. در این مطلب می‌خوانیم PHP2Shell چیست، چطور کشف شد، چه کسانی در خطرند و دقیقاً چه کار کنید تا سایت‌تان امن بماند.

رک‌های سرور در یک مرکز داده؛ آسیب‌پذیری بحرانی PHP
پشت رک سرور در مرکز داده NERSC — عکس: دریک کوتزی، مالکیت عمومی (CC0) از ویکی‌مدیا کامنز

PHP2Shell چیست و چرا آسیب‌پذیری بحرانی PHP این‌قدر خطرناک است؟

PHP زبان برنامه‌نویسی سمت سرور است که صفحه‌های وب را می‌سازد، فرم‌ها را پردازش می‌کند و با پایگاه داده حرف می‌زند. بر اساس آمار W3Techs حدود ۷۰ درصد سایت‌های جهان با PHP کار می‌کنند و وردپرس — محبوب‌ترین سیستم مدیریت محتوای دنیا — هم روی همین زبان سوار است. وقتی حفره در خود موتور PHP باشد، به‌روزرسانی وردپرس یا افزونه‌ها به‌تنهایی کافی نیست؛ باید خود PHP به‌روز شود.

هر دو حفره PHP2Shell امتیاز ۹٫۲ از ۱۰ در مقیاس CVSS نسخه ۴ گرفته‌اند؛ یعنی در بالاترین رده شدت قرار دارند. نکته ترسناک‌تر این است که حمله به هیچ احراز هویتی نیاز ندارد: یک درخواست وب ساده، بدون ورود به حساب کاربری، می‌تواند حمله را پیش از آن‌که حتی کد برنامه شما اجرا شود، فعال کند. پروژه PHP در مشاوره امنیتی خود صریح نوشته است: «هیچ راه‌حل موقتی کاملی وجود ندارد؛ به‌روزرسانی تنها انتخاب امن است.»

دو آسیب‌پذیری بحرانی PHP دقیقاً چطور کار می‌کنند؟

هر دو حفره در نحوه راه‌اندازی و پایان دادن به یک درخواست وب در PHP ریشه دارند؛ یعنی دقیقاً در بخشی که تقریباً هر درخواست از آن عبور می‌کند و کد برنامه شما هیچ کنترلی روی آن ندارد.

  • CVE-۲۰۲۶-۱۰۹۶۱۸ — خرابی ناشی از اتمام حافظه: اگر هنگام راه‌اندازی یک درخواست، حافظه PHP تمام شود، داده‌های داخلی درخواست به‌صورت ناقص ساخته می‌شوند. کدی که در پایان درخواست برای پاک‌سازی اجرا می‌شود، ممکن است همین داده ناقص را معتبر فرض کند و همین‌جا مهاجم می‌تواند کنترل را به دست بگیرد.
  • CVE-۲۰۲۶-۱۰۹۶۱۹ — وضعیت قدیمی سراسری: وضعیت داخلی متعلق به یک درخواست می‌تواند پس از آزاد شدن حافظه‌اش، باقی بماند. درخواستی بعدی که همان کارگر PHP به آن پاسخ می‌دهد، ممکن است پیش از آن‌که مقداردهی عادی انجام شود، از همان وضعیت قدیمی استفاده کند.

پروژه PHP می‌گوید خطر برای نصب‌هایی که با آپاچی و ماژول mod_php کار می‌کنند، از همه بیشتر است؛ چون در این پیکربندی، حمله اثبات‌شده با یک درخواست بدون احراز هویت و پیش از اجرای کد برنامه، ممکن است. پژوهشگران شرکت ویز (Wiz) هم اجرای کد از راه دور را روی ایمیج‌های استاندارد وردپرس، دروپال و جوملا نشان داده‌اند؛ اما ضعف، وابسته به آن برنامه‌ها نیست و یک برنامه ساده روی نسخه آسیب‌پذیر PHP هم همان خطر را دارد.

چه کسانی در برابر آسیب‌پذیری بحرانی PHP در خطرند؟

پاسخ کوتاه پروژه PHP این است: همه نصب‌های PHP که به درخواست‌های وب پاسخ می‌دهند. این شامل PHP-FPM، آپاچی با mod_php، php-cgi، فرانکن‌پی‌اچ‌پی و لایت‌اسپید می‌شود؛ فرقی نمی‌کند روی آن چه چارچوب یا سیستم مدیریت محتوایی سوار باشد. بر اساس داده‌های شرکت پالو آلتو نتورکس، حدود ۲۲٫۶ میلیون نمونه در معرض خطر شناسایی شده است.

نسخه‌های اصلاح‌شده که در ۲۱ اکتبر ۲۰۲۶ منتشر شدند، این‌ها هستند:

  • PHP 8.5.12
  • PHP 8.4.27
  • PHP 8.3.36
  • PHP 8.2.35

اگر نسخه PHP شما پایین‌تر از این اعداد است، آسیب‌پذیرید. نسخه‌های ۸٫۱ و قدیمی‌تر دیگر از طرف پروژه PHP به‌روزرسانی نمی‌شوند؛ هرچند برخی توزیع‌های لینوکس و فروشندگان پشتیبانی بلندمدت، اصلاحیه‌های برگردانده‌شده ارائه کرده‌اند. نکته مهم دیگر: پس از به‌روزرسانی حتماً باید کارگرهای PHP دوباره راه‌اندازی شوند تا کد جدید واقعاً در حال اجرا باشد.

ابعاد واکنش جهانی نشان می‌دهد موضوع چقدر جدی گرفته شده است: آژانس امنیت ملی آمریکا (NSA) هشدار عمومی نادری صادر کرد و به سازمان‌هایی که نمی‌توانند فوراً وصله کنند توصیه کرد سیستم‌های آسیب‌پذیر را از دسترس خارج کنند. مرکز ملی امنیت سایبری بریتانیا هم همان روز هشدار رسمی داد. حتی تلاش‌های بهره‌برداری، پیش از انتشار وصله دیده شد؛ شرکت آمازون می‌گوید هانی‌پات‌هایش در ۱۷ اکتبر — یعنی چهار روز پیش از انتشار اصلاحیه — یک تلاش بهره‌برداری ثبت کرده‌اند. هشدارهای امنیتی این‌چنینی فقط مخصوص سرورها نیست؛ همین چند روز پیش در اِم وب درباره هشدار امنیتی جدید کروم هم نوشتیم که نشان می‌دهد لایه‌های امنیتی مرورگر و سرور چطور مکمل یکدیگرند.

هوش مصنوعی چطور آسیب‌پذیری بحرانی PHP را پیدا کرد؟

نکته جالب این ماجرا، نقش هوش مصنوعی در کشف آن است. به گفته اوپن‌ای‌آی، ابتکار «Patch the Planet» این شرکت با مدل GPT-۵.۶ Sol یکی از حفره‌ها را شناسایی کرد و شرکت ویز هم با مدل جمینای، هر دو آسیب‌پذیری را به‌صورت مستقل گزارش داد. جالب است که نخستین نشانه‌های یکی از این حفره‌ها به ممیزی امنیتی خارجی PHP در سال ۲۰۲۴ برمی‌گردد که با حمایت آژانس فناوری مستقل اروپا و توسط شرکت کوارک‌اسلب انجام شد؛ اما کار روی اصلاحیه ماه‌ها به‌خاطر سبک‌سنگین کردن سازگاری و عملکرد، متوقف مانده بود.

البته پروژه PHP تأکید کرده است که نگهدارندگان انسانی، انتشار وصله را رهبری کرده‌اند و تصمیم‌های امنیتی را انسان‌ها گرفته‌اند. هوش مصنوعی اینجا نقش یک بازرس خستگی‌ناپذیر را بازی کرد که توانست در کدهای قدیمی، چیزی را ببیند که ممیزی‌های انسانی سال‌ها از کنارش گذشته بودند؛ حفره‌هایی که ریشه‌شان به PHP نسخه ۵ در سال ۲۰۰۴ برمی‌گردد. اگر می‌خواهید از مدل‌های هوش مصنوعی در کار روزمره بهتر استفاده کنید، راهنمای ساده پرامپت‌نویسی برای مبتدی‌ها را هم بخوانید.

چطور بفهمید سایت شما در برابر آسیب‌پذیری بحرانی PHP امن است؟

اگر سایت وردپرسی یا هر سایت PHP دیگری دارید، با این گام‌های ساده وضعیت خود را بررسی کنید:

  1. نسخه PHP را ببینید: در وردپرس از مسیر «ابزارها ← سلامت سایت ← اطلاعات ← سرور» نسخه PHP را پیدا می‌کنید. در هاست‌های اشتراکی هم معمولاً در بخش انتخاب نسخه PHP در کنترل‌پنل هاست (مثل سی‌پنل یا دایرکت‌ادمین) نوشته شده است.
  2. با عددهای امن مقایسه کنید: اگر روی شاخه ۸٫۳ هستید باید دست‌کم ۸٫۳٫۳۶ باشد؛ روی ۸٫۴ باید ۸٫۴٫۲۷ و روی ۸٫۲ باید ۸٫۲٫۳۵ باشد. هر عددی پایین‌تر، یعنی آسیب‌پذیر.
  3. قبل از به‌روزرسانی پشتیبان بگیرید: یک پشتیبان کامل از فایل‌ها و پایگاه داده بگیرید تا اگر چیزی به هم ریخت، راه برگشت داشته باشید.
  4. PHP را به‌روز و کارگرها را ری‌استارت کنید: در هاست اشتراکی معمولاً انتخاب نسخه جدید در کنترل‌پنل کافی است؛ روی سرور اختصاصی، بسته PHP را به‌روز کنید و سرویس PHP-FPM یا آپاچی را دوباره راه‌اندازی کنید. اگر تازه با سرورهای لینوکسی آشنا می‌شوید، راهنمای قدم‌به‌قدم شروع لینوکس برای مبتدی‌ها به شما کمک می‌کند محیط سرور را بهتر بشناسید.
  5. دوباره نسخه را بررسی کنید: پس از به‌روزرسانی، همان صفحه سلامت سایت را باز کنید و مطمئن شوید عدد جدید واقعاً در حال اجراست، نه فقط نصب‌شده.

یک اشتباه رایج را همین‌جا کنار بگذارید: به‌روز نگه داشتن وردپرس، افزونه‌ها و قالب، جای به‌روزرسانی PHP را نمی‌گیرد. می‌توانید همه برنامه‌های روی سایت را کاملاً به‌روز نگه دارید و باز هم موتور آسیب‌پذیر زیر آن‌ها در حال اجرا باشد.

اگر همین امروز نمی‌توانید به‌روز کنید چه کنید؟

گاهی به‌روزرسانی فوری ممکن نیست؛ مثلاً برنامه شما به نسخه قدیمی PHP وابسته است یا پنجره نگهداری سرور چند روز دیگر است. پروژه PHP چند اقدام کاهنده خطر برای مسیرهای حمله خاص معرفی کرده است، اما صریح می‌گوید این‌ها نصب را امن نمی‌کنند. در این شرایط، منطقی‌ترین کارها این‌هاست:

  • سامانه‌های اینترنتی آسیب‌پذیر را تا حد ممکن از دسترس عمومی جدا کنید یا پشت دیوار آتش برنامه وب (WAF) با قوانین به‌روز قرار دهید.
  • از هاست یا مدیر سرور بپرسید آیا اصلاحیه برگردانده‌شده فروشنده برای نسخه شما موجود است یا نه.
  • گزارش‌های سرور را برای درخواست‌های مشکوک و رفتار غیرعادی پردازش‌های PHP زیر نظر بگیرید.
  • و مهم‌تر از همه، به‌روزرسانی را به تعویق نیندازید؛ با توجه به انتشار عمومی جزئیات و مشاهده بهره‌برداری در دنیای واقعی، هر روز تأخیر، ریسک را بیشتر می‌کند.

جمع‌بندی: این بار به‌روزرسانی را عقب نیندازید

PHP2Shell یادآوری تلخی است که امنیت یک سایت فقط به برنامه‌ای که می‌بینیم وابسته نیست؛ به زنجیره‌ای از سامانه‌ها وابسته است که موتور PHP یکی از حلقه‌های پنهان اما حیاتی آن است. دو حفره با امتیاز ۹٫۲، بدون نیاز به ورود، در زبانی که ۷۰ درصد وب روی آن می‌چرخد، چیزی نیست که بتوان آن را به «هفته بعد» سپرد. امروز نسخه PHP سایت‌تان را بررسی کنید؛ اگر پایین‌تر از نسخه‌های امن است، همین امروز به‌روز کنید و بعد از آن، اجرای نسخه جدید را تأیید کنید.

اگر تجربه‌ای از به‌روزرسانی PHP یا سؤالی درباره سلامت سایت‌تان دارید، در بخش دیدگاه‌ها بنویسید.

منبع اصلی این مطلب: مشاوره امنیتی پروژه PHP، ۲۱ اکتبر ۲۰۲۶. این مطلب بر اساس منابع معتبر بین‌المللی نوشته شده و اعداد و نسخه‌ها از مشاوره رسمی PHP نقل شده‌اند.

منبع پروژه PHP (php.net) — مشاوره امنیتی ۲۱ اکتبر ۲۰۲۶
ممکن است شما دوست داشته باشید
ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.