یک آسیبپذیری امنیتی در افزونه WPGraphQL نسخه 2.19.0 شناسایی شده است که به کاربران با سطح دسترسی Contributor اجازه میدهد محدودیتهای دسترسی (Authorization) را دور زده و فرآیندهای نظارتی وردپرس را نادیده بگیرند.
تحلیل فنی آسیبپذیری
این نقص امنیتی در Mutation مربوط به updatePost رخ داده است. در حالت عادی، یک کاربر Contributor اجازه انتشار پستها (publish_posts) یا ویرایش پستهای منتشر شده (edit_published_posts) را ندارد و این موارد باید توسط مدیر یا ویراستار تایید شود. اما در نسخه مذکور، WPGraphQL تنها قابلیت کلی edit_posts را بررسی میکند و بررسیهای سطح شیء (Object-level check) وردپرس را نادیده میگیرد.
تاثیرات عملیاتی
- انتشار غیرمجاز: کاربر Contributor میتواند وضعیت یک پست پیشنویس (Draft) را مستقیماً به PUBLISH تغییر دهد، بدون اینکه دسترسی لازم برای انتشار داشته باشد.
- ویرایش محتوای منتشر شده: اگر یک ویراستار پستی از کاربر Contributor را منتشر کرده باشد، طبق قوانین وردپرس، نویسنده دیگر اجازه ویرایش آن را ندارد؛ اما از طریق این آسیبپذیری، کاربر میتواند عنوان و محتوای پست منتشر شده را تغییر دهد.
مقایسه با REST API
جالب اینجاست که WordPress REST API در برابر این درخواستها به درستی واکنش نشان داده و با خطاهای rest_cannot_publish و rest_cannot_edit دسترسی را مسدود میکند، اما WPGraphQL این درخواستها را پذیرفته و تغییرات را در دیتابیس اعمال میکند.
ارزیابی ریسک
این آسیبپذیری منجر به اجرای کد (RCE) یا دسترسی به دادههای حساس نمیشود و دسترسیهای مدیریتی را افزایش نمیدهد، اما Integrity (یکپارچگی) محتوای عمومی سایت را به شدت تحت تاثیر قرار میدهد. یک عامل تهدید (Threat Actor) که بتواند به حساب کاربری سطح Contributor دسترسی یابد، میتواند محتوای سایت را بدون تاییدیه تغییر داده یا مطالب غیرمجاز را منتشر کند.