WordPress آسیب‌پذیری XSS پیش از احراز هویت را برطرف کرد؛ پَچ را هرچه سریع‌تر نصب کنید

WordPress یک آسیب‌پذیری امنیتی شدید از نوع XSS بازتابی پیش از احراز هویت را در صفحه ورود خود برطرف کرده است؛ نقصی که تمام نسخه‌های این سیستم مدیریت محتوا را تحت تأثیر قرار می‌دهد. پژوهشگران pwn.ai نشان داده‌اند مهاجم می‌تواند این نقص را در شرایطی خاص با زنجیره‌ای از حملات به اجرای کد PHP روی سرور منجر کند.

WordPress یک آسیب‌پذیری Cross-Site Scripting (XSS) بازتابی پیش از احراز هویت را در صفحه ورود خود برطرف کرده است که تمامی نسخه‌های این سیستم مدیریت محتوا را تحت تأثیر قرار می‌دهد. پژوهشگران pwn.ai نشان داده‌اند که این نقص می‌تواند در صورت تعامل یک مدیر واردشده به سیستم با صفحه‌ای تحت کنترل مهاجم، به اجرای کد PHP روی سرور منجر شود.

این آسیب‌پذیری با شناسه CVE-2026-64638 و امتیاز 8.9 در CVSS، در رده آسیب‌پذیری‌های با شدت بالا قرار دارد و برای سوءاستفاده از آن نیازی به هیچ‌گونه سطح دسترسی مهاجم نیست. به گفته pwn.ai که این نقص را کشف کرده و جزئیات فنی آن را در اختیار The Hacker News قرار داده است، XSS موجود در صفحه ورود به احراز هویت نیاز ندارد. زمانی که یک نام کاربری دست‌کاری‌شده به صفحه خطای ورود ناموفق برسد، JavaScript حاصل در مرورگر بازدیدکننده اجرا می‌شود و برای اجرای آن نیازی به تعامل دیگری در همان صفحه نیست.

با این حال، مسیر منتهی به اجرای کد نیازمند آن است که قربانی از قبل با حساب کاربری Administrator وارد WordPress شده باشد و به‌صورت صریح با صفحه‌ای تحت کنترل مهاجم تعامل کند. در نمونه‌ای که pwn.ai ارائه کرده، این تعامل تنها شامل یک کلیک معمولی است.

پژوهشگران به The Hacker News گفته‌اند این حمله روی نصب‌های پیش‌فرض WordPress نیز قابل اجراست و به تنظیمات غیرمعمول میزبانی یا استقرار نیاز ندارد. آنها همچنین چندین مسیر برای تبدیل XSS به اجرای کد شناسایی کرده‌اند؛ از جمله روش‌هایی که امکان نصب یک افزونه یا بارگذاری یک فایل ZIP دلخواه را فراهم می‌کنند.

با این حال، توصیه رسمی WordPress دیدگاه محتاطانه‌تری نسبت به امکان بهره‌برداری دارد و تأکید می‌کند که تبدیل این آسیب‌پذیری به اجرای کد از راه دور (RCE) به شرایطی خارج از کنترل مهاجم وابسته است و مستلزم موفقیت در مهندسی اجتماعی و تعامل صریح قربانی خواهد بود.

این مشکل در 6 اوت و با انتشار WordPress 7.0.3 برطرف شد و اصلاحات آن به شاخه 4.7 نیز بازگردانده شده است. WordPress به کاربران توصیه می‌کند فوراً سیستم‌های خود را به‌روزرسانی کنند. سایت‌هایی که از به‌روزرسانی خودکار پس‌زمینه پشتیبانی می‌کنند، باید این نسخه امنیتی را به‌صورت خودکار دریافت کنند. نسخه‌های قدیمی‌تر از 4.7 همچنان تحت تأثیر این آسیب‌پذیری قرار دارند، اما خارج از محدوده فعلی پشتیبانی WordPress برای بازگرداندن وصله‌های امنیتی هستند.

پژوهشگران این زنجیره حمله را XSS2Shell نامیده‌اند و می‌گویند سامانه خودکار آنها پس از دریافت پژوهش Same Origin Method Execution (SOME) اثر Paulos Yibelo در سال 2022 به‌عنوان نقطه شروع، توانسته این زنجیره آسیب‌پذیری را کشف و بازتولید کند.

به گفته این شرکت، این فرایند تقریباً چهار روز و با استفاده از مدل‌های متن‌باز و یک گردش‌کار چندعاملی (Multi-Agent) طول کشیده است. این زنجیره در 26 ژوئیه بازتولید شد و روز بعد به WordPress گزارش شد.

ریشه این آسیب‌پذیری به نحوه پردازش نام کاربری در یک ورود ناموفق بازمی‌گردد. به گفته پژوهشگران، این مقدار ابتدا از sanitize_user() و سپس wp_strip_all_tags() عبور می‌کند؛ تابعی که به strip_tags() در PHP متکی است. یک رشته شبیه تگ که پس از کاراکتر < شامل فاصله باشد، می‌تواند از این Parser عبور کرده و به‌صورت متن باقی بماند. WordPress در مرحله‌ای دیگر همین مقدار را از wp_kses_post() عبور می‌دهد؛ تابعی که Parser جداگانه‌ای دارد و همان ورودی را به‌عنوان HTML مجاز تفسیر می‌کند. نتیجه این فرایند، ایجاد عناصر DOM فعال و تحت کنترل مهاجم در صفحه خطای ورود است.

