Writeup

WebSocket sem auth em trading AI expõe alpha signals e system prompt

Assessment em plataforma crypto AI (redacted.gg, fev/2026) encontrou CVSS 9.1 em WebSocket GraphQL sem autenticação — qualquer pessoa acessava feed de sinais pagos sem JWT — e CVSS 7.5 em system prompt leak que expunha 14k tokens de arquitetura proprietária de 9 agentes.

O endpoint `wss://api.[redacted].gg/graphql` aceitava `connection_init` sem JWT e tinha introspection ativa em prod, expondo entry prices, stops e take-profits de subscribers pagos em tempo real. O segundo finding foi ainda mais simples: flipping `stream:false` no POST para `/custom_run` fazia o servidor retornar o objeto interno completo do LLM — metodologia de trading, histórico de tool calls e arquitetura dos agentes. Dois bugs de infra clássica escondidos atrás do label AI.

Payload · grep · PoCcurl -X POST 'https://api.TARGET/custom_run' -H 'Authorization: Bearer <JWT>' -d '{"message":"test","stream":false}' | jq 'keys'

Contexto

OWASP LLM Top 10 2025 classifica system prompt leakage como LLM07 — mas na prática a maioria dos casos não é falha do modelo, é falta de strip server-side na response pipeline. O pattern de WebSocket GraphQL sem auth em real-time APIs não tem nada de novo; o que muda é que plataformas de crypto AI estão subindo em velocidade alta sem security review. Trading platforms com subscription paga são high-value target: impacto financeiro direto (front-running) facilita Critical sem precisar de RCE.

Mecânica técnica

Finding 1 (CVSS 7.5, CWE-200, OWASP LLM07:2025): o servidor não fazia strip do objeto interno de resposta do LLM antes de serializar pro cliente. Com `stream:false` no body do POST `/custom_run`, a API retornava o objeto raw — 14.000 tokens incluindo system prompt completo, arquitetura dos 9 agentes, métricas de token usage e histórico de conversas com tool arguments. Finding 2 (CVSS 9.1, CWE-306): o handshake GraphQL sobre WebSocket (`graphql-transport-ws`) não validava JWT no `connection_init`; qualquer cliente anônimo podia assinar subscriptions e fazer queries. Introspection ativa em prod permitia enumerar o schema completo sem credencial. Resultado: alpha feed de sinais proprietários (entry, stop, TP) acessível por qualquer pessoa com wscat.

Análise Hunterspay

O que a gente tira disso

Hunters focados em prompt injection estão deixando os bugs mais fáceis — e mais pagos — na mesa. Infra clássica (auth bypass, streaming flag, introspection) em wrapper de AI é área subexplorada porque o recon mental para em 'é um chatbot'. Plataformas crypto com produto de subscription paga têm business impact direto e documentável, o que traduz em severidade Critical sem precisar escalar pra RCE. O pivot óbvio aqui é usar o alpha feed leak para calcular impacto financeiro concreto — front-running mensurável vira argumento irrefutável pra payout máximo.

Como replicar em outros alvos

  • Enumerate endpoints de API real-time: `gau target.gg | grep -Ei '(api|ws|graphql)' | httpx -status-code -title`
  • Probe WebSocket sem auth: `wscat -c 'wss://api.target/graphql' --subprotocol graphql-transport-ws` → envie `connection_init` sem Authorization header
  • Introspection check em prod: `{ __schema { types { name fields { name } } } }` via WebSocket ou HTTP GraphQL
  • Flip streaming flag em toda chamada LLM proxy: `"stream": false` / `"streaming": false` — compare Content-Length e procure campos `system_prompt`, `internal_*`, `tool_calls` na response
  • Busque leakage em response diff: `curl ... stream:true | wc -c` vs `curl ... stream:false | wc -c` — diferença grande indica objeto interno não stripado
CVSS
9.1
Stack
graphql · websocket · llm-api · crypto-trading · ai-agents
Ler fonte original →
Aprenda com quem ensina

Quer virar hunter de verdade? Curso do Ofjaaah.

Metodologia de quem já reportou 3 dígitos de vulnerabilidades em HackerOne, Bugcrowd e Intigriti. Do recon ao report pago — sem teoria inútil.

Ver curso →
WhatsApp Telegram LinkedIn X