
Uma ferramenta CLI leve para detectar e explorar sistematicamente condições de corrida em aplicações web, APIs e serviços modernos.
As condições de corrida representam uma das vulnerabilidades de segurança de maior impacto em aplicações modernas, mas continuam mal cobertas por scanners automatizados. Enquanto ferramentas como Nuclei, ffuf e sqlmap se destacam na descoberta de vulnerabilidades estáticas, elas são fundamentalmente cegas para problemas baseados em concorrência.
Os pentesters de hoje enfrentam uma escolha: escrever manualmente scripts descartáveis para cada teste, ou pular completamente os testes de condição de corrida. Nenhuma das opções é escalável ou profissional.
RatRace resolve isso fornecendo um fluxo de trabalho polido e repetível para testes de condição de corrida — transformando o que antes era script ad-hoc em um processo sistemático que se integra a pipelines CI/CD e gera relatórios profissionais.
Vulnerabilidades de condição de corrida aparecem frequentemente em áreas de alto impacto:
Esses bugs consistentemente ganham as maiores recompensas em programas de bug bounty porque ameaçam diretamente a receita do negócio e a confiança do cliente.
Defina cenários de corrida uma vez em YAML, reutilize em projetos. O formato espelha os modelos do Nuclei para familiaridade:
id: checkout-race
info:
name: Corrida de Pedido Duplicado no Checkout
severity: critical
race:
mode: burst
concurrency: 20
request:
method: POST
path: /api/v1/checkout
headers:
Authorization: "Bearer {{session}}"
body: '{"item_id": "SKU-001"}'
validate:
follow_up:
method: GET
path: /api/v1/orders?user={{user_id}}
expect:
json_field: "orders.length"
condition: equals
value: 1
Modo Burst — Requisições paralelas baseadas em goroutines com sincronização precisa (estável, pronto para produção)
Sincronização Last-Byte — Ataque no nível TCP HTTP/1.1 (implementação pronta, fase de testes)
Pacote Único — Ataque baseado em frames HTTP/2 (implementação pronta, fase de testes)
RatRace automaticamente:
equals, not_equals, greater_than, containsImportar requisições existentes:
# De comandos curl
ratrace import --curl 'curl -X POST https://api.example.com/checkout ...' -o template.yaml
# De arquivos HAR exportados do Burp
ratrace import --har session.har -o template.yaml
Automação CI/CD:
ratrace race -u $TARGET -t template.yaml --silent
echo $? # Código de saída 10 = corrida encontrada, 0 = limpo
Relatórios profissionais:
# JSON para automação
ratrace race -u $TARGET -t template.yaml -o results/
# Relatórios HTML (planejado para V2)
ratrace report --input results.json --format html
git clone https://github.com/bogdanticu88/ratrace.git
cd ratrace
go build ./cmd/ratrace
./ratrace --help
Requisitos: Go 1.24+
docker build -t ratrace:latest .
docker run --rm -it ratrace:latest race -u https://api.example.com -t template.yaml
# 1. Importar do curl ou usar modelo existente
ratrace import --curl 'curl -X POST https://api.example.com/checkout ...' -o checkout.yaml
# 2. Executar a corrida
ratrace race -u https://api.example.com -t checkout.yaml -m burst -c 20
# 3. Revisar descobertas
# A saída mostra:
# 🔴 [CRITICAL] Corrida de Pedido Duplicado no Checkout
# Taxa de Anomalia: 91.7%
# Confiança: 84%
ratrace race \
-u https://shop.example.com \
-t examples/templates/checkout-race.yaml \
-m burst \
-c 25 \
--output results/
# Executa sem logs verbosos, sai com código semântico
ratrace race -u https://api.example.com -t template.yaml --silent
# Verificar código de saída
if [ $? -eq 10 ]; then
echo "Condição de corrida encontrada!"
exit 1
fi
ratrace race -u <url> -t <template> [options]
Options:
-m, --mode string burst|lastbyte|singlepacket (padrão do modelo)
-c, --concurrency int Número de goroutines (padrão 20)
-H, --header strings Cabeçalhos personalizados (repetível)
-x, --proxy string URL do proxy para requisições
-o, --output string Diretório de saída para resultados
--timeout duration Timeout da requisição (padrão 10s)
--insecure Ignorar verificação de certificado TLS
--dry-run Analisar modelo e sair
--silent Suprimir logs, mostrar apenas descobertas
ratrace import [--curl <comando> | --har <arquivo>] -o <output.yaml>
Converte requisições existentes (comandos curl ou exportações HAR) em modelos RatRace.
Útil para integração com fluxos de trabalho existentes.
ratrace report --input results.json --format [html|json] --output report.html
Gera relatórios legíveis por humanos a partir dos resultados dos testes de corrida.
ratrace ratelimit -u <url> -c <concurrency>
Testa se endpoints são vulneráveis a bypass de limitação de taxa concorrente.
Modelos são arquivos YAML que definem um cenário de corrida. Referência completa:
id: identificador-único
info:
name: "Nome legível por humanos"
severity: critical|high|medium|low|info
tags: [tag1, tag2]