PoC files

4 files

File viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.

GitHub

Analysisdeepseek-v4-pro:cloud ·

Technical assessment

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.

Backdoor review

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.

ClassificationScanner
Model confidence98%
AuthenticationRequired
LanguagesPython
Target softwareKeycloak
Attack typesCross-Site Scripting (XSS)
Evidence & reasoningClassification basis · observed behavior · safety review
Technical evidence

Classification basis and observed behavior

Classification basis

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-215

Requirements

  • Administrative credentials with manage-client permission or access to client registration endpointsREADME.en.md:39-40
  • A running Keycloak instance accessible over the networkexploit.py:129-131

Observed behavior

  • Obtains an administrator access token via the password grant typeexploit.py:50-76
  • Creates a client with a mixed-case javascript: or data: redirect URIexploit.py:79-102
  • Checks the HTTP response status to determine if the URI was accepted (201) or rejected (400)exploit.py:187-218
  • On acceptance, retrieves the created client and verifies the crafted URI was storedexploit.py:105-119
  • Does not open a browser, navigate to the stored URI, or execute JavaScriptREADME.en.md:20exploit.py:5-6
Safety-review evidence

Behaviors behind the backdoor verdict

Observables

Api Endpoint
http://localhost:8180/realms/master/protocol/openid-connect/tokenThe script obtains an admin token from the local Keycloak instance.exploit.py:51
Api Endpoint
http://localhost:8180/admin/realms/master/clientsThe script creates a client with the crafted redirect URI on the local Keycloak instance.exploit.py:86
Payload
jaVaSCript:alert(document.domain)Mixed-case javascript: URI used to test the validation bypass; never executed by the PoC.exploit.py:21
Payload
DaTa:text/html;base64,PHNjcmlwdD5jb25maXJtKGRvY3VtZW50LmRvbWFpbik7PC9zY3JpcHQ+Mixed-case data: URI used to test the validation bypass; never executed by the PoC.exploit.py:22-25
Review boundaries

What the analysis did not establish

  • One file (docker-compose.yml) is omitted from the evidence; its content is not available for analysis.
  • The evidence does not include the execution output or network traffic, so the scanner's behavior is inferred from source code and documentation only.
  • One file (docker-compose.yml, 549 bytes) was present in the artifact but not included as readable text; its content was not reviewed.
  • Binary files were not present, so no binary analysis was performed.
Model interpretation

This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.

Docker lab environments

1
GitHub

docker-compose.yml

Created
Vuln labCVE-2026-9086Compose · images

1 Compose manifest · 2 services

Analysisdeepseek-v4-pro:cloud ·

Environment assessment

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-10

Lab assessment

Vulnerability lab

The 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-20
Lab shapeCompose · images
Services2
Compose manifests1
Dockerfiles0
Evidence & reasoningComponents · CVE assessment · exercise context · review boundaries
Components

Services and files described by the evidence

keycloak-vulnerable

vulnerable target

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-14

keycloak-fixed

patched control

Keycloak 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-14

exploit.py

vulnerability verification script

A 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-18
CVE assessment

How the supplied evidence relates each vulnerability

CVE-2026-9086

Supported 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-20
Exercise context

Requirements and sequence described by the evidence

Prerequisites

  • Docker and Docker Compose must be installed to start the Keycloak services.README.md:70-72
  • Python 3 must be available to run the exploit script.README.md:85-90
  • The Keycloak services must be fully started and listening before running the exploit.README.md:78-82

Evidence-described exercise path

  1. Start the vulnerable and fixed Keycloak instances using 'docker compose up -d'.README.md:70-72
  2. Wait for both instances to be ready by checking logs with 'docker compose logs -f' until 'Listening on' appears.README.md:78-82
  3. Run 'python3 exploit.py -t http://localhost:8180 -u admin -p admin --expect vulnerable' to verify the vulnerable instance accepts the mixed-case URI.README.md:85-90
  4. Run 'python3 exploit.py -t http://localhost:8181 -u admin -p admin --expect fixed' to verify the fixed instance rejects the mixed-case URI.README.md:95-100
  5. Optionally test the data: scheme using '--scheme data'.README.md:105-108
  6. Clean up with 'docker compose down -v'.README.md:110-112
Safety-review evidence

Behaviors behind the stored safety assessment

No harmful behavior observed

The 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-18
Model interpretation

This 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.

Linked vulnerabilities

1