CVE-2021-20195

9.6 CRITICAL

📋 TL;DR

This vulnerability in Keycloak allows attackers to execute cross-site scripting (XSS) attacks that can lead to complete account takeover. The flaw exists in user-supplied data fields that aren't properly encoded, enabling JavaScript execution. Any Keycloak deployment before version 13.0.0 is affected.

💻 Affected Systems

Products:
  • Keycloak
Versions: All versions before 13.0.0
Operating Systems: All platforms running Keycloak
Default Config Vulnerable: ⚠️ Yes
Notes: All Keycloak deployments using affected versions are vulnerable regardless of configuration.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete account takeover leading to unauthorized access to all user accounts, data exfiltration, and potential system compromise.

🟠

Likely Case

Attackers steal user sessions and credentials, gaining unauthorized access to protected resources and sensitive data.

🟢

If Mitigated

Limited impact with proper input validation and output encoding, potentially only affecting individual user sessions.

🌐 Internet-Facing: HIGH - Web applications are directly accessible and XSS attacks can be delivered through normal user interactions.
🏢 Internal Only: MEDIUM - Internal users could still be targeted, but attack surface is reduced compared to internet-facing deployments.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

XSS vulnerabilities are commonly exploited, though specific exploit details aren't publicly documented for this CVE.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 13.0.0 or later

Vendor Advisory: https://bugzilla.redhat.com/show_bug.cgi?id=1919143

Restart Required: Yes

Instructions:

1. Backup your Keycloak configuration and database. 2. Download Keycloak 13.0.0 or later from the official website. 3. Stop the Keycloak service. 4. Replace the installation with the new version. 5. Restore configuration if needed. 6. Start the Keycloak service. 7. Verify the upgrade was successful.

🔧 Temporary Workarounds

Input Validation Filter

all

Implement custom input validation and output encoding for user-supplied data fields

Implement custom servlet filters or security headers like Content-Security-Policy

Web Application Firewall

all

Deploy WAF with XSS protection rules to filter malicious payloads

Configure WAF rules to block suspicious JavaScript patterns and encoded payloads

🧯 If You Can't Patch

  • Implement strict Content Security Policy (CSP) headers to prevent inline script execution
  • Deploy reverse proxy with XSS filtering capabilities and monitor for exploitation attempts

🔍 How to Verify

Check if Vulnerable:

Check Keycloak version via admin console or by examining the server startup logs for version information

Check Version:

Check Keycloak admin console or examine server logs for version string

Verify Fix Applied:

Confirm Keycloak version is 13.0.0 or later and test XSS payloads in user input fields to ensure they're properly sanitized

📡 Detection & Monitoring

Log Indicators:

  • Unusual JavaScript patterns in user input fields
  • Multiple failed login attempts from same session
  • Suspicious user agent strings containing script tags

Network Indicators:

  • HTTP requests containing script tags or JavaScript in parameters
  • Unusual traffic patterns to authentication endpoints

SIEM Query:

source="keycloak" AND (message="*script*" OR message="*javascript*" OR message="*onerror*" OR message="*onload*")

🔗 References

📤 Share & Export