keycloak-vulnerable
Keycloak 26.6.3 instance started in development mode with default admin credentials. It exposes port 8080 on host port 8180. This service is the vulnerable target for the CVE-2026-9086 PoC.
docker-compose.yml:2-10README.md:11-14File viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.
A Python script that authenticates to a Keycloak Admin REST API, creates a client with a mixed-case prohibited redirect URI, and checks whether the server accepts (vulnerable) or rejects (fixed) the URI. It does not open the URI or execute JavaScript.
No backdoor observed in reviewed code
The PoC demonstrates a known CVE-2026-9086 XSS vulnerability by registering a mixed-case redirect URI via the Keycloak Admin REST API and checking the response. The Python script (exploit.py) only performs API calls to authenticate, create a client, and verify the stored URI; it does not open the URI, execute JavaScript, establish persistence, or contact any external system. The README files explicitly state the PoC never opens the registered URI or executes JavaScript. No concealed, deceptive, or operator-directed harmful behavior is present in the reviewed text.
The artifact's primary operation is to check whether a Keycloak instance accepts a mixed-case prohibited URI, reporting 'VULNERABLE' or 'FIXED' based on the server response. It does not deliver a payload to a victim, trigger XSS execution, or exploit the vulnerability for impact. The README explicitly states 'The PoC never opens the registered URI or executes JavaScript' and the script docstring confirms it 'never opens the URI or executes its contents'. This is consistent with a scanner that validates exposure rather than an exploit that exercises the vulnerability.
README.en.md:20exploit.py:5-6exploit.py:203-215README.en.md:39-40exploit.py:129-131exploit.py:50-76exploit.py:79-102exploit.py:187-218exploit.py:105-119README.en.md:20exploit.py:5-6exploit.py:51exploit.py:86exploit.py:21exploit.py:22-25This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
A Docker Compose environment that starts two Keycloak instances (vulnerable 26.6.3 and fixed 26.6.4) for demonstrating CVE-2026-9086, a URI scheme validation bypass leading to XSS. The environment is a vulnerability lab.
docker-compose.yml:1-20README.md:1-10The README explicitly states this is a Proof of Concept for CVE-2026-9086, a Keycloak XSS vulnerability. The Docker Compose file defines a vulnerable and a fixed Keycloak service, and the exploit script tests the vulnerability by attempting to register a malicious URI.
README.md:1-10docker-compose.yml:1-20Keycloak 26.6.3 instance started in development mode with default admin credentials. It exposes port 8080 on host port 8180. This service is the vulnerable target for the CVE-2026-9086 PoC.
docker-compose.yml:2-10README.md:11-14Keycloak 26.6.4 instance started in development mode with default admin credentials. It exposes port 8080 on host port 8181. This service is the fixed version used to confirm the vulnerability is patched.
docker-compose.yml:12-20README.md:11-14A Python script that authenticates to the Keycloak Admin REST API, creates a client with a mixed-case javascript: or data: redirect URI, and verifies whether the URI is accepted (vulnerable) or rejected with HTTP 400 (fixed). It does not open the URI or execute JavaScript.
exploit.py:1-222README.md:15-18Supported by supplied evidence
The README describes the vulnerability as a URI scheme validation bypass in Keycloak due to case-sensitive comparison. The exploit script tests this by sending a mixed-case javascript: or data: URI to the Admin REST API. The Docker Compose file provides the exact vulnerable (26.6.3) and fixed (26.6.4) versions mentioned in the README.
README.md:1-10README.md:40-60exploit.py:1-222docker-compose.yml:2-20README.md:70-72README.md:85-90README.md:78-82README.md:70-72README.md:78-82README.md:85-90README.md:95-100README.md:105-108README.md:110-112The exploit script only interacts with the local Keycloak Admin REST API to create a client and verify URI storage. It does not open a browser, execute JavaScript, access external systems, or perform any destructive actions. The Docker Compose file does not mount sensitive host paths, run in privileged mode, or expose ports beyond the documented lab targets. All behavior is consistent with a contained vulnerability demonstration.
exploit.py:1-222docker-compose.yml:1-20README.md:15-18This review is limited to the supplied lab evidence packet. It does not assert that the environment runs, reproduces a vulnerability, or is safe to execute. Contract: eip-docker-lab-analysis-v1.