GiveWP، افزونه کمک‌رسانی وردپرس که قدرت‌بخش میلیون‌ها سایت خیریه است، ناگهان با یک نقص امنیتی بحرانی از نوع اجرای کد از راه دور (remote-code-execution) مواجه شد. CVE-2026-82222 امتیاز کامل ۱۰.۰ را در سیستم CVSS کسب کرده است و به هر کسی در اینترنت اجازه می‌دهد دستورات دلخواه خود را روی سرور آسیب‌پذیر اجرا کند. اصلاحیه این نقص در نسخه ۴.۱۶.۷.۲ ارائه شده است.

چرا این باگ اهمیت دارد

GiveWP در قلب بی‌شمار صفحات جمع‌آوری کمک‌های مالی قرار دارد. صاحبان سایت‌ها برای مدیریت داده‌های اهداکنندگان، پردازش پرداخت‌ها و ذخیره اطلاعات نشست (session) به آن متکی هستند. مهاجمی که بتواند کد را روی سرور زیرساختی اجرا کند، می‌تواند اطلاعات کاربری را سرقت کند، سایت را تغییر شکل دهد (deface) یا به بخش‌های دیگر شبکه نفوذ کند. از آنجایی که این آسیب‌پذیری بدون نیاز به ورود به سیستم عمل می‌کند، کل اینترنت عمومی به سطح حمله (attack surface) تبدیل می‌شود.

نحوه عملکرد اکسپلویت

این نقص یک خطای کدنویسی واحد نیست؛ بلکه زنجیره‌ای از سه مشکل مجزا است که در کنار هم یک درِ پشتی (back door) باز می‌کنند.

  1. دی‌سریال‌سازی ناامن (Unsafe deserialization) – تابع کمکی safeUnserialize در این افزونه، به جای حذف اشیاء سریال‌شده، آن‌ها را به جایگاه‌نما (placeholder) تبدیل می‌کند و داده‌های اصلی شیء را دست‌نخورده باقی می‌گذارد.
  2. دی‌سریال‌سازی مجدد کورکورانه (Blind re-deserialization) – داده‌های استخراج‌شده از پایگاه داده بدون اعتبارسنجی مجدداً به تابع unserialize فرستاده می‌شوند، بنابراین اشیاء دست‌کاری‌شده می‌توانند دوباره احیا شوند.
  3. زنجیره گجت TCPDF (TCPDF gadget chain) – افزونه GiveWP کتابخانه تولید PDF به نام TCPDF را همراه خود دارد که حاوی زنجیره‌ای از کلاس‌هاست که می‌تواند پس از دی‌سریال‌سازی یک شیء مخرب، دستورات سیستم را فراخوانی کند.

یک مهاجم یک جریان چهار مرحله‌ای را دنبال می‌کند که نیازی به حساب کاربری قبلی ندارد:

  • ثبت‌نام (Registration) – با استفاده از اکشن user_register ، مهاجم حتی زمانی که ثبت‌نام در سایت غیرفعال است، یک کاربر وردپرس ایجاد می‌کند.
  • کاشت (Planting) – مهاجم یک پیلود (payload) سریال‌شده را در فیلد last_name پروفایل جدید ذخیره می‌کند.
  • مسموم‌سازی (Poisoning) – ارسال یک درخواست اهدا، افزونه را مجبور می‌کند آن پیلود را در جدول wp_give_sessions بنویسد.
  • اجرا (Execution) – هنگامی که هر صفحه عمومی در آینده نشست (session) را می‌خواند، شیء مخرب دی‌سریال می‌شود، زنجیره گجت TCPDF فعال می‌شود و دستور ارائه‌شده توسط مهاجم روی سرور اجرا می‌گردد.

وصله امنیتی

توسعه‌دهندگان GiveWP نسخه ۴.۱۶.۷.۲ را برای شکستن این زنجیره در هر مرحله منتشر کردند:

  • درخواست‌های اهدا که حاوی داده‌های سریال‌شده هستند، مستقیماً رد می‌شوند.
  • تمام توابع خواندن داده اکنون بررسی‌های سخت‌گیرانه‌ای روی نوع (type) و محتوا انجام می‌دهند.
  • زنجیره گجت TCPDF به‌طور صریح مسدود شده است تا از فراخوانی‌های غیرمجاز متدها جلوگیری شود.
  • فیلدهای متا، از جمله last_name ، پیش از ذخیره‌سازی پاک‌سازی (sanitize) می‌شوند.
  • یک مهاجرت پایگاه داده (database migration) به‌طور خودکار برای پاکسازی هرگونه پیلود مخرب موجود اجرا می‌شود.

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

چه کسانی در معرض خطر هستند

هر سایت وردپرسی که از نسخه ۴.۱۶.۷.۱ یا نسخه‌های قدیمی‌تر GiveWP استفاده می‌کند، بدون توجه به اینکه ثبت‌نام فعال است یا خیر، آسیب‌پذیر است. سازمان‌های غیرانتفاعی بزرگ، خیریه‌های کوچک و صفحات شخصی جمع‌آوری کمک‌های مالی همگی می‌توانند مورد نفوذ قرار گیرند. این حمله به پیکربندی خاصی از سرور بستگی ندارد؛ هر محیط PHP که از کتابخانه TCPDF همراه افزونه پشتیبانی می‌کند، مستعد حمله است.

دیدگاه مخالف

برخی از صاحبان سایت‌ها استدلال می‌کنند که این اکسپلویت مستلزم آن است که یک اهداکننده پرداختی را انجام دهد، که آن‌ها این را رویدادی با احتمال کم می‌دانند. این آسیب‌پذیری آن تصور را رد می‌کند: پیلود مخرب در مرحله اهدا ذخیره می‌شود، اما اجرا در هر بار بارگذاری صفحه بعدی رخ می‌دهد، حتی بدون تکمیل پرداخت. ماهیت بدون نیاز به احراز هویت و امتیاز ۱۰.۰ در CVSS، ریسک را بسیار بالاتر از آن می‌برد که بتوان آن را یک نگرانی تئوری تلقی کرد.

خلاصه کلام

CVE-2026-82222 در GiveWP نشان می‌دهد که چگونه مجموعه‌ای از میان‌برهای کدنویسی که در ظاهر بی‌خطر به نظر می‌رسند، می‌توانند با هم ترکیب شده و منجر به یک نقض امنیتی فاجعه‌بار شوند. اصلاحیه آماده است. اپراتورهای سایت باید فوراً به نسخه ۴.۱۶.۷.۲ ارتقا دهند، تأیید کنند که مهاجرت (migration) پیلودهای موجود را پاک کرده است و لاگ‌ها را برای یافتن نشانه‌های فعالیت‌های پس از اکسپلویت زیر نظر بگیرند. نادیده گرفتن این وصله می‌تواند حضور آنلاین یک سازمان خیریه و داده‌های اهداکنندگان آن را در معرض یک مهاجم با کنترل کامل بر سرور قرار دهد.