CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-C279-989M-238F

GHSA-C279-989M-238F: Nil Pointer Dereference in Sliver C2 Reverse Tunnel Handler

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 30, 2026·6 min read·35 visits

Executive Summary (TL;DR)

Sliver versions <= 1.7.3 suffer from a nil pointer dereference in reverse tunnel closure logic, causing goroutine panics and memory leaks when an authenticated session requests a tunnel close.

A Nil Pointer Dereference vulnerability exists in the Sliver adversary emulation framework, specifically within the `tunnelCloseHandler` function. Authenticated operators or active implants can trigger a goroutine panic by attempting to close a reverse tunnel. This results in a localized denial-of-service condition and subsequent resource leakage.

Vulnerability Overview

The Sliver adversary emulation framework contains a logic flaw in its server-side reverse tunnel management. Vulnerability GHSA-C279-989M-238F is classified as a Nil Pointer Dereference (CWE-476) within the github.com/bishopfox/sliver package. The flaw affects all versions up to and including 1.7.3. It resides specifically within the server/handlers/sessions.go module, which is responsible for managing multiplexed connections between the management server and active remote implants.

The vulnerability requires an active, authenticated session to trigger. An attacker must possess an active implant session with the Sliver server to initiate the vulnerable tunnel closure sequence. This makes the attack vector authenticated and network-adjacent, as defined by the CVSS 3.1 and 4.0 scoring metrics. The primary impact maps directly to the availability of the framework's management capabilities.

When triggered, the flaw results in a denial-of-service (DoS) condition localized to the specific handler goroutine. Because the Go runtime isolates this failure via a panic recovery mechanism, the main server process does not terminate. However, the failure to cleanly close the reverse tunnel results in persistent state data remaining in memory, constituting a progressive resource leak over the lifetime of the server instance.

Root Cause Analysis

The root cause of GHSA-C279-989M-238F stems from an improper variable reference during the evaluation of tunnel ownership. The tunnelCloseHandler function processes incoming MsgTunnelClose messages. Its initial logic attempts to locate a standard forward tunnel using the provided tunnel identifier via the core.Tunnels.Get(tunnelData.TunnelID) method.

When the client requests the closure of a reverse tunnel (rportfwd), the forward tunnel lookup fails and returns nil. The execution flow correctly proceeds to an else branch designed to handle reverse tunnels. Within this branch, the code successfully retrieves the reverse tunnel object using rtunnels.GetRTunnel(tunnelData.TunnelID). The vulnerability materializes in the subsequent authorization check.

The application must verify that the session requesting the closure is the actual owner of the tunnel. To accomplish this, the code evaluates the condition session.ID == tunnel.SessionID. This references the tunnel variable from the outer scope, which is explicitly nil in this execution path. Attempting to access the SessionID field of a nil struct pointer immediately triggers a Go runtime panic.

Code Analysis

An examination of server/handlers/sessions.go reveals the exact mechanism of the failure. The vulnerable block resides at lines 172 and 175 of the module. The logic attempts to gracefully handle both standard and reverse tunnels within the same handler function, but incorrectly mixes the namespace of the tunnel objects during the reverse tunnel evaluation phase.

The following snippet demonstrates the flawed logic in the unpatched version of the software. The application correctly validates that rtunnel is not nil, but immediately follows this safe check with an unsafe dereference of the tunnel variable.

} else {
    rtunnel := rtunnels.GetRTunnel(tunnelData.TunnelID)
 
    // BUG: 'tunnel' is nil here, but the code accesses 'tunnel.SessionID'
    if rtunnel != nil && session.ID == tunnel.SessionID {      // LINE 172
        rtunnel.Close()
        rtunnels.RemoveRTunnel(rtunnel.ID)
    } else if rtunnel != nil && session.ID != tunnel.SessionID { // LINE 175
        sessionHandlerLog.Warnf("...")
    }
}

The remediation requires substituting the incorrect tunnel reference with the properly instantiated rtunnel variable. The patch corrects the authorization check to read the SessionID from the active reverse tunnel object. Historical analysis indicates that identical logic in the tunnelDataHandler function was previously patched, but the tunnelCloseHandler function was overlooked during that revision.