این عناصر سپس با فایل JavaScript داخلی WordPress موسوم به user-profile.js تعامل می‌کنند؛ اسکریپتی که برای مدیریت پروفایل کاربران استفاده می‌شود و به دلیل پشتیبانی صفحه ورود از قابلیت بازنشانی رمز عبور، در همان صفحه نیز بارگذاری می‌شود.

برخی عناصر پروفایلی که این اسکریپت انتظار دارد در صفحه ورود وجود داشته باشند، در اینجا وجود ندارند. دو ورودی مفقود به undefined تبدیل می‌شوند و در نتیجه یک بررسی برابری می‌تواند با موفقیت عبور کند. از سوی دیگر، متغیر ajaxurl که در حالت عادی تعریف‌نشده است، می‌تواند با یک عنصر DOM تزریق‌شده جایگزین شود. این وضعیت باعث می‌شود JavaScript داخلی WordPress به سمت یک درخواست REST با مبدأ یکسان و انتخاب‌شده توسط مهاجم هدایت شود.

پژوهشگران از قابلیت REST JSONP در WordPress استفاده کرده‌اند تا این درخواست را به اجرای JavaScript در مبدأ سایت تبدیل کنند. در استقرارهایی که درخواست‌های REST ناشناس با کد HTTP 401 پاسخ داده می‌شوند، پارامتر _envelope=1 می‌تواند این پاسخ خطا را در یک پاسخ بیرونی با کد HTTP 200 قرار دهد و به jQuery اجازه دهد پردازش پاسخ را همچنان به‌عنوان اسکریپت ادامه دهد.

پژوهشگران همچنین در آزمایش‌های خود دریافتند که یک Content Security Policy مبتنی بر nonce و با استفاده از strict-dynamic نیز مانع مسیر حمله نمایش‌داده‌شده نمی‌شود.

مسیر تبدیل XSS به اجرای کد PHP بر تکنیک SOME که پیش‌تر توسط Yibelo معرفی شده بود متکی است؛ روشی که از یک زنجیره ویژگی JSONP مجاز برای فراخوانی یک متد در پنجره مرورگر دیگری استفاده می‌کند.

یکی از مسیرهایی که pwn.ai نمایش داده، از XSS موجود در مبدأ WordPress برای فراخوانی کنترل بومی تأیید Application Password در نشست یک Administrator واردشده استفاده می‌کند. WordPress سپس یک اعتبارنامه API ایجاد کرده و آن را به یک success_url از طریق HTTPS که توسط مهاجم انتخاب شده است، هدایت می‌کند.

Application Passwordها اعتبارنامه‌هایی قابل لغو هستند که برای دسترسی API طراحی شده‌اند؛ بنابراین این مسیر نیازی به سرقت رمز عبور اصلی مدیر ندارد. پژوهشگران از این اعتبارنامه برای دسترسی احراز‌شده به REST API و انتشار صفحه‌ای در WordPress حاوی JavaScript با مبدأ یکسان استفاده کردند. هنگامی که نشست مدیر که همچنان معتبر بود این صفحه را باز کرد، اسکریپت موجود در آن nonce مربوط به بارگذاری افزونه WordPress را دریافت و یک فایل ZIP تحت کنترل مهاجم را بارگذاری کرد. پس از استخراج افزونه، امکان درخواست مستقیم کد PHP فراهم شد. برای این کار، افزونه حتی نیازی به فعال‌سازی نداشت.

شواهد مربوط به محیط عملیاتی که در اختیار The Hacker News قرار گرفته، تنها تا مرحله XSS پیش می‌رود. پژوهشگران به‌صورت جداگانه XSS صفحه ورود، بدون نیاز به کوکی، را روی دو نمونه WordPress 7.0.2 در پروفایل‌های تازه Chrome و بدون هیچ کوکی یا اعتبارنامه WordPress بازتولید کردند.

آنها روی این سیستم‌ها تلاش نکردند Application Password ایجاد کنند، فایلی بارگذاری کنند، ماندگاری ایجاد کنند یا کد PHP اجرا کنند. زنجیره کامل منتهی به اجرای PHP نیز به‌صورت جداگانه روی یک نصب محلی و پاک WordPress 7.0.2 نمایش داده شد.

پژوهشگران تأکید کرده‌اند که اقدامات شناخته‌شده برای سخت‌سازی WordPress نباید به‌عنوان راهکاری کامل برای رفع XSS در نظر گرفته شوند و نصب به‌روزرسانی امنیتی برای رفع مشکل ضروری است.

در صورت موفقیت در اجرای کد PHP، مهاجم می‌تواند به اطلاعات اتصال پایگاه داده WordPress در فایل wp-config.php دسترسی پیدا کند، حساب‌های Administrator دائمی ایجاد کند و محتوای سایت را تغییر دهد. همچنین امکان دسترسی به فایل‌ها و اسراری که Worker مربوط به PHP قادر به خواندن آنهاست وجود خواهد داشت و مهاجم می‌تواند فرمان‌های سیستم‌عامل را با سطح دسترسی همان Worker اجرا کند.

WordPress از تیم pwn.ai به دلیل کشف و افشای مسئولانه این آسیب‌پذیری قدردانی کرده است. بر اساس اطلاعات منتشرشده تا 7 اوت، پروژه WordPress هنوز هیچ موردی از بهره‌برداری از این آسیب‌پذیری در حملات واقعی (In-the-Wild) گزارش نکرده است.