
Ein leichtgewichtiges CLI-Tool zur systematischen Erkennung und Ausnutzung von Wettlaufsituationen in Webanwendungen, APIs und modernen Diensten.
Race Conditions gehören zu den Sicherheitslücken mit der größten Auswirkung in modernen Anwendungen, werden aber von automatischen Scannern nach wie vor kaum abgedeckt. Während Tools wie Nuclei, ffuf und sqlmap hervorragend darin sind, statische Schwachstellen zu finden, sind sie grundsätzlich blind für nebenläufigkeitsbedingte Probleme.
Pentestern bleibt heute nur die Wahl: entweder jedes Mal manuell Wegwerfskripte schreiben oder ganz auf Race-Condition-Tests verzichten. Keine der beiden Optionen ist skalierbar oder professionell.
RatRace löst dies, indem es einen ausgereiften, wiederholbaren Workflow für Race-Condition-Tests bereitstellt – aus Ad-hoc-Skripten wird ein systematischer Prozess, der sich in CI/CD-Pipelines integrieren lässt und professionelle Berichte erstellt.
Race-Condition-Schwachstellen treten häufig in Bereichen mit hoher Auswirkung auf:
Diese Bugs erzielen in Bug-Bounty-Programmen durchweg die höchsten Prämien, da sie direkt den Geschäftsumsatz und das Kundenvertrauen gefährden.
Definieren Sie Race-Szenarien einmal in YAML und verwenden Sie sie in mehreren Projekten. Das Format orientiert sich an Nuclei-Templates für einen vertrauten Umgang:
id: checkout-race
info:
name: Checkout Duplicate Order Race
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
Burst-Modus – Parallelanfragen auf Basis von Goroutinen mit präziser Synchronisation (stabil, produktionsreif)
Last-Byte-Sync – TCP-Level-Angriff über HTTP/1.1 (Implementierung fertig, Testphase)
Single-Packet – Frame-basierter Angriff über HTTP/2 (Implementierung fertig, Testphase)
RatRace erledigt automatisch:
equals, not_equals, greater_than, containsVorhandene Anfragen importieren:
# Von curl-Befehlen
ratrace import --curl 'curl -X POST https://api.example.com/checkout ...' -o template.yaml
# Von Burp exportierten HAR-Dateien
ratrace import --har session.har -o template.yaml
CI/CD-Automatisierung:
ratrace race -u $TARGET -t template.yaml --silent
echo $? # Exit-Code 10 = Race gefunden, 0 = sauber
Professionelle Berichterstellung:
# JSON für Automatisierung
ratrace race -u $TARGET -t template.yaml -o results/
# HTML-Berichte (geplant für V2)
ratrace report --input results.json --format html
git clone https://github.com/bogdanticu88/ratrace.git
cd ratrace
go build ./cmd/ratrace
./ratrace --help
Voraussetzungen: Go 1.24+
docker build -t ratrace:latest .
docker run --rm -it ratrace:latest race -u https://api.example.com -t template.yaml
# 1. Von curl importieren oder vorhandenes Template verwenden
ratrace import --curl 'curl -X POST https://api.example.com/checkout ...' -o checkout.yaml
# 2. Race ausführen
ratrace race -u https://api.example.com -t checkout.yaml -m burst -c 20
# 3. Ergebnisse prüfen
# Ausgabe zeigt:
# 🔴 [CRITICAL] Checkout Duplicate Order Race
# Anomaly Rate: 91.7%
# Confidence: 84%
ratrace race \
-u https://shop.example.com \
-t examples/templates/checkout-race.yaml \
-m burst \
-c 25 \
--output results/
# Läuft ohne ausführliche Logs, beendet mit semantischem Code
ratrace race -u https://api.example.com -t template.yaml --silent
# Exit-Code prüfen
if [ $? -eq 10 ]; then
echo "Race condition found!"
exit 1
fi
ratrace race -u <url> -t <template> [options]
Options:
-m, --mode string burst|lastbyte|singlepacket (Standard aus Template)
-c, --concurrency int Goroutine-Anzahl (Standard 20)
-H, --header strings Benutzerdefinierte Header (wiederholbar)
-x, --proxy string Proxy-URL für Anfragen
-o, --output string Ausgabeverzeichnis für Ergebnisse
--timeout duration Anfrage-Timeout (Standard 10s)
--insecure TLS-Zertifikatsprüfung überspringen
--dry-run Template parsen und beenden
--silent Logs unterdrücken, nur Ergebnisse anzeigen
ratrace import [--curl <command> | --har <file>] -o <output.yaml>
Konvertiert vorhandene Anfragen (curl-Befehle oder HAR-Exporte) in RatRace-Templates.
Nützlich zur Integration in bestehende Workflows.
ratrace report --input results.json --format [html|json] --output report.html
Erstellt menschenlesbare Berichte aus Race-Testergebnissen.
ratrace ratelimit -u <url> -c <concurrency>
Testet, ob Endpunkte anfällig für gleichzeitige Ratenbegrenzungsumgehungen sind.
Templates sind YAML-Dateien, die ein Race-Szenario definieren. Vollständige Referenz:
id: unique-identifier
info:
name: "Human-readable name"
severity: critical|high|medium|low|info
tags: [tag1, tag2]