Sliver C2 Server mTLS Nil-Pointer Panic / Infrastructure Kill-Switch — CVE-2026-29781
by skoveit · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-29781 (GHSA-hx52-cv84-jr5v)
- Category
- network
- Affected product
- Sliver C2 server (BishopFox)
- Affected versions
- Versions prior to the fix referenced in GHSA-hx52-cv84-jr5v
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-03 |
| Author / Researcher | skoveit |
| CVE / Advisory | CVE-2026-29781 (GHSA-hx52-cv84-jr5v) |
| Category | network |
| Severity | High |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | sliver-c2, denial-of-service, nil-pointer-dereference, protobuf, mtls, golang, red-team-tooling |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Sliver C2 server (BishopFox) |
| Versions Affected | Versions prior to the fix referenced in GHSA-hx52-cv84-jr5v |
| Language / Platform | Go |
| Authentication Required | Local-only (requires captured implant’s mTLS certificate/key material) |
| Network Access Required | Yes |
Summary
Sliver C2’s transport-layer protobuf handlers (mTLS, WireGuard, DNS) lack consistent nil-pointer validation and lack a recover() mechanism around packet processing. A party in possession of a captured implant’s mTLS certificate, private key, and Age secret key can craft a malformed protobuf packet that triggers a nil-pointer dereference in the server’s handler, causing the entire Go runtime to panic and the Sliver server process to crash with SIGSEGV. Because all transports and operator gRPC connections share the same process, this single malformed packet takes down the whole C2 infrastructure — effectively letting whoever captured an implant “flip the switch” on the operators controlling it.
Vulnerability Details
Root Cause
Systemic lack of nil-pointer validation in Sliver’s protobuf message handlers, combined with the absence of a recover() guard around transport packet processing, so a single malformed packet crashes the whole Go process rather than being handled gracefully.
Attack Vector
- Obtain the mTLS client certificate, private key, and Age secret key from a captured/reversed Sliver implant binary.
- Configure
mtls_poc.gowith the extracted credentials and the C2 server endpoint. - Run the PoC (
go run mtls_poc.go), which connects using the legitimate implant credentials and sends a crafted malformed packet. - The server’s transport handler dereferences a nil pointer while processing the packet and panics, crashing the entire Sliver server process and disconnecting all sessions and operators.
Impact
Complete denial of service against the Sliver C2 server: all active implant sessions across mTLS/HTTP/WireGuard/DNS transports are dropped, all operators are disconnected from the gRPC console, and the server requires manual restart — a defender who captures an implant can use it to shut down the entire attacking infrastructure.
Environment / Lab Setup
Target: Sliver C2 server (vulnerable version), reachable mTLS listener
Attacker: Go toolchain, extracted implant mTLS cert/key + Age secret key
Proof of Concept
PoC Script
See
mtls_poc.goin this folder.
| |
After populating the placeholder variables (c2Endpoint, clientCertPEM, clientKeyPEM, peerPrivateKey) with credentials extracted from a captured implant, running the script sends the crafted malformed packet to the target Sliver mTLS listener and crashes the server process (verifiable via systemctl status sliver).
Detection & Indicators of Compromise
Signs of compromise:
- Sliver server process terminating unexpectedly (SIGSEGV) shortly after a client connection
- Sudden, simultaneous loss of all active sessions across all transports
- Operators disconnected from the gRPC console without a normal shutdown event
Remediation
| Action | Detail |
|---|---|
| Primary fix | Upgrade Sliver to the version referenced in GHSA-hx52-cv84-jr5v that adds nil-pointer validation and recover() handling in transport handlers |
| Interim mitigation | Run the Sliver server under a supervisor that auto-restarts on crash, and rotate/revoke implant credentials promptly after suspected capture |
References
Notes
Mirrored from https://github.com/skoveit/CVE-2026-29781 on 2026-07-05.
| |