-  if rtunnel != nil && session.ID == tunnel.SessionID {
+  if rtunnel != nil && session.ID == rtunnel.SessionID {
       rtunnel.Close()
       rtunnels.RemoveRTunnel(rtunnel.ID)
-  } else if rtunnel != nil && session.ID != tunnel.SessionID {
+  } else if rtunnel != nil && session.ID != rtunnel.SessionID {

Exploitation and Impact

Exploitation of GHSA-C279-989M-238F requires the establishment of a valid reverse tunnel through an active Sliver implant. An operator or an adversary who has compromised the C2 infrastructure sends a MsgTunnelClose protocol message explicitly targeting the reverse tunnel identifier. This action transitions the server state into the vulnerable code path.

Upon receiving the message, the tunnelCloseHandler goroutine executes the flawed authorization check and encounters the invalid memory address. The Go runtime catches this fatal memory violation and triggers a panic. The Sliver framework employs a recoverAndLogPanic() mechanism at the top level of its handler dispatch loop. This prevents the entire server application from crashing completely.

While the primary server process remains operational, the specific goroutine processing the closure request terminates prematurely. The targeted reverse tunnel is never closed, and its metadata is never purged from the internal rtunnels mapping structure. Repeated exploitation of this flaw leads to the silent accumulation of orphaned tunnel objects. This results in memory exhaustion and degraded server performance over time. The functional regression also prevents operators from reclaiming bound network ports.

Remediation and Detection

The vulnerability affects all versions of the Sliver framework up to and including version 1.7.3. Administrators must apply the source code patch directly to the server/handlers/sessions.go file and recompile the server binary, as an official compiled release addressing this specific flaw was not broadly distributed at the time of publication. The patch alters the variable references on lines 172 and 175 to correctly target the rtunnel object.

Organizations utilizing Sliver for internal adversary emulation should prioritize detection of this condition. Security engineers must actively monitor the server execution logs for stack traces and panic events originating from the tunnelCloseHandler. The presence of the string invalid memory address or nil pointer dereference within the context of session handling is a definitive indicator of compromise or operational failure.

Operational mitigation involves strict access control to the Sliver management interface. Limiting the deployment of reverse tunnels (rportfwd) reduces the exposed attack surface until the framework can be properly updated. Operators encountering locked ports due to orphaned reverse tunnels must restart the Sliver server service to flush the leaked metadata and reclaim the operating system resources.

Official Patches

GitHub AdvisoryPrimary GitHub Security Advisory

Technical Appendix

CVSS Score
6.9/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Affected Systems

Sliver C2 Framework ServerGo Application Runtimes managing Sliver Implants

Affected Versions Detail

Product
Affected Versions
Fixed Version
Sliver
BishopFox
<= 1.7.3Unpatched as of publication
AttributeDetail
Vulnerability ClassNil Pointer Dereference (CWE-476)
Attack VectorNetwork (Authenticated Message Passing)
CVSS 4.0 Score6.9 (Medium)
CVSS 3.1 Score6.5 (Medium)
ImpactDenial of Service (Thread Level), Resource Leak
Exploit StatusUnweaponized / Functional Regression
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-476
NULL Pointer Dereference

A NULL pointer dereference occurs when the application dereferences a pointer that it expects to be valid, but is NULL, typically causing a crash or exit.

Vulnerability Timeline

Vulnerability Published
2026-03-29

References & Sources

  • [1]GitHub Security Advisory (Source)
  • [2]GitLab Advisory Database
  • [3]Sliver Repository

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 22 hours ago•CVE-2026-53493
6.9

CVE-2026-53493: Uncontrolled Resource Consumption in containerd Image-Pull Descriptor Graph Resolution

containerd is an open-source container runtime. Prior to versions 1.7.36, 2.0.13, 2.2.9, 2.3.6, and 2.4.1, a crafted OCI index graph can force very high CPU/memory usage during PullImage (before container start), causing long ContainerCreating stalls and, at larger sizes, node/runtime instability. The vulnerability occurs because containerd's image-pull descriptor graph resolution handlers processed OCI image indices and manifests recursively without enforcing boundaries on traversal depth or breadth, and without maintaining a global visited registry to count duplicate references.

Alon Barad
Alon Barad
15 views•6 min read
•about 23 hours ago•GHSA-62MM-XWMV-CRHG
7.5

GHSA-62MM-XWMV-CRHG: Unauthenticated Path Traversal in Khoj Static File Serving Endpoint

An unauthenticated path traversal vulnerability exists in the Khoj AI assistant platform via the static file serving endpoint `/home/{file_path:path}`. Due to improper path sanitization when handling user input with Python's pathlib module, a remote attacker can read arbitrary files from the server's filesystem.

Alon Barad
Alon Barad
6 views•5 min read
•about 24 hours ago•CVE-2026-100369
8.4

CVE-2026-100369: Argument Injection Vulnerability in CliInvoke Process Runner Factories

An argument injection vulnerability (CWE-88) in CliInvoke and AlastairLundy.CliInvoke allows local attackers to execute arbitrary system commands. By injecting double-quote characters into target file paths or arguments, attackers can terminate operating-system-level quoted boundaries and introduce new commands when shell runners are utilized.

Amit Schendel
Amit Schendel
7 views•5 min read
•1 day ago•CVE-2026-100368
8.4

CVE-2026-100368: OS Command Injection in CliInvoke Shell Wrappers

An OS command injection vulnerability exists in the PowerShell and Cmd shell wrappers of the CliInvoke .NET library (specifically the CliInvoke.Specializations package). Under vulnerable configurations, arguments and targets are passed as a single flat string to ProcessStartInfo.Arguments, permitting double-quote breakout and execution of arbitrary secondary commands with host process privileges.

Amit Schendel
Amit Schendel
6 views•7 min read
•1 day ago•GHSA-VV77-66RF-PM86
8.8

GHSA-vv77-66rf-pm86: Gas Draining Vulnerability in mpp Multi-Party Payments Library

A critical-severity input validation vulnerability in the Elixir multi-party payment library `mpp` allows unauthenticated remote attackers to exhaust the transaction fee payer's wallet balance. By submitting a crafted Ethereum transaction envelope with artificially inflated gas parameters, an attacker can force the server to co-sign and commit to pay exorbitant fees, leading to severe financial loss and Denial of Service.

Amit Schendel
Amit Schendel
7 views•5 min read
•1 day ago•GHSA-QPXH-FF8M-C62V
7.5

GHSA-QPXH-FF8M-C62V: Gas Draining and Resource Exhaustion in ZenHive mpp Library

A critical gas draining vulnerability exists in the ZenHive mpp (Multi-Payment Protocol) library prior to version v0.6.0. By omitting validation of EIP-2930 access lists in custom 0x76 transaction envelopes, the library allows malicious clients to pad transaction payloads with dummy addresses, draining the gas sponsor's hot wallet.

Amit Schendel
Amit Schendel
7 views•8 min read