QUIC Listener¶
QUIC (HTTP/3) provides a modern C2 transport built on UDP with built-in TLS 1.3, 0-RTT connection establishment, and connection migration. QUIC traffic is increasingly common on the internet (used by Google, Cloudflare, Meta) making it an effective transport for blending with normal traffic.
Why QUIC?
- UDP-based: Bypasses TCP-focused deep packet inspection and firewalls that only inspect TCP streams
- Built-in TLS 1.3: Encrypted by default with no option to downgrade -- resistant to SSL inspection appliances that rely on TLS interception
- 0-RTT resumption: Faster reconnection after sleep cycles -- the handshake completes in a single round-trip
- Connection migration: Beacon survives network changes (WiFi to Ethernet, VPN connect/disconnect) without re-establishing the session
- Multiplexed streams: Multiple concurrent requests over a single connection without head-of-line blocking
Architecture¶
QUIC reuses the exact same C2 HTTP mux as HTTP/HTTPS listeners. The only difference is the transport layer -- HTTP/3 over QUIC instead of HTTP/1.1 or HTTP/2 over TCP. This means malleable profiles, beacon registration, task queuing, and all C2 operations work identically.
sequenceDiagram
participant Implant as Implant (Windows)
participant Relay as Relay C2 Server (Kali)
participant Backend as Backend API Server
Implant->>Relay: QUIC/HTTP3 request (UDP, TLS 1.3)
Relay->>Backend: WebSocket event (beacon registration)
Backend-->>Relay: WebSocket command (task queue)
Relay-->>Implant: QUIC/HTTP3 response (task payload)
Implant->>Relay: QUIC/HTTP3 request (task result)
Relay->>Backend: WebSocket event (result delivery) Creating a QUIC Listener¶
REST API¶
curl -s -X POST https://stentor.app/api/v1/listeners \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "QUIC Primary",
"relay_id": "25b2e4d7-8b7f-411f-8fe0-7faed06b90d1",
"type": "quic",
"port": 8443,
"tls_auto_generate": true
}' | jq
Start the Listener¶
curl -s -X POST "https://stentor.app/api/v1/listeners/$LISTENER_ID/start" \
-H "Authorization: Bearer $TOKEN"
Configuration Options¶
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | string | Yes | -- | Display name for the listener |
relay_id | UUID | Yes | -- | Target relay agent |
type | string | Yes | -- | Must be quic |
port | int | Yes | -- | UDP port to listen on (default: 8443) |
host | string | No | Relay IP | Bind address |
tls_auto_generate | bool | No | true | Auto-generate TLS certificate |
tls_cert | string | No | -- | Custom TLS certificate (PEM) |
tls_key | string | No | -- | Custom TLS private key (PEM) |
Port Selection
Default port is 8443 (not 443) to avoid privileged port binding on Linux. QUIC uses UDP, so port 443/UDP is distinct from HTTPS on 443/TCP. You can run both an HTTPS and QUIC listener on port 443 simultaneously since they use different protocols (TCP vs UDP).
Malleable Profile Support¶
QUIC supports malleable C2 profiles just like HTTPS. Since HTTP/3 is still HTTP semantically, all HTTP transforms (headers, URI paths, body transforms, metadata encoding) apply to QUIC traffic.
# Create QUIC listener with malleable profile
curl -s -X POST https://stentor.app/api/v1/listeners \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "QUIC Malleable",
"relay_id": "25b2e4d7-8b7f-411f-8fe0-7faed06b90d1",
"type": "quic",
"port": 8443,
"tls_auto_generate": true,
"profile_id": "PROFILE_UUID"
}' | jq
Payload Generation¶
When generating payloads for a QUIC listener, the server auto-propagates the QUIC configuration (relay IP + listener port) from the listener type. The UI auto-detects the transport from listener.type.
Supported payload formats: All formats that support HTTPS also support QUIC (EXE, DLL, Service DLL, Shellcode, XLL).
# Generate payload for QUIC listener
curl -s -X POST https://stentor.app/api/v1/payloads/generate \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"listener_id": "LISTENER_UUID",
"format": "exe",
"arch": "x64"
}' --output payload.exe
QUIC vs HTTPS¶
| Feature | HTTPS | QUIC |
|---|---|---|
| Protocol | TCP + TLS 1.2/1.3 | UDP + TLS 1.3 (built-in) |
| Port | 443/TCP (or custom) | 443/UDP (or custom) |
| DPI evasion | Moderate -- TCP inspection well-understood | Higher -- UDP inspection less common |
| Connection migration | No -- TCP 4-tuple fixed | Yes -- survives network changes |
| 0-RTT resumption | TLS 1.3 only | Built-in |
| Firewall bypass | High -- HTTPS allowed everywhere | Moderate -- some networks block UDP 443 |
| Malleable profiles | Full support | Full support |
| Head-of-line blocking | Yes (HTTP/1.1) or per-stream (HTTP/2) | None -- independent streams |
Network Compatibility
Some corporate networks block outbound UDP entirely or only allow UDP 53 (DNS). In these environments, QUIC will fail and you should use HTTPS instead. Test QUIC connectivity before relying on it as the sole transport.
OPSEC Considerations¶
OPSEC
- QUIC traffic on non-standard ports (e.g., 8443/UDP) may stand out in network logs -- prefer port 443 when possible
- Some network monitoring tools do not yet inspect QUIC traffic, which is an advantage
- Connection migration means the beacon can survive VPN reconnections without generating new TLS handshakes
- 0-RTT data can theoretically be replayed -- the
quic-golibrary handles replay protection at the protocol layer - QUIC uses the same TLS certificate infrastructure as HTTPS -- use legitimate certificates for maximum stealth
- The QUIC implementation uses the
quic-golibrary which produces a distinct TLS fingerprint (not Chrome/Firefox) -- consider this when fingerprint analysis is a concern
Troubleshooting¶
| Issue | Cause | Fix |
|---|---|---|
| Connection timeout | UDP blocked by firewall | Check outbound UDP rules, try port 443 |
| Certificate error | Self-signed cert rejected | Use IMPLANT_INSECURE_SKIP_VERIFY=true or valid cert |
| Listener won't start | Port conflict | Check for existing UDP listeners on the port |
| Intermittent drops | UDP packet loss on lossy networks | QUIC has built-in retransmission, but high loss may cause slowdowns |