WebSocket-Server treiben heute alles an, von Live-Dashboards über Trading-Plattformen bis hin zu Multiplayer-Spielen. Ihre langlebige, zustandsbehaftete Natur macht sie jedoch zu einem besonders kniffligen Ziel für klassische Security-Tests. HTTP-Fuzzer kapitulieren nach dem Handshake, und Bugs auf Protokollebene — in Frame-Parsern, Längenfeldern oder UTF-8-Validatoren — tauchen in funktionalen Tests praktisch nie auf.
Genau hier kommt wsfuzz ins Spiel.
wsfuzz wurde intern bei softScheck entwickelt und ist ein mutationsbasierter WebSocket-Fuzzer. Er kombiniert Radamsa für die Generierung von Eingaben, asynchrones I/O für hohe Nebenläufigkeit und rohen TCP-Zugriff für echtes Testen auf Protokollebene. Stateless-Fuzzing und zustandsbehaftete Szenarien werden beide unterstützt. Und das Beste daran: Wir veröffentlichen das Tool als Open Source, damit die gesamte Security-Community davon profitieren kann.
Warum wsfuzz verwenden?
- Tests auf Protokollebene – reservierte Opcodes, unmaskierte Frames, RSV-Bit-Manipulation, Payload-Längenabweichungen, ungültiges UTF-8, fehlerhafte Close-Codes und Handshake-Header-Fuzzing.
- Tests auf Anwendungsebene – mutationsbasiertes Fuzzing mit Radamsa, automatische Crash-Erkennung über Close-Codes, Resets und Exceptions.
- Zustandsbehaftete Szenarien – mehrstufige JSON-Workflows mit Setup, Capture, Erwartungen, optionaler HTTP-Vorauthentifizierung und Teardown.
- CSWSH-Prüfung – eingebaute Tests auf Cross-Site WebSocket Hijacking.
- Harness-Modus – bindet HTTP-basierte Security-Tools per Template-Injection an WebSocket-Endpunkte an.
- Intelligente Deduplizierung – Fingerprints auf Verhaltensbasis halten die Crash-Liste handhabbar.
- Deterministisches Replay – jeder Crash lässt sich aus seinem Artefakt reproduzieren und vergleichen.
Wie es funktioniert
Du zeigst wsfuzz auf einen WebSocket-Endpunkt, den Rest erledigt das Tool. Ein paar kurze Beispiele:
Einfaches Fuzzing gegen einen lokalen Server:
wsfuzz -t ws://localhost:64999
Text-Modus mit hoher Nebenläufigkeit:
wsfuzz -t ws://localhost:64999 -m text -c 10 -n 1000
Raw-Fuzzing inklusive Handshake:
wsfuzz -t ws://localhost:64999 --raw --fuzz-handshake
Authentifizierte Sessions mit eigenen Headern:
wsfuzz -t ws://localhost:64999 -H "Cookie: session=abc" -H "Authorization: Bearer tok"
Zustandsbehaftetes Szenario-Testing mit Verbindungs-Reuse:
wsfuzz -t ws://localhost:64999 --scenario ./scenarios/orders.json --scenario-reuse-connection
HTTP-basierte Security-Tools an einen WebSocket-Endpunkt anbinden:
wsfuzz -t ws://localhost:64999/api --harness --harness-template '{"user":"[FUZZ]"}'
Erfasste Crashes deterministisch wiederholen:
wsfuzz -t ws://localhost:64999 --replay ./crashes
Jeder Crash wird mitsamt Raw-Payload, Metadaten, Seed und – bei Szenario-Läufen – kompletter Session-Transkription gespeichert. Eine crash_index.json führt Fingerprints und Deduplizierungszähler, sodass du auch hunderte Funde triagieren kannst, ohne in Duplikaten unterzugehen.
Jetzt loslegen
🚀 Bereit, Bugs in deinen WebSocket-Servern zu jagen? Probiere wsfuzz aus!
🔗 Besuche das GitHub-Repository für Installationsanleitung und Dokumentation.
💡 Hast du Feedback oder Ideen? Öffne ein Issue oder beteilige dich an der Diskussion – wir freuen uns über jede Rückmeldung!
📚 Lies weitere interessante Beiträge in unserem Blog.