في عطلة نهاية الأسبوع يومي 17 و18 أكتوبر 2026، تمكّن أحدهم من الدخول إلى teamupdraft.com، موقع الشركة المطوّرة لإضافة UpdraftPlus. تقول TeamUpdraft إن قاعدة بيانات العملاء التي تعتقد أنه جرى الوصول إليها كانت تضم مفاتيح الاتصال بخدمة UpdraftCentral للإدارة عن بُعد. وخلال ساعات بدأ استخدام هذه المفاتيح لزرع إضافات تحتوي على أبواب خلفية في مواقع WordPress. وUpdraftPlus هي إضافة النسخ الاحتياطي المثبّتة على أكثر من 4 ملايين موقع نشط، لذلك فإن نسبة صغيرة من المواقع المتصلة تعني عددًا كبيرًا من الخوادم.
هذه الحادثة لا تشبه ثغرة إضافة عادية. الأوامر الخبيثة كانت موقّعة بمفاتيح حقيقية، فقبلتها الإضافة على أنها مشروعة. تشير Patchstack إلى أن أحدث الإصدارات في ذلك الوقت تأثرت تمامًا مثل الإصدارات القديمة، وأضافت TeamUpdraft في 29 أكتوبر أن بعض المواقع التي أصيبت في الموجة الأولى بدت سليمة، ثم ظهر فيها حساب مدير جديد بعد أيام. تحديث الإضافة ضروري، لكنه ليس نهاية العمل.
ما الذي حدث، بالترتيب
- 18 أكتوبر، الساعة 15:32: أول تثبيت لباب خلفي في بيانات القياس لدى Patchstack. وآخر تثبيت سجّلته في تلك الموجة كان الساعة 09:23 يوم 19 أكتوبر.
- 19 أكتوبر: نشرت Nethemba، التي رصدت الهجوم على مواقعها، أول تحليل تقني. وأطلقت Wordfence قاعدة جدار حماية تحجب أوامر UpdraftCentral على الإصدارات المتأثرة، وأتاحتها للمستخدمين المجانيين خلال ساعات بدلًا من التأخير المعتاد البالغ 30 يومًا.
- 19 أكتوبر: صدر الإصدار 1.26.12 لإلغاء المفاتيح السحابية التي أُنشئت قبل الحادثة، ثم تبعه 1.26.13 في اليوم نفسه لأن الإلغاء في 1.26.12 لم يُطبَّق بشكل صحيح. إصدارات Premium تحمل الرقمين 2.26.12 و2.26.13.
- 21 أكتوبر: أفادت Nethemba بأن المهاجم أرسل أوامر UpdraftCentral جديدة إلى موقعين من مواقعها بعد صدور 1.26.13. وصحّحت الشركة لاحقًا موعد الإلغاء إلى الساعة 12:07 بتوقيت UTC يوم 18 أكتوبر، أي أن المفاتيح التي أُنشئت بعد تلك اللحظة لا تُلغى تلقائيًا.
- 26 أكتوبر: توقف UpdraftPlus 1.26.14 عن إضافة المواقع إلى UpdraftCentral افتراضيًا عند ربط حساب TeamUpdraft.
- 29 أكتوبر: كتبت TeamUpdraft أن "إضافة ثبّتها المهاجم تُركت في مكانها واستُخدمت لاحقًا لإنشاء حساب مدير جديد، بعد أن كان الموقع قد فُصل بالفعل عن UpdraftCentral".
لماذا تشمل القائمة مواقع لم تستخدم UpdraftCentral قط
عميل UpdraftCentral مضمّن في كل نسخة من UpdraftPlus، المجانية والمدفوعة، ويبقى خاملًا حتى يحصل الموقع على مفتاح. وبحسب Patchstack، كانت شاشة ربط حساب TeamUpdraft.com تحتوي على مربع اختيار محدَّد افتراضيًا يضيف الموقع إلى UpdraftCentral في الوقت نفسه. كثيرون ربطوا حسابًا من أجل UpdraftVault أو الترخيص، فأدخلوا الموقع في الإدارة عن بُعد دون أن ينتبهوا. ووجدت Patchstack أيضًا مفاتيح صدرت في نوفمبر 2025 وكانت لا تزال تعمل في أكتوبر 2026.
الباب الخلفي نفسه مصمَّم للإفلات من الفحوص المعتادة. تصف Patchstack كيف ينشئ حسابًا يظهر بدور محرّر (Editor)، ثم يمنحه بهدوء صلاحيتَي manage_options وinstall_plugins. إذا راجعت قائمة المديرين فقط فلن تراه. ويجري تسجيل الدخول بضبط ملف تعريف الارتباط مباشرة، فلا تعمل المصادقة الثنائية ولا إضافات تقييد محاولات الدخول. ويبقى الحساب حتى بعد حذف الإضافة.
وهناك مشكلة أقدم في القناة نفسها. في يونيو 2026 أصلحت الشركة الثغرة CVE-2026-10795 في الإصدارين 1.26.5 و2.26.5، وهي ثغرة كانت تسمح بتزوير أوامر UpdraftCentral دون أي مفتاح. تقول Patchstack إن محاولات استغلالها ما زالت مستمرة، لذا فإن الموقع الذي يعمل بإصدار أقدم يواجه المشكلتين معًا.
الخطوة 1: اعرف أي المواقع تحمل مفتاحًا
شغّل هذه الأوامر من جذر WordPress في كل موقع. الخياران --skip-plugins --skip-themes مهمّان: تنبّه Nethemba إلى أن بعض عيّنات الباب الخلفي تسبب خطأً قاتلًا وقد تُسقط WP-CLI إذا حمّلها.
wp plugin list --fields=name,version,update --skip-plugins --skip-themes
wp option get updraft_central_localkeys --format=json --skip-plugins --skip-themes
إذا كان الخيار موجودًا ويحتوي على مدخل واحد أو أكثر، فالموقع يقبل الأوامر عن بُعد. توضح Wordfence أن المصفوفة الفارغة تعني عدم وجود اتصال، وأن غياب المفتاح اليوم لا يثبت أن شيئًا لم يصل من قبل. لا تنشر قيمة هذا الخيار في أي مكان عام، فهي تحتوي على مواد المفتاح.
بعد ذلك قارن ملفات الإضافات بنسخ wordpress.org:
wp plugin verify-checksums --all --skip-plugins --skip-themes
هذا الأمر يتحقق فقط من الإضافات المستضافة على wordpress.org. الإضافات المدفوعة والمخصصة تُتخطّى مع تحذير، وكذلك أي باب خلفي، لأنها كلها بلا قيم تحقق منشورة. اقرأ قائمة المتخطّاة سطرًا سطرًا. كل اسم فيها يجب أن يكون شيئًا ثبّتّه عن قصد.
الخطوة 2: الفحص نفسه على مواقع كثيرة تعمل في Docker
صورة wordpress الرسمية لا تتضمن WP-CLI، لكن نسخة wordpress:cli تستطيع الانضمام إلى حاوية الموقع العاملة. تقول وثائق Docker إنها تحتاج إلى ملفات الموقع وشبكته ومتغيرات البيئة WORDPRESS_* نفسها، لأن wp-config.php في الصورة يقرأها مباشرة. وتحذّر أيضًا من أن صورة CLI تعمل بالمعرّف UID 82 بينما تستخدم صور WordPress المبنية على Debian المعرّف UID 33، لذا يلزم غالبًا --user 33:33. هذه الحلقة تجمع ذلك كله لكل حاوية WordPress عاملة على الخادم:
for c in $(docker ps --format '{{.Names}} {{.Image}}' | awk '$2 ~ /wordpress/ && $2 !~ /cli/ {print $1}'); do
env=$(mktemp)
docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' "$c" | grep '^WORDPRESS_' > "$env"
echo "== $c"
docker run --rm --volumes-from "$c" --network "container:$c" \
--env-file "$env" --user 33:33 -e HOME=/tmp wordpress:cli \
sh -c 'wp plugin get updraftplus --field=version --skip-plugins --skip-themes;
wp option get updraft_central_localkeys --format=json --skip-plugins --skip-themes'
rm -f "$env"
done
ملف البيئة المؤقت يحتوي على كلمة مرور قاعدة البيانات، ولهذا تحذفه الحلقة فورًا. إذا كانت مواقعك تقرأ الأسرار من متغيرات *_FILE، فاربط ملفات الأسرار تلك بحاوية CLI أيضًا. استبدل الأوامر الداخلية بأي فحص في هذا المقال لتشغيله على جميع المواقع.
الخطوة 3: اقطع القناة أولًا، ثم حدّث
حذف المفتاح يعمل على أي إصدار ويوقف الأوامر الجديدة فورًا:
wp option delete updraft_central_localkeys --skip-plugins --skip-themes
wp option delete updraft_migrator_localkeys --skip-plugins --skip-themes
السطر الثاني يحذف مفاتيح Migrator، وهو ما توصي به Nethemba ما لم تكن في منتصف عملية نقل. إزالة الموقع من لوحة UpdraftCentral لا تكفي، لأن المفتاح المهم موجود على الموقع نفسه. وتستمر النسخ الاحتياطية بعد حذف المفتاح.
ثم حدّث. للنسخة المجانية يكفي wp plugin update updraftplus. أما Premium فتُحدَّث عبر أداة التحديث المرتبطة بالترخيص، وهي لا تُحمَّل مع --skip-plugins، لذا حدّثها من wp-admin أو ارفع الحزمة من حسابك في TeamUpdraft بعد أن يجتاز الموقع الفحوص أدناه. استهدف 1.26.14 أو 2.26.14، ولا تتوقف أبدًا عند 1.26.12. إذا كان ملف Dockerfile لديك ينسخ الإضافات داخل الصورة بدلًا من إبقاء wp-content على volume، فغيّر الإصدار هناك وأعد بناء الصورة، وإلا سيعيد النشر التالي الإضافة القديمة.
الخطوة 4: ابحث عمّا تركه المهاجم
ابدأ بالملفات. بعض العيّنات تخفي نفسها من شاشة إضافات WordPress، لذا تنصح TeamUpdraft بفحص المجلدين wp-content/plugins/ وwp-content/mu-plugins/ مباشرة. أفضل مؤشر على مستوى الملفات لدى Patchstack هو سطر وصف تشترك فيه العيّنات:
grep -rl "Small maintenance toolkit: keeps option storage tidy\." wp-content/plugins/ wp-content/mu-plugins/
لا تعتمد على هذا النص وحده. وثّقت Nethemba نسخًا لاحقة بأوصاف أخرى، منها نسخة من ملف واحد وأخرى باسم site-health-cache تحذف نفسها من قائمة الإضافات. ويتضمن مقالها الأسماء ومفاتيح الخيارات وقيم SHA-256، إضافة إلى أداة فحص للقراءة فقط تُشغَّل بالأمر wp eval-file check-updraftcentral.php --skip-plugins --skip-themes.
بعدها انتقل إلى الحسابات. افحص حسب الصلاحية لا حسب اسم الدور. استعلام Patchstack يفترض البادئة الافتراضية wp_، والأمر wp db prefix يعرض بادئتك:
wp db query "SELECT u.user_login,u.user_email FROM wp_users u
JOIN wp_usermeta m ON m.user_id=u.ID
WHERE m.meta_key='wp_capabilities'
AND m.meta_value LIKE '%editor%' AND m.meta_value LIKE '%manage_options%'"
wp option list --search='*_sync_token' --fields=option_name --skip-plugins --skip-themes
أسماء المستخدمين المؤكدة حتى الآن تتبع نمط كلمتين ورقمين، مثل data-ops43، مع عنوان بريد على @example.org واسم العرض "Site Tools". وتضيف Nethemba نوعًا ثانيًا يستخدم @example.com وأسماء مثل "System Team".
وأخيرًا السجلات. ظهور معامل التفعيل يعني أن الباب الخلفي استُخدم فعلًا، لا أنه ثُبّت فقط. نسخ Apache من صورة WordPress الرسمية ترسل سجلاتها إلى stdout، لذا يمكنك البحث فيها على Docker باستخدام docker logs:
docker logs mysite 2>&1 | grep -E '[?&]_[A-Za-z0-9]{4,10}=[A-Za-z0-9_]{32}([&"[:space:]]|$)'
تذكر Patchstack العنوانين 43.250.53.42 و2a09:bac5:4e21:2e3c::49b:9 كمصادر للهجوم، لكن المهاجم بدّل بنيته التحتية خلال يوم واحد. تعامل مع عناوين IP كعبارة بحث، لا كقائمة حظر تحميك.
الخطوة 5: التنظيف وتغيير بيانات الاعتماد
إذا وجدت بابًا خلفيًا فالترتيب مهم. احذف مفتاح UpdraftCentral أولًا، وإلا قد يرسل المهاجم بديلًا. ثم عطّل الإضافة وانقل مجلدها خارج جذر الويب بدلًا من حذفها من wp-admin، لأن Patchstack وجدت أن روتين إلغاء التثبيت فيها يمحو آثارها. وتحذّر Patchstack أيضًا من إصلاح الخطأ القاتل في العيّنات المعطوبة، لأن ذلك يشغّل الباب الخلفي. احذف خيار _sync_token والحساب الدخيل.
ثم غيّر بيانات الاعتماد، سواء وجدت شيئًا على ذلك الموقع أم لا:
wp config shuffle-saltsلإبطال كل ملفات تعريف الارتباط الخاصة بتسجيل الدخول، بما فيها ملف المهاجم الدائم.- كلمات مرور جديدة لكل المديرين والمحررين.
- كلمة مرور حساب teamupdraft.com وإعدادات المصادقة الثنائية فيه، وهو ما طلبته TeamUpdraft من كل أصحاب الحسابات.
- بيانات اعتماد التخزين البعيد. تنقل Wordfence نصيحة TeamUpdraft بإعادة تفويض التخزين البعيد وتغيير مفاتيح الوصول إليه في أي موقع جرى الوصول إليه عبر UpdraftCentral. وتضيف Nethemba أن نسخة Premium قد تحفظ كلمة مرور الحساب نصًا صريحًا في الخيار
updraftplus-addons_options. - مواقع UpdraftVault تحتاج إلى إعادة الربط من الإعدادات، ثم أخذ نسخة احتياطية تجريبية.
إذا كان الحساب موجودًا أو ظهر معامل التفعيل في سجلاتك، فاعتبر الموقع مخترقًا بالكامل. استعد نسخة احتياطية أُخذت قبل 17 أكتوبر، وغيّر كلمة مرور قاعدة البيانات والأسرار في wp-config.php، ولا تُعد ربط أي شيء إلا بعد ذلك. شرحنا لماذا يجب أن تكون النسخ الاحتياطية بعيدة عن متناول المهاجم في مقال برنامج الفدية SafePay، ولماذا لا يكفي التصحيح وحده لمحو الاختراق في مقال NetScaler.
رأينا
مفتاح الإدارة عن بُعد يمنح حامله القدرة على تثبيت شيفرة في موقعك دون أن يوافق أحد على كل أمر. هذا يستحق العناية نفسها التي تمنحها لمفتاح SSH: أصدره عن قصد، وامنحه لحساب لا يملك install_plugins متى أمكن (رأت Patchstack أن هذا التفصيل وحده أوقف الهجوم على أحد المواقع التي حُلّلت)، واحذفه عندما لا يستخدمه أحد. في معظم المواقع التي تستخدم الإضافة للنسخ الاحتياطي فقط، العدد الصحيح لمفاتيح UpdraftCentral هو صفر. وإذا كنت تشغّل WordPress في حاويات، فافحص PHP الذي يعمل تحته ما دمت هناك؛ دليل PHP2Shell يشرح الطريقة.
الأسئلة الشائعة
هل هذه ثغرة في UpdraftPlus؟
ليس بالمعنى المعتاد. الأوامر كانت موقّعة بمفاتيح حقيقية سُرقت من جهة الشركة، فاجتازت فحوص الإضافة. تصنّفها Patchstack على أنها اختراق مفاتيح دون رقم CVE. أما CVE-2026-10795 فهي ثغرة حقيقية منفصلة في القناة نفسها، أُصلحت في 1.26.5 و2.26.5.
أستخدم النسخة المجانية للنسخ الاحتياطي فقط. هل عليّ فعل شيء؟
تقول TeamUpdraft إن المستخدمين المجانيين الذين لا يملكون حسابًا على teamupdraft.com لا يحتاجون إلى أي إجراء بسبب هذه الحادثة. إذا سبق أن ربطت الإضافة بحساب TeamUpdraft، فتحقق من وجود مفتاح بالأمر wp option get updraft_central_localkeys، لأن مربع الاختيار المحدَّد افتراضيًا ربما سجّل الموقع.
هل يكفي التحديث إلى 1.26.13 أو أحدث؟
لا. التحديث يلغي المفاتيح التي أُنشئت قبل الساعة 12:07 بتوقيت UTC يوم 18 أكتوبر، لكنه لا يزيل الإضافات أو الحسابات التي زرعها المهاجم مسبقًا. ورصدت TeamUpdraft حالات أنشأت فيها هذه البقايا مديرين جددًا بعد فصل الاتصال.
هل سيعطّل حذف مفتاح UpdraftCentral نسخي الاحتياطية؟
لا. تقول Patchstack إن النسخ الاحتياطي يستمر بعد حذف المفتاح وإن الإدارة عن بُعد وحدها تتوقف. وتقول Wordfence الشيء نفسه عن قاعدة جدار الحماية لديها: النسخ الاحتياطي العادي والتخزين البعيد لدى أطراف ثالثة لا يتأثران.
هل يمكنني الاكتفاء بحظر عناوين IP الخاصة بالمهاجم؟
لن يصمد ذلك. رأت Patchstack أن المهاجم بدّل بنيته التحتية خلال يوم واحد، وسجّلت Nethemba محاولات تفعيل من عدة نطاقات عناوين أخرى يوم 20 أكتوبر.
المصادر: إشعار الحادثة من TeamUpdraft (محدَّث في 29 أكتوبر 2026)، Patchstack، تنبيه Wordfence، تحليل Nethemba (محدَّث في 26 أكتوبر 2026)، سجل تغييرات UpdraftPlus على wordpress.org ووثائق صورة WordPress الرسمية على Docker.



