Pular para o conteúdo
Skillpedia
Testes35 mil · #6236

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

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/testing-websocket-api-security/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/testing-websocket-api-security/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-security

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/testing-websocket-api-security/SKILL.md -o SKILL.md
Conteú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 websockets e asyncio
  • 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

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#6236
Licença
Apache-2.0
Atualizada em
31/08/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas