System Architecture
High-Level Overview
Component Interaction Flow
1
Initialization
Server spawns initial Chrome instance (“empty phishbowl”) with Xvfb, navigates to target, loads broadcast page
2
Victim Connection
Victim HTTP request → Caddy → Fastify → Serves cuddlephish.html → Victim browser connects via WebSocket
3
Browser Pairing
Server pairs victim socket with available browser socket, prepares WebRTC negotiation
4
WebRTC Establishment
Browser broadcasts offer → Server relays to victim → Victim sends answer → ICE candidates exchanged
5
Video Streaming
Peer-to-peer WebRTC video stream established (Chrome → Victim), input forwarding enabled
6
Control Flow
Victim inputs → WebSocket → Server → Chrome DevTools Protocol → Browser actions
Core Components
index.js - Main Server
The primary orchestration component built on Fastify and Socket.io.Key Data Structures
Browser Objects:.get() method:
HTTP Routes
Victim Route (/*):
/admin):
/broadcast):
WebSocket Events
Browser Events:new_broadcast:
new_thumbnail:
video_stream_offer/answer:
new_phish:
mouse_event:
keydown/keyup:
take_over_browser:
get_cookies:
remove_instance:
Browser Lifecycle Management
Spawning Browsers: get_browser()
Browser Removal
WebRTC Implementation
Broadcast Side (broadcast.html)
Display Capture:Viewer Side (cuddlephish.html)
Peer Connection Setup:Input Forwarding
Mouse Events
Capture:Keyboard Events
Capture:Credential Extraction
Chrome DevTools Protocol Integration
Cookie Extraction:Window Resizing
Theresize_window.js module dynamically resizes browser windows to match controller viewports.
Security Mechanisms
Access Control
Admin IP Whitelisting:Stealth Features
Puppeteer-Extra Stealth Plugin:navigator.webdriver(removes automation indicator)navigator.plugins(adds realistic plugin list)navigator.languages(adds realistic language settings)- Chrome DevTools Protocol detection evasions
navigator.platform to match user-agent OS instead of “Linux”.
Automation Flags Removed:
Performance Considerations
Resource Usage Per Browser
- Memory: 500MB - 1GB per Chrome instance
- CPU: 10-20% per instance during active use
- Disk: ~50MB per user_data directory
- Network: 2-5 Mbps per WebRTC stream (bandwidth dependent on video quality)
Scaling Limits
Single Server:- Recommended: 5-10 concurrent victims
- Maximum: 20-30 concurrent victims (with sufficient resources)
- RAM consumption by Chrome instances
- CPU for video encoding/decoding
- Network bandwidth for WebRTC streams
- Xvfb overhead for multiple displays
Optimization Strategies
Reduce Thumbnail Frequency:- Pre-spawn browsers during low-activity periods
- Reuse browser instances for multiple victims (clear cookies between uses)
- Implement browser instance timeout and auto-cleanup
Next Steps
- Review Usage Guide for operational procedures
- See Troubleshooting for debugging techniques
- Explore Installation Guide for deployment details