testing-websocket-api-security
Ensina seu agente de IA a testar o código e achar erros antes dos usuários e proteger aplicações contra ataques.
O que ela faz
Esta ferramenta testa a segurança de APIs que usam o protocolo WebSocket. Ela verifica se há falhas na autenticação, se é possível sequestrar a conexão de um usuário (CSWSH), injetar mensagens maliciosas, ou causar uma negação de serviço (DoS) sobrecarregando o servidor com mensagens.
Quando usar
- ✓Ao testar APIs em tempo real que usam WebSocket.
- ✓Para verificar se um site malicioso pode se conectar à sua API e roubar dados (CSWSH).
- ✓Para garantir que a API valida corretamente as mensagens recebidas e não permite sobrecarga.
Exemplo do que pedir para a IA
“Verifique a segurança da API WebSocket em wss://api.exemplo.com/chat”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta usa programas como Burp Suite e wscat para enviar mensagens especialmente criadas para a API. Ela analisa as respostas para identificar se existem pontos fracos na segurança.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill testing-websocket-api-securityOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/testing-websocket-api-security/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Testando Segurança de APIs WebSocket
Quando Usar
- Avaliando APIs de comunicação em tempo real que usam os protocolos WebSocket (ws://) ou Secure WebSocket (wss://)
- Testando para Cross-Site WebSocket Hijacking (CSWSH), onde a página de um atacante se conecta a um servidor WebSocket legítimo
- Avaliando a aplicação de autenticação e autorização em conexões e mensagens WebSocket
- Testando a validação de entrada em payloads de mensagens WebSocket para vulnerabilidades de injeção
- Avaliando implementações WebSocket para negação de serviço através de inundação de mensagens ou frames de tamanho excessivo
Não use sem autorização por escrito. Testes em WebSocket podem interromper serviços em tempo real e afetar outros usuários conectados.
Pré-requisitos
- Autorização por escrito especificando o endpoint WebSocket e o escopo do teste
- Burp Suite Professional com capacidade de interceptação de WebSocket
- Python 3.10+ com as bibliotecas
websocketseasyncio - Ferramentas de desenvolvedor do navegador para observar handshakes e frames de WebSocket
- Ferramenta de linha de comando wscat para interação manual com WebSocket:
npm install -g wscat - Conhecimento do subprotocolo WebSocket em uso (JSON-RPC, STOMP, customizado)
Fluxo de Trabalho
Passo 1: Descoberta do Endpoint WebSocket e Análise do Handshake
import asyncio
import websockets
import json
import ssl
import time
WS_URL = "wss://target-api.example.com/ws"
AUTH_TOKEN = "Bearer <token>"
# Capture and analyze the WebSocket handshake
async def analyze_handshake():
"""Analyze WebSocket upgrade request and response headers."""
try:
async with websockets.connect(
WS_URL,
extra_headers={"Authorization": AUTH_TOKEN},
ssl=ssl.create_default_context()
) as ws:
print(f"Connected to: {WS_URL}")
print(f"Protocol: {ws.subprotocol}")
print(f"Extensions: {ws.extensions}")
# Send a test message
test_msg = json.dumps({"type": "ping"})
await ws.send(test_msg)
response = await asyncio.wait_for(ws.recv(), timeout=5)
print(f"Server response: {response}")
return True
except websockets.exceptions.InvalidStatusCode as e:
print(f"Connection rejected: {e.status_code}")
return False
except Exception as e:
print(f"Connection error: {e}")
return False
asyncio.run(analyze_handshake())
Passo 2: Teste de Autenticação e Autorização
async def test_ws_authentication():
"""Testa se o WebSocket requer autenticação."""
results = []
# Teste 1: Conectar sem nenhuma autenticação
try:
async with websockets.connect(WS_URL) as ws:
await ws.send(json.dumps({"type": "get_user_data"}))
resp = await asyncio.wait_for(ws.recv(), timeout=5)
results.append({
"test": "Sem autenticação",
"status": "VULNERÁVEL",
"response": resp[:200]
})
print(f"[VULN] WebSocket acessível sem autenticação")
except websockets.exceptions.InvalidStatusCode:
results.append({"test": "Sem autenticação", "status": "SEGURO"})
except Exception as e:
results.append({"test": "Sem autenticação", "status": f"ERRO: {e}"})
# Teste 2: Conectar com token inválido
try:
async with websockets.connect(WS_URL,
extra_headers={"Authorization": "Bearer invalid_token"}) as ws:
await ws.send(json.dumps({"type": "get_user_data"}))
resp = await asyncio.wait_for(ws.recv(), timeout=5)
results.append({
"test": "Token inválido",
"status": "VULNERÁVEL",
"response": resp[:200]
})
except websockets.exceptions.InvalidStatusCode:
results.append({"test": "Token inválido", "status": "SEGURO"})
except Exception as e:
results.append({"test": "Token inválido", "status": f"ERRO: {e}"})
# Teste 3: Conectar com token expirado
expired_token = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MDAwMDAwMDB9.expired"
try:
async with websockets.connect(WS_URL,
extra_headers={"Authorization": expired_token}) as ws:
await ws.send(json.dumps({"type": "get_user_data"}))
resp = await asyncio.wait_for(ws.recv(), timeout=5)
results.append({"test": "Token expirado", "status": "VULNERÁVEL"})
except (websockets.exceptions.InvalidStatusCode, Exception):
…
Perguntas frequentes
O que é WebSocket?
É uma tecnologia que permite comunicação bidirecional (de mão dupla) em tempo real entre um navegador e um servidor, como um chat.
O que é CSWSH?
É um tipo de ataque onde um site malicioso engana o navegador de um usuário para que ele se conecte à sua API WebSocket, permitindo que o atacante intercepte ou envie mensagens em nome do usuário.
Preciso de permissão para usar esta ferramenta?
Sim, é essencial ter autorização por escrito antes de testar qualquer API, pois os testes podem afetar o serviço para outros usuários.
Detalhes
Descrição original do autor
Tests WebSocket API implementations for missing upgrade-handshake authentication, Cross-Site WebSocket Hijacking (CSWSH), message injection, insufficient input validation, message-flooding DoS, and information leakage, using Burp Suite's WebSocket interception and the wscat CLI to craft malicious payloads. Use for real-time API penetration testing or CSWSH/authorization-bypass assessments on WebSo
Popularidade
- Estrelas no GitHub
- 35 mil
- Posição no ranking
- #6236
- Licença
- Apache-2.0
- Atualizada em
- 31/08/2026
Comentários
- …
Mais skills deste repositório
abusing-dpapi-for-credential-access
Dá ao seu agente de IA instruções prontas para uma tarefa específica, para ele fazer melhor e mais rápido.
mukul975/Anthropic-Cybersecurity-Skills
abusing-shadow-credentials-for-privesc
Ensina seu agente de IA a escrever textos claros e bem estruturados.
mukul975/Anthropic-Cybersecurity-Skills
achieving-cmmc-level-2-compliance
Ajuda seu agente a preparar um ambiente para conformidade com CMMC Nível 2. Ele implementa requisitos de segurança e gerencia a documentação necessária.
mukul975/Anthropic-Cybersecurity-Skills
acquiring-disk-image-with-dd-and-dcfldd
Ajuda seu agente a criar cópias exatas de discos rígidos. Isso é útil para garantir que nenhuma informação seja perdida ou alterada durante investigações.
mukul975/Anthropic-Cybersecurity-Skills
Skills parecidas
cpp-testing
Faz seu agente escrever e melhorar testes para código C++. Ajuda a configurar ferramentas de teste e a corrigir erros.
affaan-m/ECC
csharp-testing
Ajuda seu agente a criar testes para código C# e .NET. Ele usa as melhores práticas para garantir que os testes sejam eficientes e confiáveis.
affaan-m/ECC
django-tdd
Faz seu agente aplicar estratégias de teste para Django com pytest-django e TDD. É útil para escrever testes robustos e garantir a qualidade do código, especialmente para APIs DRF.
affaan-m/ECC